<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Bass.Net</name>
    </assembly>
    <members>
        <member name="T:Un4seen.Bass.AddOn.Aac.BassAac">
            <summary>
            BASS.NET API wrapper for BASS_AAC.DLL
            <para>Requires: bass_aac.dll - AAC and MP4 Audio Codec (AAC) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_AAC is an extension to the BASS audio library, enabling the playback of AAC and MP4 files and streams.</para>
            <para>Advanced Audio Coding (AAC) is a wideband audio coding algorithm that exploits two primary coding strategies to dramatically reduce the amount of data needed to convey high-quality digital audio. 
            First, signal components that are "perceptually irrelevant" and can be discarded without a perceived loss of audio quality are removed. Next, redundancies in the coded audio signal are eliminated.
            Efficient audio compression is achieved by a variety of perceptual audio coding and data compression tools, which are combined in the MPEG-4 AAC specification.</para>
            <para>The AAC and MP4 formats are used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/URL/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> /URL/User functions.</para>
            <para>More information can be found on <a href="http://www.vialicensing.com">www.vialicensing.com</a>.</para>
            <para>BASS_AAC is distributed under the GPL (see LICENSE.TXT).</para>
            <para>- For commercial use of BASS_AAC, please contact Nero AG at <a href="http://www.nero.com/eng/technologies-nerodigital-licensing.html">Partner with Nero to implement Nero Digital™ technology</a>.</para>
            <para>- AAC is a patented technology. To use it in your software, please obtain a license from Via Licensing at <a href="http://www.vialicensing.com">www.vialicensing.com</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a AAC file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a AAC memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a AAC file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from a AAC file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
            <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_MP4_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_MP4_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a MP4 file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_MP4_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_MP4_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a MP4 memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.BASS_MP4_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a MP4 file via user callback functions.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Aac.BassAac.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bass_aac.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Aac.BassAac.SupportedStreamName">
            <summary>
            Supported file format name of the bass_aac.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Aac.BassAac.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Aac.BassAac.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Aac.BassAac.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Ac3.BassAc3">
            <summary>
            BASS.NET API wrapper for BASS_AC3.DLL
            <para>Requires: bass_ac3.dll - Dolby Digital AC-3 Codec (AC3) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_AC3 is an extension to the BASS audio library, enabling the playback	of AC-3 streams.
            AC-3, often referred to as Dolby Digital, is Dolby's third digital audio coding technology based on a perceptual coding method. It is more advanced than AC-2 and delivers up to 5.1 discrete channels of surround sound in less space than stereo PCM.</para>
            <para>The AC-3 format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/URL/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> /URL/User functions.</para>
            <para>More information can be found on <a href="http://www.dolby.com">www.dolby.com</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a Dolby Digital AC-3 file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a Dolby Digital AC-3 memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a Dolby Digital AC-3 file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from a Dolby Digital AC-3 file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Ac3.BassAc3.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bass_ac3.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Ac3.BassAc3.SupportedStreamName">
            <summary>
            Supported file format name of the bass_ac3.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ac3.BassAc3.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Ac3.BassAc3.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Ac3.BassAc3.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Alac.BassAlac">
            <summary>
            BASS.NET API wrapper for BASSALAC.DLL
            <para>Requires: bassalac.dll - Apple Lossless Audio Codec (ALAC) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSALAC is an extension to the BASS audio library, enabling the playback of ALAC files.</para>
            <para>ALAC is an audio codec developed by Apple Computer. It is not a variant of AAC, but a totally new lossless format which is usually wrapped into an MP4 or MOV container. The Apple Lossless Encoder was introduced as a component of QuickTime 6.5.1 on April 28th, 2004 and thus as a feature of iTunes 4.5.</para>
            <para>The ALAC format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Alac.BassAlac.BASS_ALAC_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> /User functions.</para>
            <para>More information can be found on <a href="http://www.dolby.com">www.dolby.com</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.BASS_ALAC_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.BASS_ALAC_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a Apple Lossless Audio file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.BASS_ALAC_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.BASS_ALAC_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a Apple Lossless Audio memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.BASS_ALAC_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a Apple Lossless Audio file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.BASS_ALAC_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.BASS_ALAC_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from a ALAC file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Alac.BassAlac.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bassalac.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Alac.BassAlac.SupportedStreamName">
            <summary>
            Supported file format name of the bassalac.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Alac.BassAlac.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Alac.BassAlac.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Alac.BassAlac.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Ape.BassApe">
            <summary>
            BASS.NET API wrapper for BASS_APE.DLL
            <para>Requires: bass_ape.dll - Monkey's Audio Codec (APE) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_APE is an extension to the BASS audio library, enabling the playback of Monkey's Audio files.</para>
            <para>Monkey's Audio is a fast and powerful way to compress digital music. Unlike traditional methods, such as MP3, Vorbis or WMA which permanently discard quality to save space, Monkey's Audio makes perfect, lossless copies of your music, while still being able to save a lot of space.</para>
            <para>The Monkey's Audio format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/URL/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Ape.BassApe.BASS_APE_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> /URL/User functions.</para>
            <para>More information can be found on <a href="http://www.monkeysaudio.com">www.monkeysaudio.com</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ape.BassApe.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ape.BassApe.BASS_APE_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ape.BassApe.BASS_APE_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a Monkey's Audio file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ape.BassApe.BASS_APE_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ape.BassApe.BASS_APE_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a Monkey's Audio memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ape.BassApe.BASS_APE_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a Monkey's Audio file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Ape.BassApe.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bass_ape.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Ape.BassApe.SupportedStreamName">
            <summary>
            Supported file format name of the bass_ape.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ape.BassApe.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ape.BassApe.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ape.BassApe.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Ape.BassApe.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Ape.BassApe.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BassCd">
            <summary>
            BASS.NET API wrapper for BASSCD.DLL
            <para>Requires: basscd.dll - CD Audio Tracks (CD) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSCD is an extension to the BASS audio library, enabling the streaming and ripping of CD audio tracks.</para>
            <para>The CD format is used in very much the same way as any of the built-in BASS stream formats - simply call the CD stream creation function instead of the BASS built-in functions. The BASS plugin system (see <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>) is also supported for CDA files.</para>
            <para>Plus there are many additional CD drive, digital as well as analog related methods.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_SetInterface(Un4seen.Bass.AddOn.Cd.BASSCDInterface)">
            <summary>
            Sets the interface to use to access CD drives
            </summary>
            <param name="iface">The interface to use, which can be one of the following (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASSCDInterface"/>):
            <list type="table">
            <item><term>BASS_CD_IF_AUTO</term><description>Automatically detect an available interface. The interfaces are checked in the order that they are listed here. For example, if both SPTI and ASPI are available, SPTI will be used.</description></item>
            <item><term>BASS_CD_IF_SPTI</term><description>SCSI Pass-Through Interface. This is only available on NT-based Windows, not Windows 9x, and generally only to administrator user accounts, not limited/restricted user accounts.</description></item>
            <item><term>BASS_CD_IF_ASPI</term><description>Advanced SCSI Programming Interface. This is the only interface available on Windows 9x, and can also be installed on NT-based Windows.</description></item>
            <item><term>BASS_CD_IF_WIO</term><description>Windows I/O. Like SPTI, this is only available on NT-based Windows, but it is also available to limited/restricted user accounts. Some features are not available via this interface, notably sub-channel data reading and read speed control (except on Vista or newer). Door status detection is also affected.</description></item>
            </list>
            </param>
            <returns>If successful, the interface being used is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            The interface can be changed at any time, but any existing CD streams will be freed in doing so. 
            The current interface can also be reinitialized, to detect any newly connected drives.
            <para>Use of this function is optional. If it is not used, BASSCD will automatically detect an available interface.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="iface"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The interface is not available, or has no drives available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)">
            <summary>
            Retrieves information on a drive.
            </summary>
            <param name="drive">The drive to get info on... 0 = the first drive.</param>
            <param name="info">An instance of the <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO"/> class to store the information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_CD_INFO info = new BASS_CD_INFO();
            if ( BassCd.BASS_CD_GetInfo(0, info) )
            	Console.WriteLine( info.ToString() );
            </code>
            <code lang="VB">
            Dim info As New BASS_CD_INFO()
            If BassCd.BASS_CD_GetInfo(0, info) Then
              Console.WriteLine(info.ToString())
            End If
            </code>
            Check if the first drive can read CD-TEXT:
            <code lang="C#">
            bool canReadCDText = false;
            BASS_CD_INFO info = new BASS_CD_INFO();
            if (BassCd.BASS_CD_GetInfo(0, info) &amp;&amp; info.cdtext)
            {
              canReadCDText = true;
            }
            </code>
            <code lang="VB">
            Dim canReadCDText As Boolean = False
            Dim info As New BASS_CD_INFO()
            If BassCd.BASS_CD_GetInfo(0, info) AndAlso info.cdtext Then
              canReadCDText = True
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32)">
            <summary>
            Retrieves information on a drive.
            </summary>
            <param name="drive">The drive to get info on... 0 = the first drive.</param>
            <returns>An instance of the <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO"/> class on success - or <see langword="null"/> on error.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_CD_INFO info = BassCd.BASS_CD_GetInfo(0);
            if ( info != null )
              Console.WriteLine( info.ToString() );
            </code>
            <code lang="VB">
            Dim info As BASS_CD_INFO = BassCd.BASS_CD_GetInfo(0)
            If Not (info Is Nothing) Then
              Console.WriteLine(info.ToString())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,System.Boolean)">
            <summary>
            Retrieves information on a drive.
            </summary>
            <param name="drive">The drive to get info on... 0 = the first drive.</param>
            <param name="release">Release the drive after obtaining the info?
            <para>If set, <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Release(System.Int32)"/> will be called right after (which might be required with some drivers).</para>
            </param>
            <returns>An instance of the <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO"/> class on success - or <see langword="null"/> on error.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_CD_INFO info = BassCd.BASS_CD_GetInfo(0);
            if ( info != null )
              Console.WriteLine( info.ToString() );
            </code>
            <code lang="VB">
            Dim info As BASS_CD_INFO = BassCd.BASS_CD_GetInfo(0)
            If Not (info Is Nothing) Then
              Console.WriteLine(info.ToString())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfos">
            <summary>
            Returns all available CD drive information.
            </summary>
            <returns>An array of <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO"/> representing the available CD drives.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)"/> internally.
            <para>The index of the returned information equals the drive number, which might be used with any other BassCd method.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfos(System.Boolean)">
            <summary>
            Returns all available CD drive information.
            </summary>
            <param name="release">Release the drive(s) after obtaining the info?
            <para>If set, <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Release(System.Int32)"/> will be called right after (which might be required with some drivers).</para>
            </param>
            <returns>An array of <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO"/> representing the available CD drives.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)"/> internally.
            <para>The index of the returned information equals the drive number, which might be used with any other BassCd method.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetDriveCount">
            <summary>
            Returns the total number of available CD drives.
            </summary>
            <returns>Number of CD drives available.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetDriveCount(System.Boolean)">
            <summary>
            Returns the total number of available CD drives.
            </summary>
            <param name="release">Release the drive(s) after obtaining the info?
            <para>If set, <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Release(System.Int32)"/> will be called right after (which might be required with some drivers).</para>
            </param>
            <returns>Number of CD drives available.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Door(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDDoor)">
            <summary>
            Opens, closes, locks or unlocks a drive door.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="action">The action to perform... one of the following (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASSCDDoor"/>):
            <list type="table">
            <item><term>BASS_CD_DOOR_CLOSE</term><description>Close the door.</description></item>
            <item><term>BASS_CD_DOOR_OPEN</term><description>Open the door.</description></item>
            <item><term>BASS_CD_DOOR_LOCK</term><description>Lock the door.</description></item>
            <item><term>BASS_CD_DOOR_UNLOCK</term><description>Unlock the door.</description></item>
            </list>
            </param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="action"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem! Could be that the door is locked.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Open the CD door of the first drive:
            <code lang="C#">
            BassCd.BASS_CD_Door( 0, BASSCDDoor.BASS_CD_DOOR_OPEN );
            </code>
            <code lang="VB">
            BassCd.BASS_CD_Door( 0, BASSCDDoor.BASS_CD_DOOR_OPEN )
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_DoorIsOpen(System.Int32)">
            <summary>
            Checks if a drive door/tray is open.
            </summary>
            <param name="drive">The drive to check... 0 = the first drive.</param>
            <returns><see langword="true"/> is returned if the door is open, else <see langword="false"/> is returned.</returns>
            <remarks>It is not possible to get the drive's current door status via the WIO interface. 
            So the last known status will be returned in that case, which may not be accurate if the door has been opened or closed by another application, or manually.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_DoorIsLocked(System.Int32)">
            <summary>
            Checks if a drive door/tray is locked.
            </summary>
            <param name="drive">The drive to check... 0 = the first drive.</param>
            <returns><see langword="true"/> is returned if the door is locked, else <see langword="false"/> is returned.</returns>
            <remarks>It is not possible to get the drive's current door status via the WIO interface. 
            So the last known status will be returned in that case, which may not be accurate if the door has been opened or closed by another application.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Release(System.Int32)">
            <summary>
            Releases a drive to allow other applications to access it.
            </summary>
            <param name="drive">The drive to release... 0 = the first drive.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>When using the SPTI interface, some applications may require BASSCD to release a CD drive before the app is able to use it. 
            After a drive has been released, BASSCD will attempt to re-acquire it in the next BASSCD function call made on it.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The ASPI interface is being used.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetSpeed(System.Int32)">
            <summary>
            Retrieves the current read speed setting of a drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <returns>If successful, the read speed (in KB/s) is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Divide the speed by 176.4 to get the real-time speed multiplier, eg. 5645 / 176.4 = "32x speed".
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The read speed is unavailable.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetSpeedFactor(System.Int32)">
            <summary>
            Retrieves the current read speed factor of a drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <returns>If successful, the read speed factor (e.g. 32x) is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The read speed is unavailable.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_SetSpeed(System.Int32,System.Int32)">
            <summary>
            Sets the read speed of a drive in KB/s.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="speed">The speed, in KB/s.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The speed is automatically restricted (rounded down) to what's supported by the drive, so may not be exactly what was requested. <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetSpeed(System.Int32)"/> can be used to check that. 
            The maximum supported speed can be retrieved via <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)"/>.</para>
            <para>To use a real-time speed multiplier, multiply it by 176.4 (and round up) to get the KB/s speed to use with this function, eg. "32x speed" = 32 * 176.4 = 5645.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_SetSpeed(System.Int32,System.Single)">
            <summary>
            Sets the read speed of a drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="factor">The speed factor multiplier, e.g. 32.0 for 32x.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            The speed is automatically restricted (rounded down) to what's supported by the drive, so may not be exactly what was requested. <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetSpeed(System.Int32)"/> can be used to check that. 
            The maximum supported speed can be retrieved via <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetCache(System.Int32)">
            <summary>
            Gets the read cache of a CD drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <returns>Gets the current read cache value.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_SetCache(System.Int32,System.Boolean)">
            <summary>
            Sets the read cache of a CD drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="enable"><see langword="true"/> to enable the read cache - <see langword="false"/> to disable it.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_SetOffset(System.Int32,System.Int32)">
            <summary>
            Sets the read offset of a drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="offset">The offset (in samples; bytes/4) to set.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function can be used to compensate for the fact that most drives will read audio data from CDs at a slight offset from where they ideally should.
            Different drive models will have differing offsets, a list of which can be found at <a href="www.accuraterip.com/driveoffsets.htm">AccurateRip</a>.
            <para>When a negative offset is used, reading the beginning of the first track will require accessing the lead-in, and when a positive offset is used, reading the end of the last track will require accessing the lead-out.
            The drive may not support that (overreading), in which case those parts will be replaced with silence.</para>
            <para>Changes do not affect an existing CD stream, unless <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamSetTrack(System.Int32,System.Int32)"/> is called (and any sub-channel/C2 reading is using a <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/>).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_IsReady(System.Int32)">
            <summary>
            Checks if there is a CD ready in a drive.
            </summary>
            <param name="drive">The drive to check... 0 = the first drive.</param>
            <returns>If there is a CD ready in the drive, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>This function only returns <see langword="true"/> once there's a CD in the drive, and it's ready to be accessed.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetIDPtr(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDId)">
            <summary>
            
            </summary>
            <param name="drive"></param>
            <param name="id"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetID(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDId)">
            <summary>
            Retrieves identification info from the CD in a drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="id">The identification to retrieve, one of the following (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASSCDId"/>):
            <list type="table">
            <item><term>BASS_CDID_UPC</term><description>Returns the catalog number of the CD. The number uses UPC/EAN-code (BAR coding). This might not be available for all CDs.</description></item>
            <item><term>BASS_CDID_CDDB</term><description>Produces a CDDB identifier. This can be used to get details on the CD's contents from a CDDB server.</description></item>
            <item><term>BASS_CDID_CDDB_QUERY</term><description>Sends a "query" command to the configured CDDB server (see <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_CDDB_SERVER"/>) to get a list of matching entries for the CD's CDDB identifier. The contents of each entry can be retrieved via the BASS_CDID_CDDB_READ option.</description></item>
            <item><term>BASS_CDID_CDDB_READ + <i>entry</i></term><description>Sends a "read" command to the configured CDDB server (see <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_CDDB_SERVER"/>) to get a database entry for the CD's CDDB identifier... 0 = first entry.</description></item>
            <item><term>BASS_CDID_CDDB_READ_CACHE</term><description>Returns the cached CDDB "read" command response, if there is one.</description></item>
            <item><term>BASS_CDID_CDDB2</term><description>Produces a CDDB2 identifier. This can be used to get details on the CD's contents from a CDDB2 server.</description></item>
            <item><term>BASS_CDID_CDPLAYER</term><description>Produces an identifier that can be used to lookup CD details in the CDPLAYER.INI file, located in the Windows directory.</description></item>
            <item><term>BASS_CDID_MUSICBRAINZ</term><description>Produces an identifier that can be used to get details on the CD's contents from MusicBrainz.</description></item>
            <item><term>BASS_CDID_ISRC + <i>track</i></term><description>Returns the International Standard Recording Code of the track... 0 = first track. This might not be available for all CDs.
            Use <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetISRC(System.Int32,System.Int32)"/> for a more convenient way to read the ISRC.</description></item>
            </list>
            </param>
            <returns>If an error occurs, <see langword="null"/> is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. If successful, the identication info is returned.</returns>
            <remarks>
            <para>BASS_CDID_TEXT is not supported with this overload (see <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetIDText(System.Int32)"/>).</para>
            <para>The returned identification string will remain in memory until the next call to this function, when it will be overwritten by the next result.
            If you need to keep the contents of an identification string, you should copy it before calling this function again. Exceptions to that are BASS_CDID_CDDB_QUERY and BASS_CDID_CDDB_READ responses, which are cached separately per-drive.
            A BASS_CDID_CDDB_QUERY response remains cached while the same CD is in the drive, and a BASS_CDID_CDDB_READ response is cached until a different database entry is requested.
            The CDDB caches are also cleared whenever the CDDB server is changed via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_CDDB_SERVER"/> config option.</para>
            <para>When requesting CDDB identification, the string returned is what should be used in a CDDB query. The command sent to the CDDB server would be "cddb query &lt;the returned string&gt;". 
            If successful, that results in a list of matching CDs, which the contents of can be requested using the "cddb read" command. 
            That is what the BASS_CDID_CDDB_QUERY and BASS_CDID_CDDB_READ options do.
            See <a href="http://www.cddb.com">www.cddb.com</a> and <a href="http://www.freedb.org">www.freedb.org</a> for more information on using a CDDB server.</para>
            <para>When requesting MUSICBRAINZ see <a href="http://www.musicbrainz.org">www.musicbrainz.org</a> for details.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="id"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The CD does not have a UPC, ISRC or CD-TEXT info, or the BASS_CDID_CDDB_READ entry number is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get a CDDB2 string from your first drive:
            <code lang="C#">
            string cddb2 = BASS_CD_GetID(0, BASSCDId.BASS_CDID_CDDB2);
            </code>
            <code lang="VB">
            Dim cddb2 As String = BASS_CD_GetID(0, BASSCDId.BASS_CDID_CDDB2)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetISRC(System.Int32,System.Int32)">
            <summary>
            Returns the International Standard Recording Code of a track.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="track">The track... 0 = the first track.</param>
            <returns>If an error occurs, <see langword="null"/> is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. If successful, the ISRC is returned.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The CD does not have a UPC, ISRC or CD-TEXT info.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetIDText(System.Int32)">
            <summary>
            Retrieves CD-Text identification info from the CD in a drive (BASS_CDID_TEXT).
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <returns>If an error occurs, <see langword="null"/> is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            If successful, a string array of all CD-Text tags is returned.
            <para><b>CD-TEXT tags:</b></para>
            <para>When requesting CD-TEXT, the tags are returned in the form of "tag=text". 
            The following is a list of all the possible tags. Where &lt;t&gt; is shown, that represents the track number, with "0" being the whole disc/album. For example, "TITLE0" is the album title, while "TITLE1" is the title of the first track.</para>
            <list type="table">
            <item><term>TITLE<i>&lt;t&gt;</i></term><description>The track (or album) title.</description></item>
            <item><term>PERFORMER<i>&lt;t&gt;</i></term><description>The performer(s), artist(s).</description></item>
            <item><term>SONGWRITER<i>&lt;t&gt;</i></term><description>The song writer(s).</description></item>
            <item><term>COMPOSER<i>&lt;t&gt;</i></term><description>The composer(s).</description></item>
            <item><term>ARRANGER<i>&lt;t&gt;</i></term><description>The arranger(s).</description></item>
            <item><term>MESSAGE<i>&lt;t&gt;</i></term><description>Message.</description></item>
            <item><term>GENRE<i>&lt;t&gt;</i></term><description>Genre.</description></item>
            <item><term>ISRC<i>&lt;t&gt;</i></term><description>International Standard Recording Code (ISRC) of the track... &lt;t&gt; is never 0.</description></item>
            <item><term>UPC</term><description>UPC/EAN code of the album.</description></item>
            <item><term>DISCID</term><description>Disc identification information.</description></item>
            </list>
            </returns>
            <remarks>
            <para>The returned identification string will remain in memory until the next call to this function, when it'll be overwritten by the next result. If you need to keep the contents of an identification string, then you should copy it before calling this function again.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The CD does not have a UPC, ISRC or CD-TEXT info.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            List all CD-Text tags of your first drive:
            <code lang="C#">
            string[] cdText = BASS_CD_GetIDText(0);
            if (cdText != null)
            {
              foreach (string tag in cdText)
                Console.Writeln( tag );
            }
            </code>
            <code lang="VB">
            Dim cdText As String() = BASS_CD_GetIDText(0)
            If Not (cdText Is Nothing) Then
              Dim tag As String
              For Each tag In cdText
                Console.Writeln(tag)
              Next tag
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC)">
            <summary>
            Retrieves the TOC from the CD in a drive.
            </summary>
            <param name="drive">The drive to get info on... 0 = the first drive.</param>
            <param name="mode">Optionally, the following (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode"/>):
            <list type="table">
            <item><term>BASS_CD_TOC_LBA</term><description>Get the track start address in LBA form.</description></item>
            <item><term>BASS_CD_TOC_TIME</term><description>Get the track start address in time form.</description></item>
            <item><term>BASS_CD_TOC_INDEX <i>+track number (0=first)</i>i></term><description>Get the position of a track's indexes.</description></item>
            </list>
            </param>
            <param name="toc">An instance of the <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC"/> class to store the information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function gives the TOC in the form that it is delivered by the drive, except that the byte order may be changed to match the system's native byte order (the TOC is originally big-endian). 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get a CD's TOC:
            <code lang="C#">
            BASS_CD_TOC toc = new BASS_CD_TOC();
            if (BassCd.BASS_CD_GetTOC(0, BASSCDTOCMode.BASS_CD_TOC_TIME, toc))
            {
            	Console.WriteLine(toc.ToString());
            	// list the TOC_TRACKs
            	foreach (BASS_CD_TOC_TRACK track in toc.tracks)
            	{
            		Console.WriteLine(track.ToString());
            	}
            }
            </code>
            <code lang="VB">
            Dim toc As New BASS_CD_TOC()
            If BassCd.BASS_CD_GetTOC(0, BASSCDTOCMode.BASS_CD_TOC_TIME, toc) Then
            	Console.WriteLine(toc.ToString())
            	' list the TOC_TRACKs
            	For Each track As BASS_CD_TOC_TRACK In toc.tracks
            		Console.WriteLine(track.ToString())
            	Next
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode)">
            <summary>
            Retrieves the TOC from the CD in a drive.
            </summary>
            <param name="drive">The drive to get info on... 0 = the first drive.</param>
            <param name="mode">Optionally, the following (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode"/>):
            <list type="table">
            <item><term>BASS_CD_TOC_LBA</term><description>Get the track start address in LBA form.</description></item>
            <item><term>BASS_CD_TOC_TIME</term><description>Get the track start address in time form.</description></item>
            <item><term>BASS_CD_TOC_INDEX <i>+track number (0=first)</i>i></term><description>Get the position of a track's indexes.</description></item>
            </list>
            </param>
            <returns>If successful, an instance of the <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC"/> class is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function gives the TOC in the form that it is delivered by the drive, except that the byte order may be changed to match the system's native byte order (the TOC is originally big-endian). 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get a CD's TOC:
            <code lang="C#">
            BASS_CD_TOC toc = BassCd.BASS_CD_GetTOC(0, BASSCDTOCMode.BASS_CD_TOC_TIME);
            if (toc != null)
            {
            	Console.WriteLine(toc.ToString());
            	// list the TOC_TRACKs
            	foreach (BASS_CD_TOC_TRACK track in toc.tracks)
            	{
            		Console.WriteLine(track.ToString());
            	}
            }
            </code>
            <code lang="VB">
            Dim toc As BASS_CD_TOC = BassCd.BASS_CD_GetTOC(0, BASSCDTOCMode.BASS_CD_TOC_TIME)
            If toc IsNot Nothing Then
            	Console.WriteLine(toc.ToString())
            	' list the TOC_TRACKs
            	For Each track As BASS_CD_TOC_TRACK In toc.tracks
            		Console.WriteLine(track.ToString())
            	Next
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTracks(System.Int32)">
            <summary>
            Retrieves the number of tracks on the CD in a drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. If successful, the number of tracks on the CD is returned.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTrackLength(System.Int32,System.Int32)">
            <summary>
            Retrieves the length (in bytes) of a track.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="track">The track to retrieve the length of... 0 = the first track.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. If successful, the length of the track is returned.</returns>
            <remarks>CD audio is always 44100hz stereo 16-bit. That's 176400 bytes per second. So dividing the track length by 176400 gives the length in seconds.
            <para>See also: <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTrackLengthSeconds(System.Int32,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTrackPregap(System.Int32,System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_CDTRACK</term><description>The <paramref name="track"/> number is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The track is not an audio track.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTrackLengthSeconds(System.Int32,System.Int32)">
            <summary>
            Retrieves the length (in seconds) of a track.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="track">The track to retrieve the length of... 0 = the first track.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. If successful, the length of the track in seconds is returned.</returns>
            <remarks>CD audio is always 44100hz stereo 16-bit. That's 176400 bytes per second.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_CDTRACK</term><description>The <paramref name="track"/> number is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The track is not an audio track.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTrackPregap(System.Int32,System.Int32)">
            <summary>
            Retrieves the pregap length (in bytes) of a track.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="track">The track to retrieve the pregap length of... 0 = the first track.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            If successful, the pregap length of the track is returned. To translate the pregap length from bytes to frames, divide by 2352.</returns>
            <remarks>The drive needs to support sub-channel reading in order to detect all but the first pregap length. 
            The rwflags member of the <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO"/> structure can be used to check whether the drive can read sub-channel data.
            <para>A track's pregap is actually played as part of the preceeding track. 
            So to remove the gap from the end of a track, you would get the pregap length of the following track. 
            The gap will usually contain silence, but it doesn't have to - it could contain crowd noise in a live recording, for example.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_CDTRACK</term><description>The <paramref name="track"/> number is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The track is not an audio track.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Reading sub-channel data is not supported by the drive.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the length of track 1 minus the ending gap (pregap of track 2):
            <code lang="C#">
            // get first track length
            int len = BassCd.BASS_CD_GetTrackLength(0, 0);
            // subtract the ending gap
            len -= BassCd.BASS_CD_GetTrackPregap(0, 1);
            </code>
            <code lang="VB">
            ' get first track length
            Dim len As Integer = BassCd.BASS_CD_GetTrackLength(0, 0)
            ' subtract the ending gap
            len -= BassCd.BASS_CD_GetTrackPregap(0, 1)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from an audio CD track.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="track">The track... 0 = the first track, BASS_CD_TRACK_PREGAP = 1st track pregap (not all drives support reading of the 1st track pregap).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the stream to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>Requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the stream.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_CD_SUBCHANNEL</term><description>Read sub-channel data. 96 bytes of de-interleaved sub-channel data will be returned after each 2352 bytes of audio. This flag can not be used with the BASS_SAMPLE_FLOAT flag, and is ignored if the BASS_STREAM_DECODE flag is not used.</description></item>
            <item><term>BASS_CD_SUBCHANNEL_NOHW</term><description>Read sub-channel data, without using any hardware de-interleaving. This is identical to the BASS_CD_SUBCHANNEL flag, except that the de-interleaving is always performed by BASSCD even if the drive is apparently capable of de-interleaving itself.</description></item>
            <item><term>BASS_CD_C2ERRORS</term><description>Include C2 error info. 296 bytes of C2 error info is inserted after each 2352 bytes of audio (and optionally 96 bytes of sub-channel data). The first 294 bytes contain the C2 error bits (one bit for each byte of audio), followed by a byte containing the logical "OR" of all 294 bytes, which can be used to quickly check if there were any C2 errors. The final byte is just padding. This flag cannot be used without the BASS_STREAM_DECODE flag or with the BASS_SAMPLE_FLOAT flag; see <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/>.</description></item>
            </list>
            </param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Only one stream can exist at a time per CD drive. If a stream using the drive already exists, this function will fail, unless the BASS_CONFIG_CD_FREEOLD config option is enabled (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>). 
            Note that <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamSetTrack(System.Int32,System.Int32)"/> can be used to change track without creating a new stream.</para>
            <para>The sample format of a CD audio stream is always 44100hz stereo 16-bit, unless the BASS_SAMPLE_FLOAT flag is used, in which case it's converted to 32-bit. When reading sub-channel data, the sample rate will be 45900hz, taking the additional sub-channel data into account.</para>
            <para>When reading sub-channel data, BASSCD will automatically de-interleave the data if the drive can't. You can check whether the drive can de-interleave the data itself (or even read sub-channel data at all) in the the rwflags member of <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO"/>.</para>
            <para>When using the BASS_STREAM_DECODE flag, it's not possible to play the stream, but seeking is still possible. Because the decoded sample data is not outputted, "decoding channels" can still be used when there is no output device (using the "no sound" device with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>A stream using this drive already exists.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The BASS_CD_SUBCHANNEL and BASS_CD_C2ERRORS flags cannot be used without the BASS_STREAM_DECODE flag or with the BASS_SAMPLE_FLOAT flag. See <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/>.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_CDTRACK</term><description><paramref name="track"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The track is not an audio track.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Reading sub-channel data and/or C2 error info is not supported by the drive, or a read offset is in effect. In case of the latter, see <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/>.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If using the BASS_SAMPLE_FLOAT flag, it could be that floating-point channels are not supported (ie. no WDM drivers).</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The device/drivers do not support the requested speaker(s), or you're attempting to assign a stereo stream to a mono speaker.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play an entire CD without any gap between tracks:
            <code lang="C#">
            private SYNCPROC _mySync;  // make it global, so that the GC can not collect it
            ...
            // create CD stream
            int stream = BassCd.BASS_CD_StreamCreate(0, track, BASSFlag.BASS_DEFAULT | BASS_STREAM_AUTOFREE);
            _mySync = new SYNCPROC(EndSync);
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_END | BASSSync.BASS_SYNC_MIXTIME, 0, _mySync, IntPtr.Zero);
            // start playing
            Bass.BASS_ChannelPlay(stream, false);
            ...
            private void EndSync(int handle, int channel, int data, IntPtr user)
            {
              // get current track
              int track = Utils.LowWord32(BassCd.BASS_CD_StreamGetTrack(channel));
              // jump to next track
              BassCd.BASS_CD_StreamSetTrack(channel, track + 1);
            }
            </code>
            <code lang="VB">
            Private _mySync As SYNCPROC ' make it global, so that the GC can not collect it
            ...
            ' create CD stream
            Dim stream As Integer = BassCd.BASS_CD_StreamCreate(0, track, BASSFlag.BASS_DEFAULT Or BASS_STREAM_AUTOFREE)
            _mySync = New SYNCPROC(AddressOf EndSync)
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_END Or BASSSync.BASS_SYNC_MIXTIME, 0, _mySync, IntPtr.Zero)
            ' start playing
            Bass.BASS_ChannelPlay(stream, False)
            ...
            Private Sub EndSync(handle As Integer, channel As Integer, data As Integer, user As IntPtr)
              ' get current track
              Dim track As Integer = Utils.LowWord32(BassCd.BASS_CD_StreamGetTrack(channel))
              ' jump to next track
              BassCd.BASS_CD_StreamSetTrack(channel, track + 1)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from an audio CD track, optionally providing a callback function to receive sub-channel data and/or C2 error info.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="track">The track... 0 = the first track, BASS_CD_TRACK_PREGAP = 1st track pregap (not all drives support reading of the 1st track pregap).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the stream to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>Requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the stream.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_CD_SUBCHANNEL</term><description>Read sub-channel data. 96 bytes of de-interleaved sub-channel data will be returned after each 2352 bytes of audio. This flag can not be used with the BASS_SAMPLE_FLOAT flag, and is ignored if the BASS_STREAM_DECODE flag is not used.</description></item>
            <item><term>BASS_CD_SUBCHANNEL_NOHW</term><description>Read sub-channel data, without using any hardware de-interleaving. This is identical to the BASS_CD_SUBCHANNEL flag, except that the de-interleaving is always performed by BASSCD even if the drive is apparently capable of de-interleaving itself.</description></item>
            <item><term>BASS_CD_C2ERRORS</term><description>Include C2 error info. 296 bytes of C2 error info is inserted after each 2352 bytes of audio data (and optionally 96 bytes of sub-channel data) or delivered to the provided <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/>. The first 294 bytes contain the C2 error bits (one bit for each byte of audio), followed by a byte containing the logical "OR" of all 294 bytes, which can be used to quickly check if there were any C2 errors. The final byte is just padding. This flag cannot be used without the BASS_STREAM_DECODE flag or with the BASS_SAMPLE_FLOAT flag, unless a <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/> is provided to receive the C2 error info.</description></item>
            </list>
            </param>
            <param name="proc">A callback function to receive sub-channel data and C2 error info... <see langword="null"/> = no callback. If a callback function is provided, sub-channel data and C2 error info will be delivered to it rather than being inserted amongst the sample data.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function is identical to <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>, but with the additional option of providing a callback function to receive sub-channel data and C2 error info.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>A stream using this drive already exists.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The BASS_CD_SUBCHANNEL and BASS_CD_C2ERRORS flags cannot be used without the BASS_STREAM_DECODE flag or with the BASS_SAMPLE_FLOAT flag, unless a <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/> is provided.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_CDTRACK</term><description><paramref name="track"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The track is not an audio track.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Reading sub-channel data and/or C2 error info is not supported by the drive, or a read offset is in effect, in which case a <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/> must be provided to receive sub-channel data or C2 error info.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If using the BASS_SAMPLE_FLOAT flag, it could be that floating-point channels are not supported (ie. no WDM drivers).</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The device/drivers do not support the requested speaker(s), or you're attempting to assign a stereo stream to a mono speaker.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFileUnicode(System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="file"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFile(System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from an audio CD track, using a CDA file on the CD.
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically, if not set.</para>
            </summary>
            <param name="file">The CDA filename... for example, "D:\Track01.cda".</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>:
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the stream to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>Requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the stream.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_CD_SUBCHANNEL</term><description>Read sub-channel data. 96 bytes of de-interleaved sub-channel data will be returned after each 2352 bytes of audio. This flag can not be used with the BASS_SAMPLE_FLOAT flag, and is ignored if the BASS_STREAM_DECODE flag is not used.</description></item>
            <item><term>BASS_CD_SUBCHANNEL_NOHW</term><description>Read sub-channel data, without using any hardware de-interleaving. This is identical to the BASS_CD_SUBCHANNEL flag, except that the de-interleaving is always performed by BASSCD even if the drive is apparently capable of de-interleaving itself.</description></item>
            <item><term>BASS_CD_C2ERRORS</term><description>Include C2 error info. 296 bytes of C2 error info is inserted after each 2352 bytes of audio (and optionally 96 bytes of sub-channel data). The first 294 bytes contain the C2 error bits (one bit for each byte of audio), followed by a byte containing the logical "OR" of all 294 bytes, which can be used to quickly check if there were any C2 errors. The final byte is just padding. This flag cannot be used without the BASS_STREAM_DECODE flag or with the BASS_SAMPLE_FLOAT flag; see <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFileEx(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/>.</description></item>
            <item><term>BASS_UNICODE</term><description>file is a Unicode (16-bit characters) filename (not needed with this overload).</description></item>
            </list>
            </param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Only one stream can exist at a time per CD drive. If a stream using the drive already exists, this function will fail, unless the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_CD_FREEOLD</see> config option is enabled (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>). 
            Note that <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamSetTrack(System.Int32,System.Int32)"/> can be used to change track without creating a new stream.</para>
            <para>The sample format of a CD audio stream is always 44100hz stereo 16-bit, unless the BASS_SAMPLE_FLOAT flag is used, in which case it's converted to 32-bit. When reading sub-channel data, the sample rate will be 45900hz, taking the additional sub-channel data into account.</para>
            <para>When reading sub-channel data, BASSCD will automatically de-interleave the data if the drive can't. You can check whether the drive can de-interleave the data itself (or even read sub-channel data at all) in the the rwflags member of <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO"/>.</para>
            <para>When using the BASS_STREAM_DECODE flag, it's not possible to play the stream, but seeking is still possible. Because the decoded sample data is not outputted, "decoding channels" can still be used when there is no output device (using the "no sound" device with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file was not recognised as a CDA file.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>A stream using this drive already exists.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The BASS_CD_SUBCHANNEL and BASS_CD_C2ERRORS flags cannot be used without the BASS_STREAM_DECODE flag or with the BASS_SAMPLE_FLOAT flag. See <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFileEx(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/>.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Reading sub-channel data and/or C2 error info is not supported by the drive, or a read offset is in effect. In case of the latter, see <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFileEx(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/>.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If using the BASS_SAMPLE_FLOAT flag, it could be that floating-point channels are not supported (ie. no WDM drivers).</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The device/drivers do not support the requested speaker(s), or you're attempting to assign a stereo stream to a mono speaker.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFileUnicode(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="file"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFileEx(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from an audio CD track, using a CDA file on the CD, optionally providing a callback function to receive sub-channel data and/or C2 error info.
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically, if not set.</para>
            </summary>
            <param name="file">The CDA filename... for example, "D:\Track01.cda".</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>:
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the stream to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>Requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the stream.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_CD_SUBCHANNEL</term><description>Read sub-channel data. 96 bytes of de-interleaved sub-channel data will be returned after each 2352 bytes of audio. This flag can not be used with the BASS_SAMPLE_FLOAT flag, and is ignored if the BASS_STREAM_DECODE flag is not used.</description></item>
            <item><term>BASS_CD_SUBCHANNEL_NOHW</term><description>Read sub-channel data, without using any hardware de-interleaving. This is identical to the BASS_CD_SUBCHANNEL flag, except that the de-interleaving is always performed by BASSCD even if the drive is apparently capable of de-interleaving itself.</description></item>
            <item><term>BASS_CD_C2ERRORS</term><description>Include C2 error info. 296 bytes of C2 error info is inserted after each 2352 bytes of audio data (and optionally 96 bytes of sub-channel data) or delivered to the provided <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/>. The first 294 bytes contain the C2 error bits (one bit for each byte of audio), followed by a byte containing the logical "OR" of all 294 bytes, which can be used to quickly check if there were any C2 errors. The final byte is just padding. This flag cannot be used without the BASS_STREAM_DECODE flag or with the BASS_SAMPLE_FLOAT flag, unless a <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/> is provided to receive the C2 error info.</description></item>
            <item><term>BASS_UNICODE</term><description>file is a Unicode (16-bit characters) filename (not needed with this overload).</description></item>
            </list>
            </param>
            <param name="proc">A callback function to receive sub-channel data and C2 error info... <see langword="null"/> = no callback. If a callback function is provided, sub-channel data and C2 error info will be delivered to it rather than being inserted amongst the sample data.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function is identical to <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFile(System.String,Un4seen.Bass.BASSFlag)"/>, but with the additional option of providing a callback function to receive sub-channel data and C2 error info.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file was not recognised as a CDA file.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>A stream using this drive already exists.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The BASS_CD_SUBCHANNEL and BASS_CD_C2ERRORS flags cannot be used without the BASS_STREAM_DECODE flag or with the BASS_SAMPLE_FLOAT flag, unless a <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/> is provided.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Reading sub-channel data and/or C2 error info is not supported by the drive, or a read offset is in effect, in which case a <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/> must be provided to receive sub-channel data or C2 error info.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If using the BASS_SAMPLE_FLOAT flag, it could be that floating-point channels are not supported (ie. no WDM drivers).</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The device/drivers do not support the requested speaker(s), or you're attempting to assign a stereo stream to a mono speaker.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamGetTrack(System.Int32)">
            <summary>
            Retrieves the drive and track number of a CD stream.
            </summary>
            <param name="handle">The CD stream handle.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            If successful, the track number is returned in the low word (low 16-bits), and the drive is returned in the high word (high 16-bits).</returns>
            <remarks>
            If the track has just changed, this function will give the new track number even if the old track is still being heard due to buffering.
            The BASS_POS_CD_TRACK 'mode' can be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> to get the track currently being heard.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Check if a channel is a CD stream, and then get it's drive and track number.
            <code lang="C#">
            int track = BassCd.BASS_CD_StreamGetTrack(channel);
            if (track != -1)
            {
              int drive = Utils.HighWord32(track);
              track = Utils.LowWord32(track);
            }
            </code>
            <code lang="VB">
            Dim track As Integer = BassCd.BASS_CD_StreamGetTrack(channel)
            If track &lt;&gt; - 1 Then
              Dim drive As Integer = Utils.HighWord32(track)
              track = Utils.LowWord32(track)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamSetTrack(System.Int32,System.Int32)">
            <summary>
            Changes the track of a CD stream.
            </summary>
            <param name="handle">The CD stream handle.</param>
            <param name="track">The new track... 0 = the first track, BASS_CD_TRACK_PREGAP = 1st track pregap (not all drives support reading of the 1st track pregap).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The stream's current position is set to the start of the new track.
            <para>This function is identical to using the BASS_POS_CD_TRACK 'mode' with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>.
            Either can be used with a BASS_SYNC_END sync (set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>) to play one track after another.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_CDTRACK</term><description><paramref name="track"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The track is not an audio track.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play an entire CD without any gap between tracks:
            <code lang="C#">
            private SYNCPROC _mySync;  // make it global, so that the GC can not collect it
            ...
            // create CD stream
            int stream = BassCd.BASS_CD_StreamCreate(0, track, BASSFlag.BASS_DEFAULT | BASS_STREAM_AUTOFREE);
            _mySync = new SYNCPROC(EndSync);
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_END | BASSSync.BASS_SYNC_MIXTIME, 0, _mySync, IntPtr.Zero);
            // start playing
            Bass.BASS_ChannelPlay(stream, false);
            ...
            private void EndSync(int handle, int channel, int data, IntPtr user)
            {
              // get current track
              int track = Utils.LowWord32(BassCd.BASS_CD_StreamGetTrack(channel));
              // jump to next track
              BassCd.BASS_CD_StreamSetTrack(channel, track + 1);
            }
            </code>
            <code lang="VB">
            Private _mySync As SYNCPROC ' make it global, so that the GC can not collect it
            ...
            ' create CD stream
            Dim stream As Integer = BassCd.BASS_CD_StreamCreate(0, track, BASSFlag.BASS_DEFAULT Or BASS_STREAM_AUTOFREE)
            _mySync = New SYNCPROC(AddressOf EndSync)
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_END Or BASSSync.BASS_SYNC_MIXTIME, 0, _mySync, IntPtr.Zero)
            ' start playing
            Bass.BASS_ChannelPlay(stream, False)
            ...
            Private Sub EndSync(handle As Integer, channel As Integer, data As Integer, user As IntPtr)
              ' get current track
              Dim track As Integer = Utils.LowWord32(BassCd.BASS_CD_StreamGetTrack(channel))
              ' jump to next track
              BassCd.BASS_CD_StreamSetTrack(channel, track + 1)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_Play(System.Int32,System.Int32,System.Int32)">
            <summary>
            Starts analog playback of an audio CD track.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="track">The track... 0 = the first track.</param>
            <param name="pos">Position (in frames) to start playback from. There are 75 frames per second.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Some old CD drives may not be able to digitally extract audio data (or not quickly enough to sustain playback), so that it's not possible to use <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> to stream CD tracks. 
            This is where the analog playback option can come in handy.</para>
            <para>In analog playback, the sound bypasses BASS - it goes directly from the CD drive to the soundcard (assuming the drive is cabled up to the soundcard). 
            This means that BASS output does not need to be initialized to use analog playback. It also means it's not possible to apply any DSP/FX to the sound, and nor is it possible to visualise it (unless you record the sound from the soundcard).</para>
            <para>Analog playback is not possible while digital streaming is in progress - the streaming will kill the analog playback. So if you wish to switch from digital to analog playback, you should first free the stream using <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_CDTRACK</term><description><paramref name="track"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The track is not an audio track.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description><paramref name="pos"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play track 3 on drive 0, starting at the 10 second point:
            <code lang="C#">
            bool ok = BassCd.BASS_CD_Analog_Play(0, 3, 10 * 75);
            </code>
            <code lang="VB">
            Dim ok As Boolean = BassCd.BASS_CD_Analog_Play(0, 3, 10 * 75)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_Play(System.Int32,System.Int32,System.Double)">
            <summary>
            Starts analog playback of an audio CD track.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="track">The track... 0 = the first track.</param>
            <param name="seconds">Position (in seconds) to start playback from (this will automatically be converted to frames internally).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Some old CD drives may not be able to digitally extract audio data (or not quickly enough to sustain playback), so that it's not possible to use <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> to stream CD tracks. 
            This is where the analog playback option can come in handy.</para>
            <para>In analog playback, the sound bypasses BASS - it goes directly from the CD drive to the soundcard (assuming the drive is cabled up to the soundcard). 
            This means that BASS output does not need to be initialized to use analog playback. It also means it's not possible to apply any DSP/FX to the sound, and nor is it possible to visualise it (unless you record the sound from the soundcard).</para>
            <para>Analog playback is not possible while digital streaming is in progress - the streaming will kill the analog playback. So if you wish to switch from digital to analog playback, you should first free the stream using <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOCD</term><description>There's no CD in the drive.</description></item>
            <item><term>BASS_ERROR_CDTRACK</term><description><paramref name="track"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The track is not an audio track.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description><paramref name="seconds"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play track 3 on drive 0, starting at the 10 second point:
            <code lang="C#">
            bool ok = BassCd.BASS_CD_Analog_Play(0, 3, 10.0);
            </code>
            <code lang="VB">
            Dim ok As Boolean = BassCd.BASS_CD_Analog_Play(0, 3, 10.0)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_PlayFile(System.String,System.Int32)">
            <summary>
            Starts analog playback of an audio CD track, using a CDA file on the CD.
            </summary>
            <param name="file">The CDA filename... for example, "D:\Track01.cda".</param>
            <param name="pos">Position (in frames) to start playback from. There are 75 frames per second.</param>
            <returns>If successful, the number of the drive being used is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Some old CD drives may not be able to digitally extract audio data (or not quickly enough to sustain playback), so that it's not possible to use <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> to stream CD tracks. 
            This is where the analog playback option can come in handy.</para>
            <para>In analog playback, the sound bypasses BASS - it goes directly from the CD drive to the soundcard (assuming the drive is cabled up to the soundcard). 
            This means that BASS output does not need to be initialized to use analog playback. It also means it's not possible to apply any DSP/FX to the sound, and nor is it possible to visualise it (unless you record the sound from the soundcard).</para>
            <para>Analog playback is not possible while digital streaming is in progress - the streaming will kill the analog playback. So if you wish to switch from digital to analog playback, you should first free the stream using <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file was not recognised as a CDA file.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description>The drive could not be found.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description><paramref name="pos"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play track 3 on drive D:, starting at the 10 second point:
            <code lang="C#">
            int drive = BassCd.BASS_CD_Analog_PlayFile("D:\\Track03.cda", 10 * 75);
            </code>
            <code lang="VB">
            Dim drive As Integer = BassCd.BASS_CD_Analog_PlayFile("D:\Track03.cda", 10 * 75)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_PlayFile(System.String,System.Double)">
            <summary>
            Starts analog playback of an audio CD track, using a CDA file on the CD.
            </summary>
            <param name="file">The CDA filename... for example, "D:\Track01.cda".</param>
            <param name="seconds">Position (in seconds) to start playback from (automatically converted to frames internally).</param>
            <returns>If successful, the number of the drive being used is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Some old CD drives may not be able to digitally extract audio data (or not quickly enough to sustain playback), so that it's not possible to use <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> to stream CD tracks. 
            This is where the analog playback option can come in handy.</para>
            <para>In analog playback, the sound bypasses BASS - it goes directly from the CD drive to the soundcard (assuming the drive is cabled up to the soundcard). 
            This means that BASS output does not need to be initialized to use analog playback. It also means it's not possible to apply any DSP/FX to the sound, and nor is it possible to visualise it (unless you record the sound from the soundcard).</para>
            <para>Analog playback is not possible while digital streaming is in progress - the streaming will kill the analog playback. So if you wish to switch from digital to analog playback, you should first free the stream using <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file was not recognised as a CDA file.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description>The drive could not be found.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description><paramref name="seconds"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play track 3 on drive D:, starting at the 10 second point:
            <code lang="C#">
            int drive = BassCd.BASS_CD_Analog_PlayFile("D:\Track03.cda", 10.0);
            </code>
            <code lang="VB">
            Dim drive As Integer = BassCd.BASS_CD_Analog_PlayFile("D:\Track03.cda", 10.0)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_Stop(System.Int32)">
            <summary>
            Stops analog playback on a drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Pausing can be achieved by getting the position (<see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_GetPosition(System.Int32)"/>) just before stopping, and then using that position in a call to <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_Play(System.Int32,System.Int32,System.Int32)"/> to resume.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_IsActive(System.Int32)">
            <summary>
            Checks if analog playback is in progress on a drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <returns>The return value is one of the folowing (see <see cref="T:Un4seen.Bass.BASSActive"/>):
            <list type="table">
            <item><term>BASS_ACTIVE_STOPPED</term><description>Analog playback is not in progress, or <paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ACTIVE_PLAYING</term><description>Analog playback is in progress.</description></item>
            </list>
            </returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_GetPosition(System.Int32)">
            <summary>
            Retrieves the current position and track on a drive.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            If successful, the HIWORD contains the track number (0=first), and the LOWORD contains the offset (in frames).</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // get the position
            int pos = BassCd.BASS_CD_Analog_GetPosition(0);
            int track = Utils.HighWord32(pos);
            int frame = Utils.LowWord32(pos);
            double sec = frame / 75.0;
            </code>
            <code lang="VB">
            ' get the position
            Dim pos As Integer = BassCd.BASS_CD_Analog_GetPosition(0)
            Dim track As Integer = Utils.HighWord32(pos)
            Dim frame As Integer = Utils.LowWord32(pos)
            Dim sec As Double = frame / 75.0
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Analog_GetPosition(System.Int32,System.Int32@)">
            <summary>
            Retrieves the current position on a drive in seconds.
            </summary>
            <param name="drive">The drive... 0 = the first drive.</param>
            <param name="track">Returns the current track number being played.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            If successful, the position in seconds is returned.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="drive"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int track = 0;
            double sec = BASS_CD_Analog_GetPosition(0, ref track);
            </code>
            <code lang="VB">
            Dim track As Integer = 0
            Dim sec As Double = BASS_CD_Analog_GetPosition(0, track)
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BassCd.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the basscd.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BassCd.SupportedStreamName">
            <summary>
            Supported file format name of the basscd.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
            <example>
            Load BASS and BASSCD from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassCd.LoadMe();
            ...
            // when not used anymore...
            BassCd.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSCD from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassCd.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassCd.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BassCd.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASSCDInterface">
            <summary>
            The interface to use to access CD drives (used with <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_SetInterface(Un4seen.Bass.AddOn.Cd.BASSCDInterface)"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDInterface.BASS_CD_IF_AUTO">
            <summary>
            Automatically detect an available interface. The interfaces are checked in the order that they are listed here. For example, if both SPTI and ASPI are available, SPTI will be used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDInterface.BASS_CD_IF_SPTI">
            <summary>
            SCSI Pass-Through Interface. This is only available on NT-based Windows, not Windows 9x, and generally only to administrator user accounts, not limited/restricted user accounts.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDInterface.BASS_CD_IF_ASPI">
            <summary>
            Advanced SCSI Programming Interface. This is the only interface available on Windows 9x, and can also be installed on NT-based Windows.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDInterface.BASS_CD_IF_WIO">
            <summary>
            Windows I/O. Like SPTI, this is only available on NT-based Windows, but it is also available to limited/restricted user accounts. Some features are not available via this interface, notably sub-channel data reading and read speed control (except on Vista or newer). Door status detection is also affected.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDInterface.BASS_CD_IF_LINUX">
            <summary>
            Linux interface.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags">
            <summary>
            The drive's reading &amp; writing capabilities used with <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READCDR">
            <summary>
            The drive can read CD-R media.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READCDRW">
            <summary>
            The drive can read CD-RW media.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READCDRW2">
            <summary>
            The drive can read CD-R/RW media where the addressing type is "method 2".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READDVD">
            <summary>
            The drive can read DVD-ROM media.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READDVDR">
            <summary>
            The drive can read DVD-R media.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READDVDRAM">
            <summary>
            The drive can read DVD-RAM media.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READANALOG">
            <summary>
            The drive is capable of analog playback.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READM2F1">
            <summary>
            The drive can read in "mode 2 form 1" format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READM2F2">
            <summary>
            The drive can read in "mode 2 form 2" format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READMULTI">
            <summary>
            The drive can read multi-session discs.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READCDDA">
            <summary>
            The drive can read CD audio.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READCDDASIA">
            <summary>
            The drive supports "stream is accurate".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READSUBCHAN">
            <summary>
            The drive can read sub-channel data.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READSUBCHANDI">
            <summary>
            The drive can read sub-channel data, and de-interleave it.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READC2">
            <summary>
            The drive can provide C2 error info.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READISRC">
            <summary>
            The drive can read ISRC numbers.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags.BASS_CD_RWFLAG_READUPC">
            <summary>
            The drive can read UPC numbers.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASSCDDoor">
            <summary>
            The BASS_CD_Door actions to perform, used with <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Door(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDDoor)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDDoor.BASS_CD_DOOR_CLOSE">
            <summary>
            Close the door.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDDoor.BASS_CD_DOOR_OPEN">
            <summary>
            Open the door.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDDoor.BASS_CD_DOOR_LOCK">
            <summary>
            Lock the door.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDDoor.BASS_CD_DOOR_UNLOCK">
            <summary>
            Unlock the door.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASSCDId">
            <summary>
            The identification to retrieve, used with <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetID(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDId)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_UPC">
            <summary>
            Returns the catalog number of the CD. The number uses UPC/EAN-code (BAR coding). This might not be available for all CDs.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_CDDB">
            <summary>
            Produces a CDDB identifier. This can be used to get details on the CD's contents from a CDDB server.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_CDDB2">
            <summary>
            Produces a CDDB2 identifier. This can be used to get details on the CD's contents from a CDDB2 server.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_TEXT">
            <summary>
            Retrieves the CD-TEXT information from the CD (see <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetID(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDId)"/> for details). CD-TEXT is not available on the majority of CDs.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_CDPLAYER">
            <summary>
            Produces an identifier that can be used to lookup CD details in the CDPLAYER.INI file, located in the Windows directory.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_MUSICBRAINZ">
            <summary>
            Produces an identifier that can be used to get details on the CD's contents from <a href="http://www.musicbrainz.org">www.musicbrainz.org</a>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_ISRC">
            <summary>
            Use: + track#. Returns the International Standard Recording Code of the track... 0 = first track. This might not be available for all CDs.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_CDDB_QUERY">
            <summary>
            Sends a "query" command to the configured CDDB server (see <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_CDDB_SERVER"/>) to get a list of matching entries for the CD's CDDB identifier. The contents of each entry can be retrieved via the BASS_CDID_CDDB_READ option.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_CDDB_READ">
            <summary>
            Use: + entry#. Sends a "read" command to the configured CDDB server (see <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_CDDB_SERVER"/>) to get a database entry for the CD's CDDB identifier... 0 = first entry.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDId.BASS_CDID_CDDB_READ_CACHE">
            <summary>
            Returns the cached CDDB "read" command response, if there is one.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASSCDDATAType">
            <summary>
            The type of data received, used with <see cref="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDDATAType.BASS_CD_DATA_SUBCHANNEL">
            <summary>
            Sub-channel data.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDDATAType.BASS_CD_DATA_C2">
            <summary>
            C2 error info.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode">
            <summary>
            The mode to use with <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL@)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode.BASS_CD_TOC_LBA">
            <summary>
            Get the track start address in LBA form.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode.BASS_CD_TOC_TIME">
            <summary>
            Get the track start address in time form (hour, minute, second, frame).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode.BASS_CD_TOC_INDEX">
            <summary>
            + track#, Get the position of indexes (instead of tracks)
            <para>When this option is used, the 'first' and 'last' members of the <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC"/> structure are index numbers, 
            and the 'track' member of the BASS_CD_TOC_TRACK structure is also an index number and the "lba" or "hmsf" member (depending on whether BASS_CD_TOC_TIME is used) is an offset from the start of the track</para>
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASSCDTOCFlags">
            <summary>
            The <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK"/> "adrcon" flags.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCFlags.BASS_CD_TOC_CON_NONE">
            <summary>
            No flag defined.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCFlags.BASS_CD_TOC_CON_PRE">
            <summary>
            Pre-emphasis of 50/15 µs.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCFlags.BASS_CD_TOC_CON_COPY">
            <summary>
            Digital copy permitted.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCFlags.BASS_CD_TOC_CON_DATA">
            <summary>
            Data track.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)"/> to retrieve information on a drive.
            </summary>
            <remarks>The rwflags, maxspeed and cache members are unavailable when the WIO interface is used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.vendor">
            <summary>
            The drive manufacturer name.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.product">
            <summary>
            The drive product/model name.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.rev">
            <summary>
            The revision number as a string.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.letter">
            <summary>
            The drive letter... -1=unknown, 0=A, 1=B, etc.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.rwflags">
            <summary>
            Read/Write capability flags (any combination of <see cref="T:Un4seen.Bass.AddOn.Cd.BASSCDRWFlags"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.canopen">
            <summary>
            If <see langword="true"/>, <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Door(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDDoor)"/> can be used and BASS_CD_DOOR_OPEN/CLOSE is supported?
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.canlock">
            <summary>
            If <see langword="true"/>, <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_Door(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDDoor)"/> can be used and BASS_CD_DOOR_LOCK/UNLOCK is supported?
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.maxspeed">
            <summary>
            The maximum read speed, in kilobytes per second (KB/s). Divide by 176.4 to get the real-time speed multiplier, eg. 5645 / 176.4 = "32x speed".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.cache">
            <summary>
            The drive's cache size, in kilobytes (KB).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.cdtext">
            <summary>
            The drive can read CD-TEXT?
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.ToString">
            <summary>
            A description of the decive info object (driver name, version, number of inputs/outputs).
            </summary>
            <returns>A description of the decive info object (driver name, version, number of inputs/outputs).</returns>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Cd.BASS_CD_INFO.DriveLetter">
            <summary>
            Gets the character letter of the drive.
            </summary>
            <remarks>Only available after <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetInfo(System.Int32,Un4seen.Bass.AddOn.Cd.BASS_CD_INFO)"/> has been called with this instance.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL@)"/> to retrieve the TOC from a CD.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL.size">
            <summary>
            The byte length of the TOC data, not including the 2 bytes taken by this size member.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL.first">
            <summary>
            The first track number (or index number if BASS_CD_TOC_INDEX is used).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL.last">
            <summary>
            The last track number (or index number if BASS_CD_TOC_INDEX is used).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL.tracks">
            <summary>
            The array of tracks (up to 100 tracks).
            </summary>
            <remarks>Note: Use the <see cref="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL.NumberOfTracks"/> property to determine the effective number of tracks retrieved.</remarks>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL.NumberOfTracks">
            <summary>
            Gets the effective number of tracks retrieved.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL@)"/> to retrieve the TOC from a CD.
            </summary>
            <remarks>
            If BASS_CD_TOC_INDEX was used in the <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL@)"/> call, first and last will be index numbers rather than track numbers.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC.first">
            <summary>
            The first track number (or index number if BASS_CD_TOC_INDEX is used).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC.last">
            <summary>
            The last track number (or index number if BASS_CD_TOC_INDEX is used).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC.tracks">
            <summary>
            The list of tracks retrieved (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK"/>, up to 100 tracks).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC.ToString">
            <summary>
            A description of the TOC info object (number of tracks, first, last).
            </summary>
            <returns>A description of the TOC info object (number of tracks, first, last).</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK">
            <summary>
            Represents one track of a CD's TOC (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.res1">
            <summary>
            Unused.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.adrcon">
            <summary>
            ADR (high 4 bits) and control (low 4 bits) fields.
            </summary>
            <remarks>The control field indicates the attributes of the track, and may include the following (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASSCDTOCFlags"/>):
            <list type="table">
            <listheader><term>Attribute</term><description>Description</description></listheader>
            <item><term>BASS_CD_TOC_CON_COPY</term><description>Digital copy permitted.</description></item>
            <item><term>BASS_CD_TOC_CON_DATA</term><description>Data track.</description></item>
            <item><term>BASS_CD_TOC_CON_PRE</term><description>Pre-emphasis of 50/15 µs.</description></item>
            </list>
            <para>You might use the <see cref="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.ADR"/> and <see cref="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.Control"/> properties to get the respective fields directly.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.track">
            <summary>
            The track number... 170 = lead-out area (or index number if BASS_CD_TOC_INDEX is used).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.res2">
            <summary>
            Unused.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.lba">
            <summary>
            The address in LBA (Logical Block Address) form.
            </summary>
            <remarks>
            Only to be used, if the <see cref="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode.BASS_CD_TOC_LBA"/> or <see cref="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode.BASS_CD_TOC_INDEX"/> flag was used in the <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL@)"/> call.
            <para>With the BASS_CD_TOC_INDEX flag this is an offset from the start of the track.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.hour">
            <summary>
            The address in time form (hour part).
            </summary>
            <remarks>Only to be used, if the <see cref="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode.BASS_CD_TOC_TIME"/> flag was used in the <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL@)"/> call.
            <para>The hours field is always 0, and the minutes field will be above 60 instead if necessary.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.minute">
            <summary>
            The address in time form (minute part).
            </summary>
            <remarks>Only to be used, if the <see cref="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode.BASS_CD_TOC_TIME"/> flag was used in the <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL@)"/> call.
            <para>The hours field is always 0, and the minutes field will be above 60 instead if necessary.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.second">
            <summary>
            The address in time form (second part).
            </summary>
            <remarks>Only to be used, if the <see cref="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode.BASS_CD_TOC_TIME"/> flag was used in the <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL@)"/> call.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.frame">
            <summary>
            The address in time form (frame part).
            </summary>
            <remarks>Only to be used, if the <see cref="F:Un4seen.Bass.AddOn.Cd.BASSCDTOCMode.BASS_CD_TOC_TIME"/> flag was used in the <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_GetTOC(System.Int32,Un4seen.Bass.AddOn.Cd.BASSCDTOCMode,Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_INTERNAL@)"/> call.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.ADR">
            <summary>
            Gets the ADR component of the <see cref="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.adrcon"/> field.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.Control">
            <summary>
            Gets the control component of the <see cref="F:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.adrcon"/> field.
            </summary>
            <remarks>The control field indicates the attributes of the track, and may include the following (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASSCDTOCFlags"/>):
            <list type="table">
            <listheader><term>Attribute</term><description>Description</description></listheader>
            <item><term>BASS_CD_TOC_CON_COPY</term><description>Digital copy permitted.</description></item>
            <item><term>BASS_CD_TOC_CON_DATA</term><description>Data track.</description></item>
            <item><term>BASS_CD_TOC_CON_PRE</term><description>Pre-emphasis of 50/15 µs.</description></item>
            </list>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cd.BASS_CD_TOC_TRACK.ToString">
            <summary>
            A description of the TOC_TRACK info object (track, adr, con, start address in lba and time).
            </summary>
            <returns>A description of the TOC_TRACK info object (track, adr, con, start address in lba and time).</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cd.CDDATAPROC">
            <summary>
            User defined CD data callback delegate (to be used with <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFileEx(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/>).
            </summary>
            <param name="handle">The CD stream that provided the data.</param>
            <param name="pos">The stream position (in bytes) that the data is from.</param>
            <param name="type">The type of data, which can be one of the following (see <see cref="T:Un4seen.Bass.AddOn.Cd.BASSCDDATAType"/>):
            <para>BASS_CD_DATA_SUBCHANNEL : Sub-channel data.</para>
            <para>BASS_CD_DATA_C2 : C2 error info.</para>
            </param>
            <param name="buffer">The pointer to the buffer data.</param>
            <param name="length">The amount of data in bytes.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_StreamCreateFileEx(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.AddOn.Cd.CDDATAPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>Sub-channel data or C2 error info is delivered to this function as soon as it is read from the CD, before the associated audio data is played, or delivered by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> in the case of a decoding channel.
            The pos value can be used to synchronize the delivered data with the stream's audio data.</para>
            <para>CDs are read from in units of a frame, and so this function will always receive a whole number of frames' worth of data; there are 96 bytes of sub-channel data per-frame, and 296 bytes of C2 error info.
            When <see cref="M:Un4seen.Bass.AddOn.Cd.BassCd.BASS_CD_SetOffset(System.Int32,System.Int32)"/> has been used to set a read offset, playback may begin mid-frame, and as a result of that, <paramref name="pos"/> may start out negative because the delivered data is from the start of the 1st frame, before where playback will begin from.</para>
            <para>Neither sub-channel data or C2 error info will be delivered in the case of a silenced frame resulting from the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_SKIPERROR"/> config option being enabled.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cdg.BassCdg">
            <summary>
            BASS.NET API wrapper for BASS_CDG.DLL
            <para>Requires: bass_cdg.dll - CDG Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_CDG is an extension to the BASS audio library, enabling the playback	of CDG streams.
            CD+G (also known as CD+Graphics) is an extension of the compact disc standard that can present low-resolution graphics alongside the audio data on the disc when played on a compatible device. CD+G discs are often used for karaoke machines, which utilize this functionality to present on-screen lyrics for the song contained on the disc.</para>
            <para>The CDG format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream functions.</para>
            <para>More information can be found on <a href="http://en.wikipedia.org/wiki/CD-G">wikipedia</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cdg.BassCdg.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cdg.BassCdg.BASS_CDG_SetConfig(Un4seen.Bass.AddOn.Cdg.BASSCDGConfig,System.Int32)">
            <summary>
            Sets a BASS_CDG config option.
            </summary>
            <param name="config">One of the <see cref="T:Un4seen.Bass.AddOn.Cdg.BASSCDGConfig"/> options.</param>
            <param name="value">The parameter value to set with the <paramref name="config"/> option.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cdg.BassCdg.BASS_CDG_SetVideoWindow(System.Int32,System.IntPtr)">
            <summary>
            Sets the window handle to use with the CDG stream (for the graphics output).
            </summary>
            <param name="handle">The CDG channel handle (HSTREAM).</param>
            <param name="win">The window handle of the control which should be used to display the CDG graphics output.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cdg.BassCdg.BASS_CDG_GetCurrentBitmap(System.Int32)">
            <summary>
            Gets the current bitmap of the CDG stream (for graphics output).
            </summary>
            <param name="handle">The CDG channel handle (HSTREAM).</param>
            <returns>The attached windows GDI handle of the bitmap image object.</returns>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cdg.BassCdg.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bass_cdg.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cdg.BassCdg.SupportedStreamName">
            <summary>
            Supported file format name of the bass_cdg.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cdg.BassCdg.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cdg.BassCdg.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Cdg.BassCdg.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Cdg.BassCdg.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Cdg.BassCdg.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Cdg.BASSCDGConfig">
            <summary>
            Configuration options to be used with <see cref="M:Un4seen.Bass.AddOn.Cdg.BassCdg.BASS_CDG_SetConfig(Un4seen.Bass.AddOn.Cdg.BASSCDGConfig,System.Int32)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Cdg.BASSCDGConfig.BASS_CDG_USERDRAW">
            <summary>
            Use a user defined renderer.
            <para>value (int): 0=use internal renderer; 1=use user renderer.</para>
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Dsd.BassDsd">
            <summary>
            BASS.NET API wrapper for BASSDSD.DLL
            <para>Requires: bassdsd.dll - Direct Stream Digital Audio Codec (DSD) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSDSD is an extension to the BASS audio library, enabling the playing of DSD (Direct Stream Digital) data in DSDIFF and DSF containers.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="freq"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Creates a sample stream from a DSD file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            <list type="table">
            <item><term>BASS_DSD_DOP</term><description>Produce DSD-over-PCM data (with 0x05/0xFA markers). DSD-over-PCM data is 24-bit, so the BASS_SAMPLE_FLOAT flag is required.</description></item>
            <item><term>BASS_DSD_RAW</term><description>Produce raw DSD data instead of PCM. The DSD data is in blocks of 8 bits (1 byte) per-channel with the MSB being first/oldest. DSD data is not playable by BASS, so the BASS_STREAM_DECODE flag is required.</description></item>
            </list>
            </param>
            <param name="freq">Sample rate to convert the DSD data to PCM at... 0 = use the BASS_CONFIG_DSD_FREQ config setting. The rate will be rounded up (or down if there are none higher) to the nearest valid rate; the valid rates are 1/8, 1/16, 1/32, etc of the DSD rate down to a minimum of 44100 Hz. This parameter is ignored when the BASS_DSD_DOP or BASS_DSD_RAW flag is specified.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works almost in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.
            <para>All DSD rates (including 48000 Hz variants like 3.072 MHz) with any number of channels are supported, in DSDIFF and DSF containers (DST encoding is not supported). 
            The file's DSD sample rate is available via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_RATE"/> attribute.</para>
            <para>There are a few types of tag that may be available via BASS_ChannelGetTags. DSDIFF files may include artist and title information, which is available via the BASS_TAG_DSD_ARTIST and BASS_TAG_DSD_TITLE tags, which are ASCII strings. 
            DSDIFF files can also include comments, which are available via the BASS_TAG_DSD_COMMENT+index tag (index=0 is the first comment), which gives a pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT"/> structure. DSF files may include ID3v2 tags, which are available via the BASS_TAG_ID3V2 tag.</para>
            <para>DSD is 6dB quieter than PCM, so a 6dB gain will be applied by default when converting to PCM. That can be changed via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DSD_GAIN"/> config option and the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_GAIN"/> attribute.</para>
            <para>The DSD-over-PCM (BASS_DSD_DOP) and raw DSD data (BASS_DSD_RAW) options allow supporting devices to play the DSD data directly, without converting to PCM. 
            In both cases, the data needs to reach the device unmodified, so there can be no effects/resampling/mixing or anything else that will modify the data. 
            Raw DSD data is playable with ASIO drivers that support DSD, eg. via BASSASIO. DSD-over-PCM data can be sent to a supporting device in any way that does not modify the data. If DSD-over-PCM data is played on a device that doesn't support it, then it will produce a low level noise.</para>
            <para>To stream a file from the internet, use <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)"/>. To stream from other locations, see <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="freq"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Creates a sample stream from a DSD memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            <list type="table">
            <item><term>BASS_DSD_DOP</term><description>Produce DSD-over-PCM data (with 0x05/0xFA markers). DSD-over-PCM data is 24-bit, so the BASS_SAMPLE_FLOAT flag is required.</description></item>
            <item><term>BASS_DSD_RAW</term><description>Produce raw DSD data instead of PCM. The DSD data is in blocks of 8 bits (1 byte) per-channel with the MSB being first/oldest. DSD data is not playable by BASS, so the BASS_STREAM_DECODE flag is required.</description></item>
            </list>
            </param>
            <param name="freq">Sample rate to convert the DSD data to PCM at... 0 = use the BASS_CONFIG_DSD_FREQ config setting. The rate will be rounded up (or down if there are none higher) to the nearest valid rate; the valid rates are 1/8, 1/16, 1/32, etc of the DSD rate down to a minimum of 44100 Hz. This parameter is ignored when the BASS_DSD_DOP or BASS_DSD_RAW flag is specified.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works almost in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.
            <para>All DSD rates (including 48000 Hz variants like 3.072 MHz) with any number of channels are supported, in DSDIFF and DSF containers (DST encoding is not supported). 
            The file's DSD sample rate is available via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_RATE"/> attribute.</para>
            <para>There are a few types of tag that may be available via BASS_ChannelGetTags. DSDIFF files may include artist and title information, which is available via the BASS_TAG_DSD_ARTIST and BASS_TAG_DSD_TITLE tags, which are ASCII strings. 
            DSDIFF files can also include comments, which are available via the BASS_TAG_DSD_COMMENT+index tag (index=0 is the first comment), which gives a pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT"/> structure. DSF files may include ID3v2 tags, which are available via the BASS_TAG_ID3V2 tag.</para>
            <para>DSD is 6dB quieter than PCM, so a 6dB gain will be applied by default when converting to PCM. That can be changed via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DSD_GAIN"/> config option and the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_GAIN"/> attribute.</para>
            <para>The DSD-over-PCM (BASS_DSD_DOP) and raw DSD data (BASS_DSD_RAW) options allow supporting devices to play the DSD data directly, without converting to PCM. 
            In both cases, the data needs to reach the device unmodified, so there can be no effects/resampling/mixing or anything else that will modify the data. 
            Raw DSD data is playable with ASIO drivers that support DSD, eg. via BASSASIO. DSD-over-PCM data can be sent to a supporting device in any way that does not modify the data. If DSD-over-PCM data is played on a device that doesn't support it, then it will produce a low level noise.</para>
            <para>To stream a file from the internet, use <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)"/>. To stream from other locations, see <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)">
            <summary>
            Creates a sample stream from a DSD file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            <list type="table">
            <item><term>BASS_DSD_DOP</term><description>Produce DSD-over-PCM data (with 0x05/0xFA markers). DSD-over-PCM data is 24-bit, so the BASS_SAMPLE_FLOAT flag is required.</description></item>
            <item><term>BASS_DSD_RAW</term><description>Produce raw DSD data instead of PCM. The DSD data is in blocks of 8 bits (1 byte) per-channel with the MSB being first/oldest. DSD data is not playable by BASS, so the BASS_STREAM_DECODE flag is required.</description></item>
            </list>
            </param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <param name="freq">Sample rate to convert the DSD data to PCM at... 0 = use the BASS_CONFIG_DSD_FREQ config setting. The rate will be rounded up (or down if there are none higher) to the nearest valid rate; the valid rates are 1/8, 1/16, 1/32, etc of the DSD rate down to a minimum of 44100 Hz. This parameter is ignored when the BASS_DSD_DOP or BASS_DSD_RAW flag is specified.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works almost in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.
            <para>All DSD rates (including 48000 Hz variants like 3.072 MHz) with any number of channels are supported, in DSDIFF and DSF containers (DST encoding is not supported). 
            The file's DSD sample rate is available via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_RATE"/> attribute.</para>
            <para>There are a few types of tag that may be available via BASS_ChannelGetTags. DSDIFF files may include artist and title information, which is available via the BASS_TAG_DSD_ARTIST and BASS_TAG_DSD_TITLE tags, which are ASCII strings. 
            DSDIFF files can also include comments, which are available via the BASS_TAG_DSD_COMMENT+index tag (index=0 is the first comment), which gives a pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT"/> structure. DSF files may include ID3v2 tags, which are available via the BASS_TAG_ID3V2 tag.</para>
            <para>DSD is 6dB quieter than PCM, so a 6dB gain will be applied by default when converting to PCM. That can be changed via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DSD_GAIN"/> config option and the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_GAIN"/> attribute.</para>
            <para>The DSD-over-PCM (BASS_DSD_DOP) and raw DSD data (BASS_DSD_RAW) options allow supporting devices to play the DSD data directly, without converting to PCM. 
            In both cases, the data needs to reach the device unmodified, so there can be no effects/resampling/mixing or anything else that will modify the data. 
            Raw DSD data is playable with ASIO drivers that support DSD, eg. via BASSASIO. DSD-over-PCM data can be sent to a supporting device in any way that does not modify the data. If DSD-over-PCM data is played on a device that doesn't support it, then it will produce a low level noise.</para>
            <para>To stream a file from the internet, use <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)"/>. To stream from other locations, see <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)"/>.</para>
            </remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <param name="freq"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <param name="freq"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)">
            <summary>
            Creates a sample stream from a DSD file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            <list type="table">
            <item><term>BASS_DSD_DOP</term><description>Produce DSD-over-PCM data (with 0x05/0xFA markers). DSD-over-PCM data is 24-bit, so the BASS_SAMPLE_FLOAT flag is required.</description></item>
            <item><term>BASS_DSD_RAW</term><description>Produce raw DSD data instead of PCM. The DSD data is in blocks of 8 bits (1 byte) per-channel with the MSB being first/oldest. DSD data is not playable by BASS, so the BASS_STREAM_DECODE flag is required.</description></item>
            </list>
            </param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="freq">Sample rate to convert the DSD data to PCM at... 0 = use the BASS_CONFIG_DSD_FREQ config setting. The rate will be rounded up (or down if there are none higher) to the nearest valid rate; the valid rates are 1/8, 1/16, 1/32, etc of the DSD rate down to a minimum of 44100 Hz. This parameter is ignored when the BASS_DSD_DOP or BASS_DSD_RAW flag is specified.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works almost in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.
            <para>All DSD rates (including 48000 Hz variants like 3.072 MHz) with any number of channels are supported, in DSDIFF and DSF containers (DST encoding is not supported). 
            The file's DSD sample rate is available via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_RATE"/> attribute.</para>
            <para>There are a few types of tag that may be available via BASS_ChannelGetTags. DSDIFF files may include artist and title information, which is available via the BASS_TAG_DSD_ARTIST and BASS_TAG_DSD_TITLE tags, which are ASCII strings. 
            DSDIFF files can also include comments, which are available via the BASS_TAG_DSD_COMMENT+index tag (index=0 is the first comment), which gives a pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT"/> structure. DSF files may include ID3v2 tags, which are available via the BASS_TAG_ID3V2 tag.</para>
            <para>DSD is 6dB quieter than PCM, so a 6dB gain will be applied by default when converting to PCM. That can be changed via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DSD_GAIN"/> config option and the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_GAIN"/> attribute.</para>
            <para>The DSD-over-PCM (BASS_DSD_DOP) and raw DSD data (BASS_DSD_RAW) options allow supporting devices to play the DSD data directly, without converting to PCM. 
            In both cases, the data needs to reach the device unmodified, so there can be no effects/resampling/mixing or anything else that will modify the data. 
            Raw DSD data is playable with ASIO drivers that support DSD, eg. via BASSASIO. DSD-over-PCM data can be sent to a supporting device in any way that does not modify the data. If DSD-over-PCM data is played on a device that doesn't support it, then it will produce a low level noise.</para>
            <para>To stream a file from the internet, use <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)"/>. To stream from other locations, see <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.BASS_DSD_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Dsd.BassDsd.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bassdsd.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Dsd.BassDsd.SupportedStreamName">
            <summary>
            Supported file format name of the bassdsd.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Dsd.BassDsd.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Dsd.BassDsd.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.BassEnc">
            <summary>
            BASS.NET API wrapper for BASSENC.DLL
            <para>Requires: bassenc.dll - Encoding support library - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSenc is an extension that allows BASS channels to be encoded using any command-line encoder that has STDIN support (LAME/OGGENC/etc).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetVersion">
            <summary>
            Retrieves the version number of the BASSenc.DLL that is loaded.
            </summary>
            <returns>The BASSenc version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc supports all the BASSenc functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.Enc.BassEnc.BASSENCVERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            Checking the major version only:
            <code lang="C#">
            if ( Utils.HighWord(BassEnc.BASS_Encode_GetVersion()) != BassEnc.BASSENCVERSION )
            {
              MessageBox.Show(this, "Wrong BassEnc Version!");
            }
            </code>
            <code lang="VB">
            If Utils.HighWord(BassEnc.BASS_Encode_GetVersion()) &lt;&gt; BassEnc.BASSENCVERSION Then
              MessageBox.Show(Me, "Wrong BassEnc Version!")
            End If
            </code>
            Checking for full version "2.4.1.3":
            <code>
            if (BassEnc.BASS_Encode_GetVersion() &lt; Utils.MakeLong(0x0103, 0x0204))
            {
              MessageBox.Show(this, "Wrong BassEnc Version!");
            }
            </code>
            <code lang="VB">
            If BassEnc.BASS_Encode_GetVersion() &lt; Utils.MakeLong(&amp;H103, &amp;H204) Then
              MessageBox.Show(Me, "Wrong BassEnc Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASSenc.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASSenc version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc supports all the BASSenc functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            <code lang="C#">
            Version expectedVersion = new Version(2, 4);
            if (BassEnc.BASS_Encode_GetVersion(2) &lt; expectedVersion)
            {
              MessageBox.Show( this, "Wrong BassEnc Version!" );
            }
            </code>
            <code lang="VB">
            Dim expectedVersion As New Version(2, 4)
            If BassEnc.BASS_Encode_GetVersion(2) &lt; expectedVersion Then
              MessageBox.Show(Me, "Wrong BassEnc Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="cmdline"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)">
            <summary>
            Starts encoding on a channel.
            <para>This overload implements UNICODE cmdlines. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="cmdline">The encoder command-line, including the executable filename and any options. Or the output filename if the BASS_ENCODE_PCM flag is specified.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_PCM</term><description>Write plain PCM sample data to a file, without an encoder. The output filename is given in the cmdline parameter, or it can be <see langword="null"/> to not write a file.</description></item>
            <item><term>BASS_ENCODE_AIFF</term><description>Send an AIFF header to the encoder instead of a WAVE header.</description></item>
            <item><term>BASS_ENCODE_NOHEAD</term><description>Don't send a WAVE header to the encoder. If this flag is used then the sample format must be passed to the encoder some other way (eg. via the command-line).</description></item>
            <item><term>BASS_ENCODE_RF64</term><description>Write a BWF RF64 WAVE header instead of a standard header.</description></item>
            <item><term>BASS_ENCODE_WFEXT</term><description>Send the sample format information to the encoder in WAVEFORMATEXTENSIBLE form instead of WAVEFORMATEX form. This flag is ignored if the BASS_ENCODE_NOHEAD flag is used.</description></item>
            <item><term>BASS_ENCODE_BIGEND</term><description>Send big-endian sample data to the encoder, else little-endian.</description></item>
            <item><term>BASS_ENCODE_FP_8BIT, BASS_ENCODE_FP_16BIT, BASS_ENCODE_FP_24BIT, BASS_ENCODE_FP_32BIT</term><description>When you want to encode a floating-point channel, but the encoder does not support 32-bit floating-point sample data, then you can use one of these flags to have the sample data converted to 8/16/24/32 bit integer data before it's passed on to the encoder. These flags are ignored if the channel's sample data isn't floating-point.</description></item>
            <item><term>BASS_ENCODE_FP_AUTO</term><description>Convert floating-point sample data back to the channel's format (8/16 bit integer) if the data is only floating-point due to the BASS_CONFIG_FLOATDSP option being enabled.</description></item>
            <item><term>BASS_ENCODE_DITHER</term><description>Apply dither (TPDF) when converting floating-point sample data to integer.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_MONO</term><description>Convert to mono (if not already).</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>cmdline is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder process handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para>The encoder must be told (via the command-line) to expect input from STDIN, rather than a file. The command-line should also tell the encoder what filename to write it's output to, unless you're using a callback function, in which case it should be told to write it's output to STDOUT.</para>
            <para>No user interaction with the encoder is possible, so anything that would cause the encoder to require the user to press any keys should be avoided. For example, if the encoder asks whether to overwrite files, the encoder should be instructed to always overwrite (via the command-line), or you should delete the existing file before starting the encoder.</para>
            <para>Standard RIFF files are limited to a little over 4GB in size. When writing a WAV file, BASSenc will automatically stop at that point, so that the file is valid. That does not apply when sending data to an encoder though, as the encoder may (possibly via a command-line option) ignore the size restriction, but if it does not, it could mean that the encoder stops after a few hours (depending on the sample format). If longer encodings are needed, the BASS_ENCODE_NOHEAD flag can be used to omit the WAVE header, and the encoder informed of the sample format via the command-line instead. The 4GB size limit can also be overcome with the BASS_ENCODE_RF64 flag, but most encoders are unlikely to support RF64.</para>
            <para>When writing an RF64 WAV file, a standard RIFF header will still be written initially, which will only be replaced by an RF64 header at the end if the file size has exceeded the standard limit. When an encoder is used, it is not possible to go back and change the header at the end, so the RF64 header is sent at the beginning in that case.</para>
            <para>Internally, the sending of sample data to the encoder is implemented via a DSP callback on the channel. That means when you play the channel (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the encoder at the same time. 
            It also means that if you use the BASS_CONFIG_FLOATDSP option, then the sample data will be 32-bit floating-point, and you'll need to use one of the BASS_ENCODE_FP flags if the encoder does not support floating-point sample data. 
            The BASS_CONFIG_FLOATDSP setting should not be changed while encoding is in progress.</para>
            <para>The encoder DSP has a priority setting of -1000, so if you want to set DSP/FX on the channel and have them present in the encoding, set their priority above that.</para>
            <para>Besides the automatic DSP system, data can also be manually fed to the encoder via the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> function. Both methods can be used together, but in general, the "automatic" system ought be paused when using the "manual" system, by use of the BASS_ENCODE_PAUSE flag or the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)"/> function.</para>
            <para>When queued encoding is enabled via the BASS_ENCODE_QUEUE flag, the DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call will just buffer the data, and the data will then be fed to the encoder by another thread. The buffer will grow as needed to hold the queued data, up to a limit specified by the BASS_CONFIG_ENCODE_QUEUE config option.
            If the limit is exceeded (or there is no free memory), data will be lost; <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> can be used to be notified of that occurrence. The amount of data that is currently queued, as well as the queue limit and how much data has been lost, is available from <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCount(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCount)"/>.</para>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_IsActive(System.Int32)"/> can be used to check that the encoder is still running. When done encoding, use <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> to close the encoder.</para>
            <para>The returned process handle can be used to do things like change the encoder's priority and get it's exit code. See the System.Diagnostics namespace for details.</para>
            <para>Multiple encoders can be set on a channel. For simplicity, the encoder functions (ie. BASS_Encode_IsActive/SetPaused/Stop/Write) will accept either an encoder handle or a channel handle. When using a channel handle, the function is applied to all encoders that are set on that channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>Couldn't start the encoder. Check that the executable exists.</description></item>
            <item><term>BASS_ERROR_CREATE</term><description>The PCM file couldn't be created.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>External encoders are not supported on iOS or Windows CE, so only plain PCM file writing with the BASS_ENCODE_PCM flag is possible on those platforms.</para>
            </remarks>
            <example>
            Start encoding a channel to an MP3 file (output.mp3) using LAME with the standard preset settings:
            <code lang="C#">
            BassEnc.BASS_Encode_Start(channel, "lame --alt-preset standard - output.mp3", 
                    0, null, IntPtr.Zero);
            // start the channel playing &amp; encoding
            Bass.BASS_ChannelPlay(channel, false);
            </code>
            <code lang="VB">
            BassEnc.BASS_Encode_Start(channel, "lame --alt-preset standard - output.mp3", 
                    0, Nothing, IntPtr.Zero)
            ' start the channel playing &amp; encoding
            Bass.BASS_ChannelPlay(channel, False)
            </code>
            Start writing a channel to a WAV file (output.wav):
            <code lang="C#">
            BassEnc.BASS_Encode_Start(channel, "output.wav", 
                    BASSEncode.BASS_ENCODE_PCM, null, IntPtr.Zero);
            // start the channel playing &amp; encoding
            Bass.BASS_ChannelPlay(channel, false);
            </code>
            <code lang="VB">
            BassEnc.BASS_Encode_Start(channel, "output.wav", 
                    BASSEncode.BASS_ENCODE_PCM, Nothing, IntPtr.Zero)
            ' start the channel playing &amp; encoding
            Bass.BASS_ChannelPlay(channel, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCARef(System.Int32)">
            <summary>
            Retrieves a CoreAudio codec encoder's ExtAudioFileRef object. 
            </summary>
            <param name="handle">The encoder.</param>
            <returns>If successful, then the encoder's ExtAudioFileRef object is returned, otherwise <see langword="null"/> is returned. Use BASS_ErrorGetCode to get the error code.</returns>
            <remarks>
            <para>This function allows those that are familiar with the Extended Audio File Services interface to configure a CoreAudio codec. 
            Configuration changes need to be made before any data is encoded, so the encoder should be created in a paused state (BASS_ENCODE_PAUSE) to ensure that.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder is not using a CoreAudio codec.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartCAUnicode(System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncode,System.Int32,Un4seen.Bass.AddOn.Enc.ENCODEPROCEX,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="ftype"></param>
            <param name="atype"></param>
            <param name="flags"></param>
            <param name="bitrate"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartCA(System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncode,System.Int32,Un4seen.Bass.AddOn.Enc.ENCODEPROCEX,System.IntPtr)">
            <summary>
            Starts encoding on a channel.
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="ftype">The file type to use.</param>
            <param name="atype">The audio type to use.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_FP_8BIT, BASS_ENCODE_FP_16BIT, BASS_ENCODE_FP_24BIT, BASS_ENCODE_FP_32BIT</term><description>When you want to encode a floating-point channel, but the encoder does not support 32-bit floating-point sample data, then you can use one of these flags to have the sample data converted to 8/16/24/32 bit integer data before it's passed on to the encoder. These flags are ignored if the channel's sample data isn't floating-point.</description></item>
            <item><term>BASS_ENCODE_FP_AUTO</term><description>Convert floating-point sample data back to the channel's format (8/16 bit integer) if the data is only floating-point due to the BASS_CONFIG_FLOATDSP option being enabled.</description></item>
            <item><term>BASS_ENCODE_DITHER</term><description>Apply dither (TPDF) when converting floating-point sample data to integer.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_MONO</term><description>Convert to mono (if not already).</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>cmdline is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="bitrate">The bitrate to use (bits per second).</param>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder process handle is returned if the encoder is successfully started, else 0 is returned.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartCAFileUnicode(System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncode,System.Int32,System.String)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="ftype"></param>
            <param name="atype"></param>
            <param name="flags"></param>
            <param name="bitrate"></param>
            <param name="filename"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartCAFile(System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncode,System.Int32,System.String)">
            <summary>
            Starts encoding on a channel.
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="ftype">The file type to use.</param>
            <param name="atype">The audio type to use.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_FP_8BIT, BASS_ENCODE_FP_16BIT, BASS_ENCODE_FP_24BIT, BASS_ENCODE_FP_32BIT</term><description>When you want to encode a floating-point channel, but the encoder does not support 32-bit floating-point sample data, then you can use one of these flags to have the sample data converted to 8/16/24/32 bit integer data before it's passed on to the encoder. These flags are ignored if the channel's sample data isn't floating-point.</description></item>
            <item><term>BASS_ENCODE_FP_AUTO</term><description>Convert floating-point sample data back to the channel's format (8/16 bit integer) if the data is only floating-point due to the BASS_CONFIG_FLOATDSP option being enabled.</description></item>
            <item><term>BASS_ENCODE_DITHER</term><description>Apply dither (TPDF) when converting floating-point sample data to integer.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_MONO</term><description>Convert to mono (if not already).</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>cmdline is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="bitrate">The bitrate to use (bits per second).</param>
            <param name="filename">The target filename.</param>
            <returns>The encoder process handle is returned if the encoder is successfully started, else 0 is returned.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Int32)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="cmdline"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <param name="limit"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Int32)">
            <summary>
            Sets up an encoder on a channel.
            <para>This overload implements UNICODE cmdlines. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="cmdline">The encoder command-line, including the executable filename and any options. Or the output filename if the BASS_ENCODE_PCM flag is specified.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_PCM</term><description>Write plain PCM sample data to a file, without an encoder. The output filename is given in the cmdline parameter, or it can be <see langword="null"/> to not write a file.</description></item>
            <item><term>BASS_ENCODE_AIFF</term><description>Send an AIFF header to the encoder instead of a WAVE header.</description></item>
            <item><term>BASS_ENCODE_NOHEAD</term><description>Don't send a WAVE header to the encoder. If this flag is used then the sample format must be passed to the encoder some other way (eg. via the command-line).</description></item>
            <item><term>BASS_ENCODE_RF64</term><description>Write a BWF RF64 WAVE header instead of a standard header.</description></item>
            <item><term>BASS_ENCODE_WFEXT</term><description>Send the sample format information to the encoder in WAVEFORMATEXTENSIBLE form instead of WAVEFORMATEX form. This flag is ignored if the BASS_ENCODE_NOHEAD flag is used.</description></item>
            <item><term>BASS_ENCODE_BIGEND</term><description>Send big-endian sample data to the encoder, else little-endian.</description></item>
            <item><term>BASS_ENCODE_FP_8BIT, BASS_ENCODE_FP_16BIT, BASS_ENCODE_FP_24BIT, BASS_ENCODE_FP_32BIT</term><description>When you want to encode a floating-point channel, but the encoder does not support 32-bit floating-point sample data, then you can use one of these flags to have the sample data converted to 8/16/24/32 bit integer data before it's passed on to the encoder. These flags are ignored if the channel's sample data isn't floating-point.</description></item>
            <item><term>BASS_ENCODE_FP_AUTO</term><description>Convert floating-point sample data back to the channel's format (8/16 bit integer) if the data is only floating-point due to the BASS_CONFIG_FLOATDSP option being enabled.</description></item>
            <item><term>BASS_ENCODE_DITHER</term><description>Apply dither (TPDF) when converting floating-point sample data to integer.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_MONO</term><description>Convert to mono (if not already).</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>cmdline is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="limit">The maximum number of bytes that will be encoded (0=no limit).</param>
            <returns>The encoder process handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para>This function works exactly like <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>, but with a <paramref name="limit"/> parameter added, which is the maximum number of bytes that will be encoded (0=no limit).
            Once the limit is hit, the encoder will die. <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> can be used to be notified of that occurrence.
            One thing to note is that the limit is applied after any conversion due to the BASS_ENCODE_FP flags.</para>
            <para>This can be useful in situations where the encoder needs to know in advance how much data it will be receiving. For example, when using a callback function with a file format that stores the length in the header, as the header cannot then be updated at the end of encoding. The length is communicated to the encoder via the WAVE header, so it requires that the BASS_ENCODE_NOHEAD flag is not used.</para>
            <para>The encoder must be told (via the command-line) to expect input from STDIN, rather than a file. The command-line should also tell the encoder what filename to write it's output to, unless you're using a callback function, in which case it should be told to write it's output to STDOUT.</para>
            <para>No user interaction with the encoder is possible, so anything that would cause the encoder to require the user to press any keys should be avoided. For example, if the encoder asks whether to overwrite files, the encoder should be instructed to always overwrite (via the command-line), or you should delete the existing file before starting the encoder.</para>
            <para>Internally, the sending of sample data to the encoder is implemented via a DSP callback on the channel. That means when you play the channel (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the encoder at the same time. 
            It also means that if you use the BASS_CONFIG_FLOATDSP option, then the sample data will be 32-bit floating-point, and you'll need to use one of the BASS_ENCODE_FP flags if the encoder does not support floating-point sample data. 
            The BASS_CONFIG_FLOATDSP setting should not be changed while encoding is in progress.</para>
            <para>The encoder DSP has a priority setting of -1000, so if you want to set DSP/FX on the channel and have them present in the encoding, set their priority above that.</para>
            <para>Besides the automatic DSP system, data can also be manually fed to the encoder via the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> function. Both methods can be used together, but in general, the "automatic" system ought be paused when using the "manual" system, by use of the BASS_ENCODE_PAUSE flag or the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)"/> function.</para>
            <para>When queued encoding is enabled via the BASS_ENCODE_QUEUE flag, the DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call will just buffer the data, and the data will then be fed to the encoder by another thread. The buffer will grow as needed to hold the queued data, up to a limit specified by the BASS_CONFIG_ENCODE_QUEUE config option.
            If the limit is exceeded (or there is no free memory), data will be lost; <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> can be used to be notified of that occurrence. The amount of data that is currently queued, as well as the queue limit and how much data has been lost, is available from <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCount(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCount)"/>.</para>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_IsActive(System.Int32)"/> can be used to check that the encoder is still running. When done encoding, use <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> to close the encoder.</para>
            <para>The returned process handle can be used to do things like change the encoder's priority and get it's exit code. See the System.Diagnostics namespace for details.</para>
            <para>Multiple encoders can be set on a channel. For simplicity, the encoder functions (ie. BASS_Encode_IsActive/SetPaused/Stop/Write) will accept either an encoder handle or a channel handle. When using a channel handle, the function is applied to all encoders that are set on that channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>Couldn't start the encoder. Check that the executable exists.</description></item>
            <item><term>BASS_ERROR_CREATE</term><description>The PCM file couldn't be created.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>External encoders are not supported on Android or iOS or Windows CE, so only plain PCM file writing with the BASS_ENCODE_PCM flag is possible on those platforms. User-provided encoders can be used via <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/>.</para>
            </remarks>
            <example>
            Start encoding a channel to an MP3 file (output.mp3) using LAME with the standard preset settings:
            <code lang="C#">
            BassEnc.BASS_Encode_Start(channel, "lame --alt-preset standard - output.mp3", 
                    0, null, IntPtr.Zero);
            // start the channel playing &amp; encoding
            Bass.BASS_ChannelPlay(channel, false);
            </code>
            <code lang="VB">
            BassEnc.BASS_Encode_Start(channel, "lame --alt-preset standard - output.mp3", 
                    0, Nothing, IntPtr.Zero)
            ' start the channel playing &amp; encoding
            Bass.BASS_ChannelPlay(channel, False)
            </code>
            Start writing a channel to a WAV file (output.wav):
            <code lang="C#">
            BassEnc.BASS_Encode_Start(channel, "output.wav", 
                    BASSEncode.BASS_ENCODE_PCM, null, IntPtr.Zero);
            // start the channel playing &amp; encoding
            Bass.BASS_ChannelPlay(channel, false);
            </code>
            <code lang="VB">
            BassEnc.BASS_Encode_Start(channel, "output.wav", 
                    BASSEncode.BASS_ENCODE_PCM, Nothing, IntPtr.Zero)
            ' start the channel playing &amp; encoding
            Bass.BASS_ChannelPlay(channel, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUserUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="filename"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)">
            <summary>
            Sets up a user-provided encoder on a channel.
            <para>This overload implements UNICODE cmdlines. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="filename">Output filename... <see langword="null"/> = no output file.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_FP_8BIT, BASS_ENCODE_FP_16BIT, BASS_ENCODE_FP_24BIT, BASS_ENCODE_FP_32BIT</term><description>When you want to encode a floating-point channel, but the encoder does not support 32-bit floating-point sample data, then you can use one of these flags to have the sample data converted to 8/16/24/32 bit integer data before it's passed on to the encoder. These flags are ignored if the channel's sample data isn't floating-point.</description></item>
            <item><term>BASS_ENCODE_FP_AUTO</term><description>Convert floating-point sample data back to the channel's format (8/16 bit integer) if the data is only floating-point due to the BASS_CONFIG_FLOATDSP option being enabled.</description></item>
            <item><term>BASS_ENCODE_DITHER</term><description>Apply dither (TPDF) when converting floating-point sample data to integer.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>filename is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="proc">Callback function to receive the sample data and return the encoded data.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder process handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para>This function allows user-provided encoders to be used, which is most useful for platforms where external encoders are unavailable 
            for use with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>. For example, the LAME library could be used with this function instead of the standalone LAME executable with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>.</para>
            <para>Internally, the sending of sample data to the encoder is implemented via a DSP callback on the channel. That means when the channel is played (or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> is called 
            if it is a decoding channel), the sample data will be sent to the encoder at the same time. It also means that if the BASS_CONFIG_FLOATDSP option is enabled, the sample data will be 32-bit floating-point, 
            and one of the BASS_ENCODE_FP flags will be required if the encoder does not support floating-point sample data. 
            The BASS_CONFIG_FLOATDSP setting should not be changed while encoding is in progress.</para>
            <para>By default, the encoder DSP has a priority setting of -1000, which determines where in the DSP chain the encoding is performed. That can be changed via the BASS_CONFIG_ENCODE_PRIORITY config option.</para>
            <para>Besides the automatic DSP system, data can also be manually fed to the encoder via the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> function. 
            Both methods can be used together, but in general, the 'automatic' system ought to be paused when using the 'manual' system, via the BASS_ENCODE_PAUSE flag or the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)"/> function. 
            Data fed to the encoder manually does not go through the source channel's DSP chain, so any DSP/FX set on the channel will not be applied to the data.</para>
            <para>When queued encoding is enabled via the BASS_ENCODE_QUEUE flag, the DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call will just buffer the data, 
            and the data will then be fed to the encoder by another thread. The buffer will grow as needed to hold the queued data, up to a limit specified by the BASS_CONFIG_ENCODE_QUEUE config option. 
            If the limit is exceeded (or there is no free memory), data will be lost; <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> can be used to be notified of that occurrence. 
            The amount of data that is currently queued, as well as the queue limit and how much data has been lost, is available from <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCount(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCount)"/>.</para>
            <para>When done encoding, use <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StopEx(System.Int32,System.Boolean)"/> to close the encoder.</para>
            <para>Multiple encoders can be set on a channel. For convenience, most of the encoder functions will accept either an encoder handle or a channel handle. 
            When a channel handle is used, the function is applied to all encoders that are set on that channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_CREATE</term><description>The file could not be created.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_AddChunk(System.Int32,System.String,System.IntPtr,System.Int32)">
            <summary>
            Sends a RIFF chunk to an encoder.
            </summary>
            <param name="handle">The encoder handle... a HENCODE.</param>
            <param name="id">The 4 character chunk id (e.g. 'bext').</param>
            <param name="buffer">The pointer to the buffer containing the chunk data (without the id).</param>
            <param name="length">The number of bytes in the buffer.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            BASSenc writes the minimum chunks required of a WAV file: "fmt" and "data", and "ds64" and "fact" when appropriate. This function can be used to add other chunks. 
            For example, a BWF "bext" chunk or "INFO" tags.
            <para>Chunks can only be added prior to sample data being sent to the encoder. The BASS_ENCODE_PAUSE flag can be used when starting the encoder to ensure that no sample data is sent before additional chunks have been set.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No RIFF headers/chunks are being sent to the encoder (due to the BASS_ENCODE_NOHEAD flag being in effect), or sample data encoding has started.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The encoder has died.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_AddChunk(System.Int32,System.String,System.Byte[],System.Int32)">
            <summary>
            Sends a RIFF chunk to an encoder.
            </summary>
            <param name="handle">The encoder handle... a HENCODE.</param>
            <param name="id">The 4 character chunk id (e.g. 'bext').</param>
            <param name="buffer">The buffer containing the chunk data (without the id).</param>
            <param name="length">The number of bytes in the buffer.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>BASSenc writes the minimum chunks required of a WAV file: "fmt" and "data", and "ds64" and "fact" when appropriate. This function can be used to add other chunks. 
            For example, a BWF "bext" chunk or "INFO" tags.
            <para>Chunks can only be added prior to sample data being sent to the encoder. The BASS_ENCODE_PAUSE flag can be used when starting the encoder to ensure that no sample data is sent before additional chunks have been set.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No RIFF headers/chunks are being sent to the encoder (due to the BASS_ENCODE_NOHEAD flag being in effect), or sample data encoding has started.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The encoder has died.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Adding a BEXT chunk:
            <code lang="C#">
            BASS_TAG_BEXT bext = new BASS_TAG_BEXT();
            ... set the bext member here
            string codingHistory = "...";
            byte[] bextData = bext.AsByteArray(codingHistory);
            bool ok = BassEnc.BASS_Encode_AddChunk(handle, "bext", bextData, bextData.Length);
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_IsActive(System.Int32)">
            <summary>
            Checks if an encoder is running on a channel.
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <returns>The return value is one of the folowing (see <see cref="T:Un4seen.Bass.BASSActive"/>):
            <list type="table">
            <item><term>BASS_ACTIVE_STOPPED</term><description>No encoder is running on the channel.</description></item>
            <item><term>BASS_ACTIVE_PLAYING</term><description>There is an encoder running on the channel.</description></item>
            <item><term>BASS_ACTIVE_PAUSED</term><description>There is an encoder running on the channel, but it is paused.</description></item>
            </list>
            </returns>
            <remarks>
            <para>When checking if there's an encoder running on a channel, and there are multiple encoders on the channel, BASS_ACTIVE_PLAYING will be returned if any of them are active.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
            <example>
            In a recording callback (see <see cref="T:Un4seen.Bass.RECORDPROC"/>) this might be used to check, if recording should be continued:
            <code lang="C#">
            private bool RecordingCallback(int channel, IntPtr buffer, int length, IntPtr user)
            {
              // continue recording if encoder is alive
              return ( BassEnc.BASS_Encode_IsActive(channel) != BASSActive.BASS_ACTIVE_STOPPED );
            }
            </code>
            <code lang="VB">
            Private Function RecordingCallback(channel As Integer, buffer As IntPtr, 
                                               length As Integer, user As IntPtr) As Boolean
              ' continue recording if encoder is alive
              Return BassEnc.BASS_Encode_IsActive(channel) &lt;&gt; BASSActive.BASS_ACTIVE_STOPPED
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)">
            <summary>
            Stops encoding on a channel.
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function will free an encoder immediately, without waiting for any data that may be remaining in the queue. <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StopEx(System.Int32,System.Boolean)"/> can be used to have an encoder process the queue before it is freed.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StopEx(System.Int32,System.Boolean)">
            <summary>
            Stops async encoding on a channel.
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="queue">Process the queue first? If so, the encoder will not be freed until after any data remaining in the queue has been processed, and it will not accept any new data in the meantime.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            When an encoder is told to wait for its queue to be processed, this function will return immediately and the encoder will be freed in the background after the queued data has been processed.
            <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> can be used to request notification of when the encoder has been freed. <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> (or this function with queue = <see langword="false"/>) can be used to cancel to queue processing and free the encoder immediately.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)">
            <summary>
            Pauses or resumes encoding on a channel.
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="paused">Paused?</param>
            <returns>If no encoder has been started on the channel, <see langword="false"/> is returned, otherwise <see langword="true"/> is returned.</returns>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>When an encoder is paused, no sample data will be sent to the encoder "automatically". Data can still be sent to the encoder "manually" though, via the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> function.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Sends sample data to the encoder.
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="buffer">A pointer to the buffer containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>There's usually no need to use this function, as the channel's sample data will automatically be fed to the encoder. But in some situations, it could be useful to be able to manually feed the encoder instead.
            <para>The sample data is expected to be the same format as the channel's, or floating-point if the BASS_CONFIG_FLOATDSP (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) option is enabled.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The encoder has died.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.Single[],System.Int32)">
            <summary>
            Sends sample data to the encoder.
            <para>This overload uses a managed float[] to handover sample data to the encoder (typically not used, since most encoders expect 16-bit, so use the int[] or short[] overload).</para>
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="buffer">A reference to the first array element (float[0]) containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>There's usually no need to use this function, as the channel's sample data will automatically be fed to the encoder. But in some situations, it could be useful to be able to manually feed the encoder instead.
            <para>The sample data is expected to be the same format as the channel's, or floating-point if the BASS_CONFIG_FLOATDSP (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) option is enabled.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The encoder has died.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.Int32[],System.Int32)">
            <summary>
            Sends sample data to the encoder.
            <para>This overload uses a managed int[] to handover sample data to the encoder (Note: An int[] is 32-bit. When using 16-bit samples we can keep a stereo pair in here).</para>
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="buffer">A reference to the first array element (int[0]) containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>There's usually no need to use this function, as the channel's sample data will automatically be fed to the encoder. But in some situations, it could be useful to be able to manually feed the encoder instead.
            <para>The sample data is expected to be the same format as the channel's, or floating-point if the BASS_CONFIG_FLOATDSP (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) option is enabled.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The encoder has died.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.Int16[],System.Int32)">
            <summary>
            Sends sample data to the encoder.
            <para>This overload uses a managed short[] to handover sample data to the encoder (perfect for 16-bit samples).</para>
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="buffer">A reference to the first array element (short[0]) containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>There's usually no need to use this function, as the channel's sample data will automatically be fed to the encoder. But in some situations, it could be useful to be able to manually feed the encoder instead.
            <para>The sample data is expected to be the same format as the channel's, or floating-point if the BASS_CONFIG_FLOATDSP (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) option is enabled.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The encoder has died.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.Byte[],System.Int32)">
            <summary>
            Sends sample data to the encoder.
            <para>This overload uses a managed byte[] to handover sample data to the encoder (perfect for 8-bit samples).</para>
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="buffer">A reference to the first array element (byte[0]) containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>There's usually no need to use this function, as the channel's sample data will automatically be fed to the encoder. But in some situations, it could be useful to be able to manually feed the encoder instead.
            <para>The sample data is expected to be the same format as the channel's, or floating-point if the BASS_CONFIG_FLOATDSP (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) option is enabled.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The encoder has died.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_UserOutput(System.Int32,System.Int64,System.IntPtr,System.Int32)">
            <summary>
            Receives the output from a user encoder.
            </summary>
            <param name="handle">The encoder.</param>
            <param name="offset">The file offset of the data... -1 = the current end position.</param>
            <param name="buffer">Pointer to the encoded data.</param>
            <param name="length">The amount of data in bytes.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function should only be called from within the encoder's <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODERPROC"/> callback function.
            <para>If a server has been set on the encoder via <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/> or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerInit(System.Int32,System.String,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeServer,Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC,System.IntPtr)"/>, the server will not receive the data when offset is behind the current end position. 
            The current end position is available from <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCount(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCount)"/> with BASS_ENCODE_COUNT_OUT.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder was not started with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/>.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description>offset is beyond the end of the file.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCount(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCount)">
            <summary>
            Retrieves the amount of data queued, sent to or received from an encoder, or sent to a cast server.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="count">The count to retrieve. One of the following (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncodeCount"/>):
            <list type="table">
            <item><term>BASS_ENCODE_COUNT_IN</term><description>Data sent to the encoder.</description></item>
            <item><term>BASS_ENCODE_COUNT_IN_FP</term><description>Data sent to the encoder before any floating-point conversion.</description></item>
            <item><term>BASS_ENCODE_COUNT_OUT</term><description>Data received from the encoder. This only applies when the encoder outputs to STDOUT or it is an ACM encoder.</description></item>
            <item><term>BASS_ENCODE_COUNT_CAST</term><description>Data sent to a cast server.</description></item>
            <item><term>BASS_ENCODE_COUNT_QUEUE</term><description>Data currently in the queue, waiting to be sent to the encoder, if async encoding is enabled (i.e. the <see cref="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_QUEUE"/> flag was used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>).</description></item>
            <item><term>BASS_ENCODE_COUNT_QUEUE_LIMIT</term><description>The queue's size limit.</description></item>
            <item><term>BASS_ENCODE_COUNT_QUEUE_FAIL</term><description>Data not queued due to the queue being full or out of memory.</description></item>
            </list>
            </param>
            <returns>If successful, the requested count (in bytes) is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para></para>
            <para>The BASS_ENCODE_COUNT_IN_FP and queue counts are based on the channel's sample format (floating-point if the BASS_CONFIG_FLOATDSP option is enabled), while the BASS_ENCODE_COUNT_IN count is based on the sample format used by the encoder, which could be different if one of the BASS_ENCODE_FP flags is active or the encoder is using an ACM codec (which take 16-bit data).</para>
            <para>When the encoder output is being sent to a cast server, the BASS_ENCODE_COUNT_CAST count will match the BASS_ENCODE_COUNT_OUT count, unless there have been problems (eg. network timeout) that have caused data to be dropped.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder does not have a queue.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="count"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormatUnicode(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="form"></param>
            <param name="fromlen"></param>
            <param name="title"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)">
            <summary>
            Presents the user with a list of available ACM (Audio Compression Manager) codec output formats to choose from.
            <para>The overload implements the Unicode version for the title, so the BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="form">Pointer to the format buffer.</param>
            <param name="fromlen">Size of the format buffer. If this is 0, then a suggested format buffer length is returned (which is the maximum length of all installed codecs), without displaying the codec selector.</param>
            <param name="title">Window title for the selector... <see langword="null"/> = "Choose the output format".</param>
            <param name="flags">A combination of these flags <see cref="T:Un4seen.Bass.AddOn.Enc.BASSACMFormat"/>:
            <list type="table">
            <item><term>BASS_ACM_DEFAULT</term><description>Use the format buffer (form) contents as the default choice in the codec selector.</description></item>
            <item><term>BASS_ACM_RATE</term><description>Only include formats with the same sample rate as the source.</description></item>
            <item><term>BASS_ACM_CHANS</term><description>Only include formats with the same number of channels (mono/stereo) as the source.</description></item>
            <item><term>BASS_ACM_SUGGEST</term><description>Suggest a format without letting the user choose. The wanted format tag (eg. WAVE_FORMAT_ADPCM) should be specified in the HIWORD.</description></item>
            </list>
            The HighWord - use <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/>(flags,format) - can be used to restrict the choice to a particular format tag (eg. WAVE_FORMAT_ADPCM). This is required with BASS_ACM_SUGGEST, and is optional otherwise.
            See <see cref="T:Un4seen.Bass.WAVEFormatTag"/> for a list of typical formats being used.
            </param>
            <returns>If successful, the user-selected codec format details are put in the provided buffer and the length of the format details is returned, else 0 is returned. 
            Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. If formlen is 0, then the suggested format buffer size is returned.</returns>
            <remarks>This function presents the user with a list of available ACM codecs to choose from, given the sample format of the channel. The details of the chosen codec's output are returned in the form buffer, 
            which can then be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACM(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFile(System.Int32,System.IntPtr,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)"/> to begin encoding.
            <para>The <paramref name="form"/> buffer contents are actually a <see cref="T:Un4seen.Bass.WAVEFORMATEX"/> or <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> structure.
            If writing the encoder output to a WAVE file, the form buffer contents would be the format chunk ("fmt") of the file.</para>
            <para>To not let the user choose a codec, but automatically suggest a codec you might also use the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormatSuggest(System.Int32,Un4seen.Bass.AddOn.Enc.BASSACMFormat,Un4seen.Bass.WAVEFormatTag)"/> method.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There are no codecs available that will accept the channel's format.</description></item>
            <item><term>BASS_ERROR_ACM_CANCEL</term><description>The user pressed the "cancel" button.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Let the user choose a codec, and setup an encoder on a channel using the chosen codec:
            <code lang="C#">
            // get suggested (maximum) format buffer size
            int formlen = BassEnc.BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, null, BASSACMFormat.BASS_ACM_NONE);
            // create a buffer for the codec
            byte[] buffer = new byte[formlen];
            // now create a pinned handle, so that the Garbage Collector will not move this object
            GCHandle hGC = GCHandle.Alloc( buffer, GCHandleType.Pinned );
            // get the pointer to that pinned object
            IntPtr codec = hGC.AddrOfPinnedObject();
            // let the user choose a codec...
            if ( BassEnc.BASS_Encode_GetACMFormat( channel, codec, formlen, "Choose your format", BASSACMFormat.BASS_ACM_DEFAULT) &gt; 0 )
            {
              // get the generic codec information back
              ACMFORMAT acm = (ACMFORMAT)Marshal.PtrToStructure(codec, typeof(ACMFORMAT));
              // begin encoding using the codec
              BassEnc.BASS_Encode_StartACMFile( channel, codec, BASSEncode.BASS_ENCODE_DEFAULT, "acm.wav");
            }
            // free the codec format buffer (you might free it even if encoding is still running)
            hGC.Free();
            </code>
            <code lang="VB">
            ' get suggested (maximum) format buffer size
            Dim formlen As Integer = BassEnc.BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, Nothing, BASSACMFormat.BASS_ACM_NONE)
            ' create a buffer for the codec
            Dim buffer(formlen - 1) As Byte
            ' now create a pinned handle, so that the Garbage Collector will not move this object
            Dim hGC As GCHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned)
            ' get the pointer to that pinned object
            Dim codec As IntPtr = hGC.AddrOfPinnedObject()
            ' let the user choose a codec...
            If BassEnc.BASS_Encode_GetACMFormat(channel, codec, formlen, "Choose your format", 
                       BASSACMFormat.BASS_ACM_DEFAULT) &gt; 0 Then
              ' get the generic codec information back
              Dim acm As ACMFORMAT = CType(Marshal.PtrToStructure(codec, GetType(ACMFORMAT)), ACMFORMAT)
              ' begin encoding using the codec
              BassEnc.BASS_Encode_StartACMFile(channel, codec, BASSEncode.BASS_ENCODE_DEFAULT, "acm.wav")
            End If
            ' free the codec format buffer (you might free it even if encoding is still running)
            hGC.Free()
            </code>
            If you are into C# using native pointers in an unsafe codeblock would be even faster:
            <code lang="C#">
            // get suggested (maximum) format buffer size
            int formlen = BassEnc.BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, null, BASSACMFormat.BASS_ACM_NONE);
            // create a buffer for the codec
            byte[] buffer = new byte[formlen];
            unsafe
            {
              fixed (byte* p = buffer)
              {
                // let the user choose a codec...
                if ( BassEnc.BASS_Encode_GetACMFormat( channel, (IntPtr)p, formlen, "Choose your format", BASSACMFormat.BASS_ACM_DEFAULT) &gt; 0 )
                {
                  // get the generic codec information back
                  ACMFORMAT acm = (ACMFORMAT)Marshal.PtrToStructure((IntPtr)p, typeof(ACMFORMAT));
                  // begin encoding using the codec
                  BassEnc.BASS_Encode_StartACMFile( channel, acm, BASSEncode.BASS_ENCODE_DEFAULT, "acm.wav");
                }
              }
            }
            </code>
            For more convenience use the other overload of <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>.
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat,Un4seen.Bass.WAVEFormatTag)">
            <summary>
            Presents the user with a list of available ACM (Audio Compression Manager) codec output formats to choose from.
            <para>This overload returns the generic codec format <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> and handles all the rest already for you.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="title">Window title for the selector... <see langword="null"/> = "Choose the output format".</param>
            <param name="flags">A combination of these flags <see cref="T:Un4seen.Bass.AddOn.Enc.BASSACMFormat"/>:
            <list type="table">
            <item><term>BASS_ACM_DEFAULT</term><description>Use the format buffer (form) contents as the default choice in the codec selector.</description></item>
            <item><term>BASS_ACM_RATE</term><description>Only include formats with the same sample rate as the source.</description></item>
            <item><term>BASS_ACM_CHANS</term><description>Only include formats with the same number of channels (mono/stereo) as the source.</description></item>
            <item><term>BASS_ACM_SUGGEST</term><description>Suggest a format without letting the user choose. The wanted format tag (eg. WAVE_FORMAT_ADPCM) should be specified in the HIWORD.</description></item>
            </list>
            The HighWord - use <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/>(flags,format) - can be used to restrict the choice to a particular format tag (eg. WAVE_FORMAT_ADPCM). This is required with BASS_ACM_SUGGEST, and is optional otherwise.
            See <see cref="T:Un4seen.Bass.WAVEFormatTag"/> for a list of typical formats being used.
            </param>
            <param name="format">The wanted codec format (use one of the <see cref="T:Un4seen.Bass.WAVEFormatTag"/> flags, or see the MMREG.H file for more).</param>
            <returns>If successful, an instance of the generic codec format <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function presents the user with a list of available ACM codecs to choose from, given the sample format of the channel. The details of the chosen codec's output are returned as a generic codec format <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/>,
            which can then be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACM(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFile(System.Int32,System.IntPtr,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)"/> to begin encoding.
            <para>If writing the encoder output to a WAVE file, the codec format's <see cref="T:Un4seen.Bass.WAVEFORMATEX"/> contents would be the format chunk ("fmt") of the file.</para>
            <para>To not let the user choose a codec, but automatically suggest a codec you might also use the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormatSuggest(System.Int32,Un4seen.Bass.AddOn.Enc.BASSACMFormat,Un4seen.Bass.WAVEFormatTag)"/> method.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There are no codecs available that will accept the channel's format.</description></item>
            <item><term>BASS_ERROR_ACM_CANCEL</term><description>The user pressed the "cancel" button.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Let the user choose a codec, and setup an encoder on a channel using the chosen codec:
            <code lang="C#">
            ACMFORMAT codec = BassEnc.BASS_Encode_GetACMFormat(channel, "Select your encoder", 
                                      BASSACMFormat.BASS_ACM_DEFAULT, 
                                      WAVEFormatTag.UNKNOWN);
            if ( codec != null )
            {
            	// begin encoding using the codec
            	BassEnc.BASS_Encode_StartACMFile( channel, codec, BASSEncode.BASS_ENCODE_DEFAULT, "acm.wav");
            }
            </code>
            <code lang="VB">
            Dim codec As ACMFORMAT = BassEnc.BASS_Encode_GetACMFormat(channel, "Select your encoder", 
                                             BASSACMFormat.BASS_ACM_DEFAULT, 
                                             WAVEFormatTag.UNKNOWN)
            If Not (codec Is Nothing) Then
              ' begin encoding using the codec
              BassEnc.BASS_Encode_StartACMFile(channel, codec, BASSEncode.BASS_ENCODE_DEFAULT, "acm.wav")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT@,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)">
            <summary>
            Presents the user with a list of available ACM (Audio Compression Manager) codec output formats to choose from.
            <para>This overload returns the generic codec format <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> in the <paramref name="codec"/> and handles all the rest already for you.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="codec">The <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> to preselect. Will return the newly selected codec.</param>
            <param name="title">Window title for the selector... <see langword="null"/> = "Choose the output format".</param>
            <param name="flags">A combination of these flags <see cref="T:Un4seen.Bass.AddOn.Enc.BASSACMFormat"/>:
            <list type="table">
            <item><term>BASS_ACM_DEFAULT</term><description>Use the format buffer (form) contents as the default choice in the codec selector.</description></item>
            <item><term>BASS_ACM_RATE</term><description>Only include formats with the same sample rate as the source.</description></item>
            <item><term>BASS_ACM_CHANS</term><description>Only include formats with the same number of channels (mono/stereo) as the source.</description></item>
            <item><term>BASS_ACM_SUGGEST</term><description>Suggest a format without letting the user choose. The wanted format tag (eg. WAVE_FORMAT_ADPCM) should be specified in the HIWORD.</description></item>
            </list>
            The HighWord - use <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/>(flags,format) - can be used to restrict the choice to a particular format tag (eg. WAVE_FORMAT_ADPCM). This is required with BASS_ACM_SUGGEST, and is optional otherwise.
            See <see cref="T:Un4seen.Bass.WAVEFormatTag"/> for a list of typical formats being used.
            </param>
            <returns>If successful, <see langword="true"/> is returned and <paramref name="codec"/> will contain the selected ACM format codec - else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function presents the user with a list of available ACM codecs to choose from, given the sample format of the channel. The details of the chosen codec's output are returned as a generic codec format <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/>,
            which can then be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACM(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFile(System.Int32,System.IntPtr,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)"/> to begin encoding.
            <para>If writing the encoder output to a WAVE file, the codec format's <see cref="T:Un4seen.Bass.WAVEFORMATEX"/> contents would be the format chunk ("fmt") of the file.</para>
            <para>To not let the user choose a codec, but automatically suggest a codec you might also use the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormatSuggest(System.Int32,Un4seen.Bass.AddOn.Enc.BASSACMFormat,Un4seen.Bass.WAVEFormatTag)"/> method.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There are no codecs available that will accept the channel's format.</description></item>
            <item><term>BASS_ERROR_ACM_CANCEL</term><description>The user pressed the "cancel" button.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormatSuggest(System.Int32,Un4seen.Bass.AddOn.Enc.BASSACMFormat,Un4seen.Bass.WAVEFormatTag)">
            <summary>
            Returns a suggested ACM (Audio Compression Manager) codec output format without displaying a user dialog.
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="flags">A combination of these flags <see cref="T:Un4seen.Bass.AddOn.Enc.BASSACMFormat"/>:
            <list type="table">
            <item><term>BASS_ACM_DEFAULT</term><description>Use the format buffer (form) contents as the default choice in the codec selector.</description></item>
            <item><term>BASS_ACM_RATE</term><description>Only include formats with the same sample rate as the source.</description></item>
            <item><term>BASS_ACM_CHANS</term><description>Only include formats with the same number of channels (mono/stereo) as the source.</description></item>
            <item><term>BASS_ACM_SUGGEST</term><description>This flag will be added automatically.</description></item>
            </list>
            </param>
            <param name="format">The wanted codec format (use one of the <see cref="T:Un4seen.Bass.WAVEFormatTag"/> flags, or see the MMREG.H file for more).</param>
            <returns>If successful, an instance of the generic codec format <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function does NOT presents the user with a list of available ACM codecs to choose from, instead an automatic suggested codec will be returned, which matches the given format. 
            The details of the chosen codec's output are returned as a generic codec format <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/>,
            which can then be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACM(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFile(System.Int32,System.IntPtr,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)"/> to begin encoding.
            <para>If writing the encoder output to a WAVE file, the codec format's <see cref="T:Un4seen.Bass.WAVEFORMATEX"/> contents would be the format chunk ("fmt") of the file.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There are no codecs available that will accept the channel's format.</description></item>
            <item><term>BASS_ERROR_ACM_CANCEL</term><description>The user pressed the "cancel" button.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Without letting the user choose, setup an MP3 encoder on a channel:
            <code lang="C#">
            ACMFORMAT codec = BassEnc.BASS_Encode_GetACMFormatSuggest(channel, 
                                      BASSACMFormat.BASS_ACM_CHANS | BASSACMFormat.BASS_ACM_RATE,
                                      WAVEFormatTag.MPEGLAYER3);
            if ( codec != null )
            {
              // begin encoding using the codec
              BassEnc.BASS_Encode_StartACMFile( channel, codec, BASSEncode.BASS_ENCODE_DEFAULT, "acm.mp3");
            }
            </code>
            <code lang="VB">
            Dim codec As ACMFORMAT = BassEnc.BASS_Encode_GetACMFormatSuggest(channel, 
                                             BASSACMFormat.BASS_ACM_CHANS Or BASSACMFormat.BASS_ACM_RATE,
                                             WAVEFormatTag.MPEGLAYER3)
            If Not (codec Is Nothing) Then
              ' begin encoding using the codec
              BassEnc.BASS_Encode_StartACMFile(channel, codec, BASSEncode.BASS_ENCODE_DEFAULT, "acm.mp3")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACM(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)">
            <summary>
            Sets up an encoder on a channel, using an ACM codec and sending the output to a user defined function.
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="form">ACM codec output format (an <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> instance as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>).</param>
            <param name="flags">A combination of these flags <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>:
            <list type="table">
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            </list>
            </param>
            <param name="proc">Callback function to receive the encoded data.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The ACM encoder allows installed ACM (Audio Compression Manager) codecs to be used for encoding. The codec used is determined by the contents of the form parameter. 
            The <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/> function can be used to initialize that.
            <para>Internally, the sending of sample data to the encoder is implemented via a DSP callback on the channel. That means when you play the channel (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the encoder at the same time. 
            The encoding is performed in the DSP callback. There isn't a separate process doing the encoding, as when using an external encoder via <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>.</para>
            <para>By default, the encoder DSP has a priority setting of -1000, which determines where in the DSP chain the encoding is performed. That can be changed using the BASS_CONFIG_ENCODE_PRIORITY config option (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>).</para>
            <para>Besides the automatic DSP system, data can also be manually fed to the encoder via the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> function. Both methods can be used together, but in general, the "automatic" system ought be paused when using the "manual" system, by use of the BASS_ENCODE_PAUSE flag or the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)"/> function.</para>
            <para>When queued encoding is enabled via the BASS_ENCODE_QUEUE flag, the DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call will just buffer the data, and the data will then be fed to the encoder by another thread. The buffer will grow as needed to hold the queued data, up to a limit specified by the BASS_CONFIG_ENCODE_QUEUE config option.
            If the limit is exceeded (or there is no free memory), data will be lost; <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> can be used to be notified of that occurrence. The amount of data that is currently queued, as well as the queue limit and how much data has been lost, is available from <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCount(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCount)"/>.</para>
            <para>When done encoding, use <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> to close the encoder.</para>
            <para>Multiple encoders can be set on a channel. For simplicity, the encoder functions will accept either an encoder handle or a channel handle. When using a channel handle, the function is applied to all encoders that are set on that channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The codec specified in <paramref name="form"/> couldn't be initialized.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Setup an ACM encoder with a callback to process the encoded data:
            <code lang="C#">
            // the encoding callback
            private ENCODEPROC _myEncProc;
            private byte[] _encbuffer = null;
            ...
            ACMFORMAT codec = BassEnc.BASS_Encode_GetACMFormat(channel, "Select your encoder", 
                                      BASSACMFormat.BASS_ACM_DEFAULT, WAVEFormatTag.UNKNOWN);
            if ( codec != null )
            {
              // create the delegate
              _myEncProc = new ENCODEPROC(MyEncoderProc);
              // begin encoding using the codec with the delegate callback
              int encHandle = BassEnc.BASS_Encode_StartACM( channel, codec, 
                                      BASSEncode.BASS_ENCODE_DEFAULT, _myEncProc, IntPtr.Zero);
            }
            ...
            private bool MyEncodingWriter(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              // dynamic buffer allocation
              if ( _encbuffer == null || _encbuffer.Length &lt; length )
                _encbuffer = new byte[length];
            	
              // copy from managed to unmanaged memory
              Marshal.Copy(buffer, _encbuffer, 0, length);
              // process the data in _encbuffer, e.g. write to disk or whatever
              ...
            }
            </code>
            <code lang="VB">
            Private _myEncProc As ENCODEPROC
            Private _encbuffer As Byte() = Nothing
            ...
            Dim codec As ACMFORMAT = BassEnc.BASS_Encode_GetACMFormat(channel, "Select your encoder", 
                                             BASSACMFormat.BASS_ACM_DEFAULT, WAVEFormatTag.UNKNOWN)
            If Not (codec Is Nothing) Then
              ' create the delegate
              _myEncProc = New ENCODEPROC(AddressOf MyEncoderProc)
              ' begin encoding using the codec with the delegate callback
              Dim encHandle As Integer = BassEnc.BASS_Encode_StartACM(channel, codec, 
                                                 BASSEncode.BASS_ENCODE_DEFAULT, _myEncProc, IntPtr.Zero)
            End If
            ...
            Private Function MyEncodingWriter(handle As Integer, channel As Integer, 
                                              buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              ' dynamic buffer allocation
              If _encbuffer Is Nothing OrElse _encbuffer.Length &lt; length Then
                _encbuffer = New Byte(length) {}
              End If 
            
              ' copy from managed to unmanaged memory
              Marshal.Copy(buffer, _encbuffer, 0, length)
              ' process the data in _encbuffer, e.g. write to disk or whatever
              ...
            End Function
            </code>
            If you are into C# you might also use native pointer access in an unsafe codeblock:
            <code lang="C#">
            private unsafe void MyEncoding(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              // here we receive the encoded data back.
              // the encoded data is a kind of raw byte buffer...
              byte *data = (byte*)buffer;
            
              for (int a=0; a&lt;length; a++)
              {
                // do whatever you want with the encoded data
                _stream.WriteByte( data[a] );
              }
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACM(System.Int32,System.IntPtr,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)">
            <summary>
            Sets up an encoder on a channel, using an ACM codec and sending the output to a user defined function.
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="form">ACM codec output format (buffer as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>).</param>
            <param name="flags">A combination of these flags <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>:
            <list type="table">
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            </list>
            </param>
            <param name="proc">Callback function to receive the encoded data.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The ACM encoder allows installed ACM (Audio Compression Manager) codecs to be used for encoding. The codec used is determined by the contents of the form parameter. 
            The <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/> function can be used to initialize that.
            <para>Internally, the sending of sample data to the encoder is implemented via a DSP callback on the channel. That means when you play the channel (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the encoder at the same time. 
            The encoding is performed in the DSP callback. There isn't a separate process doing the encoding, as when using an external encoder via <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>.</para>
            <para>By default, the encoder DSP has a priority setting of -1000, which determines where in the DSP chain the encoding is performed. That can be changed using the BASS_CONFIG_ENCODE_PRIORITY config option (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>).</para>
            <para>Besides the automatic DSP system, data can also be manually fed to the encoder via the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> function. Both methods can be used together, but in general, the "automatic" system ought be paused when using the "manual" system, by use of the BASS_ENCODE_PAUSE flag or the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)"/> function.</para>
            <para>When done encoding, use <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> to close the encoder.</para>
            <para>Multiple encoders can be set on a channel. For simplicity, the encoder functions will accept either an encoder handle or a channel handle. When using a channel handle, the function is applied to all encoders that are set on that channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The codec specified in <paramref name="form"/> couldn't be initialized.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Setup an ACM encoder with a callback to process the encoded data:
            <code lang="C#">
            // get suggested (maximum) format buffer size
            int formlen = BassEnc.BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, null, BASSACMFormat.BASS_ACM_NONE);
            // create a buffer for the codec
            byte[] buffer = new byte[formlen];
            unsafe
            {
              fixed (byte* p = buffer)
              {
                // let the user choose a codec...
                if ( BassEnc.BASS_Encode_GetACMFormat( channel, (IntPtr)p, formlen, "Choose your format", 
                             BASSACMFormat.BASS_ACM_DEFAULT) &gt; 0 )
                {
                  // create the delegate
            	  _myEncProc = new ENCODEPROC(MyEncoderProc);
                  // begin encoding using the codec with the delegate callback
            	  int encHandle = BassEnc.BASS_Encode_StartACMFile(channel, (IntPtr)p, BASSEncode.BASS_ENCODE_DEFAULT, _myEncProc, IntPtr.Zero);
                }
              }
            }
            ...
            // the encoding callback
            private ENCODEPROC _myEncProc;  // keep the callback delegate in a global member
            private bool MyEncodingWriter(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              ...
            }
            </code>
            <code lang="VB">
            ' get suggested (maximum) format buffer size
            Dim formlen As Integer = BassEnc.BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, Nothing, BASSACMFormat.BASS_ACM_NONE)
            ' create a buffer for the codec
            Dim buffer(formlen - 1) As Byte
            ' now create a pinned handle, so that the Garbage Collector will not move this object
            Dim hGC As GCHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned)
            ' get the pointer to that pinned object
            Dim codec As IntPtr = hGC.AddrOfPinnedObject()
            ' let the user choose a codec...
            If BassEnc.BASS_Encode_GetACMFormat(channel, codec, formlen, "Choose your format", 
                       BASSACMFormat.BASS_ACM_DEFAULT) &gt; 0 Then
              ' create the delegate
              _myEncProc = New ENCODEPROC(AddressOf MyEncoderProc)
              ' begin encoding using the codec with the delegate callback
              Dim encHandle As Integer = BassEnc.BASS_Encode_StartACMFile(channel, codec, 
                                                 BASSEncode.BASS_ENCODE_DEFAULT, _myEncProc, IntPtr.Zero)
            End If
            ' free the codec format buffer (you might free it even if encoding is still running)
            hGC.Free()
            ...
            Private _myEncProc As ENCODEPROC
            Private Function MyEncodingWriter(handle As Integer, channel As Integer, 
                                              buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              ...
            End Function
            </code>
            If you are into C# using native pointers in an unsafe codeblock would be even faster:
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFileUnicode(System.Int32,System.IntPtr,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="form"></param>
            <param name="flags"></param>
            <param name="filename"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFileUnicode(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="form"></param>
            <param name="flags"></param>
            <param name="file"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFile(System.Int32,System.IntPtr,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            Sets up an encoder on a channel, using an ACM codec and writing the output to a file.
            <para>This overload represents the Unicode version for the file name. The BASS_UNICODE flag will automatically be added if missing.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="form">ACM codec output format (buffer as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>).</param>
            <param name="flags">A combination of these flags <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>:
            <list type="table">
            <item><term>BASS_ENCODE_NOHEAD</term><description>Don't write a WAVE header to the file.</description></item>
            <item><term>BASS_ENCODE_RF64</term><description>Write an RF64 header instead of a standard RIFF header, allowing the file to go beyond 4GB in size. This flag is ignored if the BASS_ENCODE_NOHEAD flag is used.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            </list>
            </param>
            <param name="filename">The filename to write.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The ACM encoder allows installed ACM (Audio Compression Manager) codecs to be used for encoding. The codec used is determined by the contents of the form parameter. The <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/> function can be used to initialize that.
            <para>Unless the BASS_ENCODE_NOHEAD flag is specified, a WAVE header and the <paramref name="form"/> contents will be written to the file. This is generally required for the file to be playable, but in some cases (eg. MP3) it's not.
            Standard RIFF WAV files are limited to a little over 4GB in size, so BASSenc will automatically stop encoding at that point. That size limit can be overcome with an RF64 file. When writing an RF64 WAV file, a standard RIFF header will still be written initially, which will only be replaced by an RF64 header at the end if the file size has exceeded the standard limit.</para>
            <para>Internally, the sending of sample data to the encoder is implemented via a DSP callback on the channel. That means when you play the channel (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the encoder at the same time. 
            The encoding is performed in the DSP callback. There isn't a separate process doing the encoding, as when using an external encoder via <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>.</para>
            <para>By default, the encoder DSP has a priority setting of -1000, which determines where in the DSP chain the encoding is performed. That can be changed using the BASS_CONFIG_ENCODE_PRIORITY config option (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>).</para>
            <para>Besides the automatic DSP system, data can also be manually fed to the encoder via the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> function. Both methods can be used together, but in general, the "automatic" system ought be paused when using the "manual" system, by use of the BASS_ENCODE_PAUSE flag or the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)"/> function.</para>
            <para>When done encoding, use <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> to close the encoder.</para>
            <para>Multiple encoders can be set on a channel. For simplicity, the encoder functions will accept either an encoder handle or a channel handle. When using a channel handle, the function is applied to all encoders that are set on that channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The codec specified in <paramref name="form"/> couldn't be initialized.</description></item>
            <item><term>BASS_ERROR_CREATE</term><description>The file couldn't be created.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Setup an ACM encoder with a callback to process the encoded data:
            <code lang="C#">
            // get suggested (maximum) format buffer size
            int formlen = BassEnc.BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, null, BASSACMFormat.BASS_ACM_NONE);
            // create a buffer for the codec
            byte[] form = new byte[formlen];
            unsafe
            {
              fixed (byte* p = form)
              {
                // automatically suggest an MP3 codec
                if (BassEnc.BASS_Encode_GetACMFormat(handle, (IntPtr)p, formlen, null, 
                            (BASSACMFormat)Utils.MakeLong((int)(BASSACMFormat.BASS_ACM_SUGGEST | BASSACMFormat.BASS_ACM_RATE | BASSACMFormat.BASS_ACM_CHANS), 
                                                          (int)WAVEFormatTag.MPEGLAYER3)) &gt; 0)
                {
                  // begin encoding
                  int encHandle = BassEnc.BASS_Encode_StartACMFile(channel, (IntPtr)p, 
                                          BASSEncode.BASS_ENCODE_NOHEAD, "output.mp3" );
            }
            </code>
            <code lang="VB">
            ' get suggested (maximum) format buffer size
            Dim formlen As Integer = BassEnc.BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, Nothing, BASSACMFormat.BASS_ACM_NONE)
            ' create a buffer for the codec
            Dim buffer(formlen - 1) As Byte
            ' now create a pinned handle, so that the Garbage Collector will not move this object
            Dim hGC As GCHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned)
            ' get the pointer to that pinned object
            Dim codec As IntPtr = hGC.AddrOfPinnedObject()
            ' automatically suggest an MP3 codec
            If BassEnc.BASS_Encode_GetACMFormat(handle, codec, formlen, Nothing, 
                       CType(Utils.MakeLong(CInt(BASSACMFormat.BASS_ACM_SUGGEST Or BASSACMFormat.BASS_ACM_RATE Or BASSACMFormat.BASS_ACM_CHANS), 
                                            CInt(WAVEFormatTag.MPEGLAYER3)), BASSACMFormat)) &gt; 0 Then
              ' begin encoding
              Dim encHandle As Integer = BassEnc.BASS_Encode_StartACMFile(channel, codec, 
                                                 BASSEncode.BASS_ENCODE_NOHEAD, "output.mp3")
            End If
            ' free the codec format buffer (you might free it even if encoding is still running)
            hGC.Free()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFile(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            Sets up an encoder on a channel, using an ACM codec and writing the output to a file.
            <para>This overload represents the Unicode version for the file name. The BASS_UNICODE flag will automatically be added if missing.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="form">ACM codec output format (buffer as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>).</param>
            <param name="flags">A combination of these flags <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>:
            <list type="table">
            <item><term>BASS_ENCODE_NOHEAD</term><description>Don't write a WAVE header to the file.</description></item>
            <item><term>BASS_ENCODE_RF64</term><description>Write an RF64 header instead of a standard RIFF header, allowing the file to go beyond 4GB in size. This flag is ignored if the BASS_ENCODE_NOHEAD flag is used.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            </list>
            </param>
            <param name="filename">The filename to write.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The ACM encoder allows installed ACM (Audio Compression Manager) codecs to be used for encoding. The codec used is determined by the contents of the form parameter. The <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/> function can be used to initialize that.
            <para>Unless the BASS_ENCODE_NOHEAD flag is specified, a WAVE header and the <paramref name="form"/> contents will be written to the file. This is generally required for the file to be playable, but in some cases (eg. MP3) it's not.
            Standard RIFF WAV files are limited to a little over 4GB in size, so BASSenc will automatically stop encoding at that point. That size limit can be overcome with an RF64 file. When writing an RF64 WAV file, a standard RIFF header will still be written initially, which will only be replaced by an RF64 header at the end if the file size has exceeded the standard limit.</para>
            <para>Internally, the sending of sample data to the encoder is implemented via a DSP callback on the channel. That means when you play the channel (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the encoder at the same time. 
            The encoding is performed in the DSP callback. There isn't a separate process doing the encoding, as when using an external encoder via <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>.</para>
            <para>By default, the encoder DSP has a priority setting of -1000, which determines where in the DSP chain the encoding is performed. That can be changed using the BASS_CONFIG_ENCODE_PRIORITY config option (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>).</para>
            <para>Besides the automatic DSP system, data can also be manually fed to the encoder via the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> function. Both methods can be used together, but in general, the "automatic" system ought be paused when using the "manual" system, by use of the BASS_ENCODE_PAUSE flag or the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)"/> function.</para>
            <para>When done encoding, use <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> to close the encoder.</para>
            <para>Multiple encoders can be set on a channel. For simplicity, the encoder functions will accept either an encoder handle or a channel handle. When using a channel handle, the function is applied to all encoders that are set on that channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The codec specified in <paramref name="form"/> couldn't be initialized.</description></item>
            <item><term>BASS_ERROR_CREATE</term><description>The file couldn't be created.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Setup an ACM encoder with a callback to process the encoded data:
            <code lang="C#">
            ACMFORMAT codec = BassEnc.BASS_Encode_GetACMFormat(channel, "Select your encoder", 
                                      BASSACMFormat.BASS_ACM_DEFAULT, WAVEFormatTag.UNKNOWN);
            if ( codec != null )
            {
              // begin encoding
              int encHandle = BassEnc.BASS_Encode_StartACMFile( channel, codec, 
                                      BASSEncode.BASS_ENCODE_DEFAULT, "output.wav" );
            }
            </code>
            <code lang="VB">
            Dim codec As ACMFORMAT = BassEnc.BASS_Encode_GetACMFormat(channel, "Select your encoder", 
                                             BASSACMFormat.BASS_ACM_DEFAULT, WAVEFormatTag.UNKNOWN)
            If Not (codec Is Nothing) Then
              ' begin encoding
              Dim encHandle As Integer = BassEnc.BASS_Encode_StartACMFile(channel, codec, 
                                                 BASSEncode.BASS_ENCODE_DEFAULT, "output.wav")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)">
            <summary>
            Sets a callback function on an encoder (or all encoders on a channel) to receive notifications about its status.
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="proc">Callback function to receive the notifications... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>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.</para>
            <para>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 = <see langword="null"/>).</para>
            <para>The status of an encoder and its cast connection (if it has one) is checked when data is sent to the encoder or server, and by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_IsActive(System.Int32)"/>. That means an encoder's death will not be detected automatically, and so no notification given, while no data is being encoded.</para>
            <para>If the encoder is already dead when setting up a notification callback, the callback will be triggered immediately.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Using the callback with a recording caster:
            <code lang="C#">
            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);
            Start();
            ...
            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, "server.com:8000", "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);
                BassEnc.BASS_Encode_Stop(_encoder);
                _encoder = 0;
              }
            }
            
            private void EncoderNotify(int handle, int status, IntPtr user)
            {
              // encoder/connection lost
              Stop();
              if (_autoreconnect)
              {
                // do auto-reconnect...
                Thread.Sleep(1000); // wait a sec
                Start();
              } 
            }
            </code>
            <code lang="VB">
            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)
            Start()
            ...
            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, "server.com:8000", "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 &lt;&gt; 0 Then
                BassEnc.BASS_Encode_SetNotify(_encoder, Nothing, IntPtr.Zero)
                BassEnc.BASS_Encode_Stop(_encoder)
                _encoder = 0
              End If
            End Sub
            
            Private Sub EncoderNotify(handle As Integer, status As Integer, user As IntPtr)
              ' encoder/connection lost
              Stop()
              If _autoreconnect Then
                ' do auto-reconnect...
                Thread.Sleep(1000) ' wait a sec
                Start()
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetChannel(System.Int32,System.Int32)">
            <summary>
            Moves an encoder (or all encoders on a channel) to another channel.
            </summary>
            <param name="handle">The encoder or channel handle... a HENCODE, HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="channel">The channel to move the encoder(s) to... a HSTREAM, HMUSIC, or HRECORD.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The new channel must have the same sample format (rate, channels, resolution) as the old channel, as that is what the encoder is expecting. 
            A channel's sample format is available via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> or <paramref name="channel"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The new channel's sample format is not the same as the old channel's.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetChannel(System.Int32)">
            <summary>
            Retrieves the channel that an encoder is set on.
            </summary>
            <param name="handle">The encoder to get the channel from.</param>
            <returns>If successful, the encoder's channel handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)">
            <summary>
            Initializes sending an encoder's output to a Shoutcast or Icecast server.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="server">The server to send to, in the form of "address:port" (Shoutcast v1) resp. "address:port,sid" (Shoutcast v2) or "address:port/mount" (Icecast).</param>
            <param name="pass">The server password. A username can be included in the form of "username:password" when connecting to an Icecast or Shoutcast 2 server.</param>
            <param name="content">The MIME type of the encoder output. This can be one of the following:
            <para><see cref="F:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_ENCODE_TYPE_MP3"/>, <see cref="F:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_ENCODE_TYPE_OGG"/> or <see cref="F:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_ENCODE_TYPE_AAC"/>.</para>
            </param>
            <param name="name">The stream name... <see langword="null"/> = no name.</param>
            <param name="url">The URL, for example, of the radio station's webpage... <see langword="null"/> = no URL.</param>
            <param name="genre">The genre... <see langword="null"/> = no genre.</param>
            <param name="desc">Description... <see langword="null"/> = no description. This applies to Icecast only.</param>
            <param name="headers">Other headers to send to the server... <see langword="null"/> = none. Each header should end with a carriage return and line feed ("\r\n").</param>
            <param name="bitrate">The bitrate (in kbps) of the encoder output... 0 = undefined bitrate. In cases where the bitrate is a "quality" (rather than CBR) setting, the headers parameter can be used to communicate that instead, eg. "ice-bitrate: Quality 0\r\n".</param>
            <param name="flags">A combination of these flags:
            <list type="table">
            <item><term>BASS_ENCODE_CAST_PUBLIC</term><description>Add the stream to the public directory at directory.shoutcast.com or dir.xiph.org (or as defined in the server config).</description></item>
            <item><term>BASS_ENCODE_CAST_PUT</term><description>Use the PUT method when connecting to an Icecast server, else the SOURCE method is used. This flag has no effect on Shoutcast servers, and is applied automatically when the BASS_ENCODE_CAST_SSL flag is specified.</description></item>
            <item><term>BASS_ENCODE_CAST_SSL</term><description>Use SSL/TLS encryption. This requires the OpenSSL library, and that the server is configured to accept encrypted connections.</description></item>
            </list>
            </param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function sets up a Shoutcast/Icecast source client, sending the encoder's output to a server, which listeners can then connect to and receive the data from. 
            The Shoutcast and Icecast server software is available from <a href="http://www.shoutcast.com/broadcast-tools">www.shoutcast.com/broadcast-tools</a> and <a href="http://www.icecast.org/download.php">www.icecast.org/download</a>, respectively.</para>
            <para>An encoder needs to be started (but with no data sent to it yet) before using this function to setup the sending of the encoder's output to a Shoutcast or Icecast server. 
            If <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> is used, the encoder should be setup to write its output to STDOUT. Due to the length restrictions of WAVE headers/files, the encoder should also be started with the BASS_ENCODE_NOHEAD flag, and the sample format details sent via the command-line.</para>
            <para>Unless the BASS_ENCODE_CAST_NOLIMIT flag is set on the encoder, BASSenc automatically limits the rate that data is processed to real-time speed to avoid overflowing the server's buffer, which means that it is safe to simply try to process data as quickly as possible, eg. when the source is a decoding channel.
            Encoders set on recording channels are automatically exempt from the rate limiting, as they are inherently real-time.
            With BASS 2.4.6 or above, also exempt are encoders that are fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), eg. when the source is a playing channel; that is to avoid delaying the update thread, which could result in playback buffer underruns.</para>
            <para>Normally, BASSenc will produce the encoded data (with the help of an encoder) that is sent to a Shoutcast/Icecast server, but it is also possible to send already encoded data to a server (without first decoding and re-encoding it) via the PCM encoding option.
            The encoder can be set on any BASS channel, as rather than feeding on sample data from the channel, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> would be used to feed in the already encoded data.
            BASSenc does not know what the data's bitrate is in that case, so it is up to the user to process the data at the correct rate (real-time speed).</para>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerInit(System.Int32,System.String,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeServer,Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC,System.IntPtr)"/> can be used to setup a server that listeners can connect to directly, without a Shoutcast/Icecast server intermediary.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>There is already a cast set on the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="server"/> doesn't include a port number.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>Couldn't connect to the server.</description></item>
            <item><term>BASS_ERROR_CAST_DENIED</term><description><paramref name="pass"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Start encoding a stereo 44100hz channel to 128kb/s MP3, and send the output to a Shoutcast server:
            <code lang="C#">
            // setup the encoder
            int encoder = BassEnc.BASS_Encode_Start(channel, "lame -r -x -s 44100 -b 128 -", 
                                  BASS_ENCODE_NOHEAD, null, 0);
            // setup the encoder
            BassEnc.BASS_Encode_CastInit(encoder, "server.com:8000", "password", BassEnc.BASS_ENCODE_TYPE_MP3, 
                                         "name", "url", "genre", null, null, 128, true);
            </code>
            <code lang="VB">
            ' setup the encoder
            Dim encoder As Integer = BassEnc.BASS_Encode_Start(channel, "lame -r -x -s 44100 -b 128 -", 
                                             BASS_ENCODE_NOHEAD, Nothing, 0)
            ' setup the encoder
            BassEnc.BASS_Encode_CastInit(encoder, "server.com:8000", "password", BassEnc.BASS_ENCODE_TYPE_MP3, 
                                         "name", "url", "genre", Nothing, Nothing, 128, True)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSetTitle(System.Int32,System.String,System.String)">
            <summary>
            Sets the title of a cast stream (ANSI only).
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="title">The title to set.</param>
            <param name="url">URL to go with the title... <see langword="null"/> = no URL. This applies to Shoutcast only (not Shoutcast 2).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This overload always uses an ANSI character string to update the title/url.
            <para>The ISO-8859-1 (Latin-1) character set should be used with Shoutcast and non-Ogg Icecast servers, and UTF-8 with Shoutcast 2 and Ogg Icecast servers.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There isn't a cast set on the encoder.</description></item>
            <item><term>BASS_ERROR_TIMEOUT</term><description>The server did not respond to the request within the timeout period, as set with the BASS_CONFIG_NET_TIMEOUT config option.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSetTitle(System.Int32,System.Byte[],System.Byte[])">
            <summary>
            Sets the title of a cast stream.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="title">The encoded byte array containing the title to set.</param>
            <param name="url">The encoded byte array containing the URL to go with the title... <see langword="null"/> = no URL. This applies to Shoutcast only (not Shoutcast 2).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This overload allows you to pass an encoded byte array to update the title/url (e.g. when the server expects a specific codepage/character set).
            <para>The ISO-8859-1 (Latin-1) character set should be used with Shoutcast and non-Ogg Icecast servers, and UTF-8 with Shoutcast 2 and Ogg Icecast servers.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There isn't a cast set on the encoder.</description></item>
            <item><term>BASS_ERROR_TIMEOUT</term><description>The server did not respond to the request within the timeout period, as set with the BASS_CONFIG_NET_TIMEOUT config option.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>Sets a song title using UTF-8:
            <code lang="C#">
            Encoding utf8 = Encoding.UTF8;
            BassEnc.BASS_Encode_CastSetTitle(encoder, utf8.GetBytes(song+"\0"), null);
            </code>
            <code lang="VB">
            Dim utf8 As Encoding = Encoding.UTF8
            BassEnc.BASS_Encode_CastSetTitle(encoder, utf8.GetBytes(song+"\0"), Nothing)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSendMeta(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType,System.Byte[])">
            <summary>
            Sends metadata to a Shoutcast 2 server.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="type">The type of metadata (one of the <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType"/> values).
            This is a Shoutcast 2 message class (in bits 12 to 15) and type (bits 0 to 11) that describes what the metadata is. For example, 0x4001 is class 4 and type 1 (which would indicate a station logo in PNG format).</param>
            <param name="buffer">The metadata as an UTF-8 encoded byte array.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This method allows you to send an encoded UTF-8 byte array containing XML metadata to the server (SHOUTcast v2).
            <para>Some information on the available metadata options can be found in the Shoutcast 2 specs: <a href="http://wiki.winamp.com/wiki/SHOUTcast_2_(Ultravox_2.1)_Protocol_Details">wiki.winamp.com/wiki/SHOUTcast_2_(Ultravox_2.1)_Protocol_Details</a>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There isn't a cast set on the encoder.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSendMeta(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType,System.String)">
            <summary>
            Sends metadata to a Shoutcast 2 server.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="type">The type of metadata (one of the <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType"/> values).
            This is a Shoutcast 2 message class (in bits 12 to 15) and type (bits 0 to 11) that describes what the metadata is. For example, 0x4001 is class 4 and type 1 (which would indicate a station logo in PNG format).</param>
            <param name="xml">The XML metadata to send.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This method allows you to send an encoded UTF-8 byte array containing XML metadata to the server (SHOUTcast v2).
            <para>Some information on the available metadata options can be found in the Shoutcast 2 specs: <a href="http://wiki.winamp.com/wiki/SHOUTcast_2_(Ultravox_2.1)_Protocol_Details">wiki.winamp.com/wiki/SHOUTcast_2_(Ultravox_2.1)_Protocol_Details</a>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There isn't a cast set on the encoder.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastGetStatsPtr(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeStats,System.String)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="type"></param>
            <param name="pass"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastGetStats(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeStats,System.String)">
            <summary>
            Retrieves stats from the Shoutcast or Icecast server.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="type">The type of stats to retrieve. One of the following (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncodeStats"/>):
            <list type="table">
            <item><term>BASS_ENCODE_STATS_SHOUT</term><description>Shoutcast stats, including listener information and additional server information.</description></item>
            <item><term>BASS_ENCODE_STATS_ICE</term><description>Icecast mount-point listener information.</description></item>
            <item><term>BASS_ENCODE_STATS_ICESERV</term><description>Icecast server stats, including information on all mount points on the server.</description></item>
            </list>
            </param>
            <param name="pass">Password when retrieving Icecast server stats... <see langword="null"/> = use the password provided in the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/> call.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The stats are returned in XML format.
            <para>Each encoder has a single stats buffer, which is reused by each call of this function for the encoder. 
            So if the data needs to be retained across multiple calls, it should be copied to another buffer.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There isn't a cast of the requested type set on the encoder.</description></item>
            <item><term>BASS_ERROR_TIMEOUT</term><description>The server did not respond to the request within the timeout period, as set with the BASS_CONFIG_NET_TIMEOUT config option.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>Get the number of listeners for SHOUTcast:
            <code lang="C#">
            string stats = BassEnc.BASS_Encode_CastGetStats(encoder, 
                                   BASSEncodeStats.BASS_ENCODE_STATS_SHOUT, password);
            if (stats != null)
            {
              int start = stats.IndexOf( "&lt;CURRENTLISTENERS&gt;" );
              int end = stats.IndexOf( "&lt;/CURRENTLISTENERS&gt;" );
              if (start &gt; 0 &amp;&amp; end &gt; 0)
              {
                start += 18;
                count = int.Parse( stats.Substring(start, end-start) );
              }
            }
            </code>
            <code lang="VB">
            Dim stats As String = BassEnc.BASS_Encode_CastGetStats(encoder, 
                                          BASSEncodeStats.BASS_ENCODE_STATS_SHOUT, password)
            If Not (stats Is Nothing) Then
              Dim start As Integer = stats.IndexOf("&lt;CURRENTLISTENERS&gt;")
              Dim [end] As Integer = stats.IndexOf("&lt;/CURRENTLISTENERS&gt;")
              If start &gt; 0 AndAlso end &gt; 0 Then
                start += 18
                count = Integer.Parse(stats.Substring(start, end - start))
              End If
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerInit(System.Int32,System.String,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeServer,Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC,System.IntPtr)">
            <summary>
            Initializes a server to send an encoder's output to connecting clients.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="port">The IP address and port number to accept client connections on... "xxx.xxx.xxx.xxx:port", <see langword="null"/> = an available port on all local addresses.
            The IP address should be local and the port number should be lower than 65536. If the address is "0.0.0.0" or omitted, then the server will accept connections on all local addresses.
            If the port is "0" or omitted, then an available port will be assigned.</param>
            <param name="buffer">The server's buffer length in bytes.</param>
            <param name="burst">The amount of buffered data to send to new clients. This will be capped at the size of the buffer.</param>
            <param name="flags">A combination of these flags:
            <list type="table">
            <item><term>BASS_ENCODE_SERVER_NOHTTP</term><description>Do not read or send HTTP headers.</description></item>
            <item><term>BASS_ENCODE_SERVER_SSL</term><description>Support SSL/TLS encryption but also allow unencrypted connections. This requires the OpenSSL library.</description></item>
            <item><term>BASS_ENCODE_SERVER_SSLONLY</term><description>Require SSL/TLS encryption. This requires the OpenSSL library.</description></item>
            </list>
            </param>
            <param name="proc">Callback function to receive notification of clients connecting and disconnecting... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new server's port number is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function allows remote (or local) clients to receive the encoder's output by setting up a TCP server for them to connect to, using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> for example. 
            Connections can be refused by the <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC"/> callback function, and already connected clients can be kicked with the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerKick(System.Int32,System.String)"/> function.</para>
            <para>The server buffers the data that it receives from the encoder, and the data is then sent from the buffer to the connected clients. The buffer should be at least big enough to account for the time that it takes for the clients to receive the data. If a client falls too far behind (beyond the buffer length), it will miss some data. When a client connects, buffered data can be "burst" to the client, allowing it to prebuffer and begin playback more quickly. If a speed cap is set (in the <paramref name="buffer"/> parameter), that will limit the burst speed.</para>
            <para>An encoder needs to be started, but with no data yet sent to it, before using this function to setup the server. If <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> is used, the encoder should be setup to write its output to STDOUT. Due to the length restrictions of WAVE headers/files, the encoder should also be started with the BASS_ENCODE_NOHEAD flag, and the sample format details sent via the command-line.</para>
            <para>Normally, BASSenc will produce the encoded data (with the help of an encoder) that is sent to a clients, but it is also possible to send already encoded data (without first decoding and re-encoding it) via the PCM encoding option.
            The encoder can be set on any BASS channel, as rather than feeding on sample data from the channel, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> would be used to feed in the already encoded data. BASSenc does not know what the data's bitrate is in that case, so it is up to the user to process the data at the correct rate (real-time speed).</para>
            <papa>SSL/TLS encryption requires the OpenSSL library (libssl) or compatible. A filename for that can be specified via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_LIBSSL"/> config option. If that is unset or fails to load then BASSenc will check if an OpenSSL library has already been loaded into the process with global scope and use that, and if that fails too then it will try some standard filenames for the library (see platform-specific notes below). A certificate and private key are also required, and can be set via the BASS_CONFIG_ENCODE_SERVER_CERT and <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_SERVER_KEY"/> config options, respectively. If there already is a server on the same port then its certificate and key will be used by the new server too, regardless of those config settings.</papa>
            <para>Chained OGG streams are supported, which can be used for metadata updates. The server also supports Shoutcast metadata with any audio format, but Shoutcast traditionally only supports MP3 or AAC encoding, so some players might not read the metadata with other formats. BASS (eg. <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>) does support Shoutcast metadata with any audio format.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>There is already a server set on the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="port"/> is not valid.</description></item>
            <item><term>BASS_ERROR_BUSY</term><description>The port is in use.</description></item>
            <item><term>BASS_ERROR_SSL</term><description>The OpenSSL library could not be loaded or initialized.</description></item>
            <item><term>BASS_ERROR_SERVER_CERT</term><description>The SSL certificate and/or key files are missing or invalid.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The default OpenSSL library filenames checked (in order of preference) on Linux are libssl.so, libssl.so.1.1, libssl.so.10, libssl.so.1.0.0. 
            On Windows, it is bass_ssl.dll (BASS_SSL add-on), libssl-1_1.dll(or libssl-1_1-x64.dll if 64-bit), ssleay32.dll. On macOS, it is libssl.0.9.8.dylib.
            On Android, it is libbass_ssl.so(BASS_SSL add-on), libssl.so, libboringssl.so. The BASS_SSL add-on is available for Windows and Android from the BASS website. The BASS_CONFIG_LIBSSL config option is normally only available on Linux and Android but BASSenc adds support for it on other platforms too.</para>
            <para>This function is not available on Windows CE.</para>
            </remarks>
            <example>
            Start encoding a stereo 44100Hz channel to 128kb/s MP3, and start a server on port 8000 with a fully burstable 4 second (64KB) buffer:
            <code lang="C#">
            // setup the encoder
            int encoder = BassEnc.BASS_Encode_Start(channel, "lame -r -s 44100 -b 128 -", 
                                                    BASSEncode.BASS_ENCODE_NOHEAD, null, IntPtr.Zero);
            // start the server
            BassEnc.BASS_Encode_ServerInit(encoder, "8000", 64000, 64000, 
                                           BASSEncodeServer.BASS_ENCODE_SERVER_DEFAULT, null, IntPtr.Zero);
            </code>
            Start encoding a stereo 44100Hz channel to 160kb/s OGG, and start a server on any available port on the loopback address (127.0.0.1) with a fully burstable 2 second (40KB) buffer:
            <code lang="C#">
            // setup the encoder
            int encoder = BassEnc.BASS_Encode_Start(channel, "oggenc -r -R 44100 -M 160 -m 160 -", 
                                                    BASSEncode.BASS_ENCODE_NOHEAD, null, IntPtr.Zero);
            // start the server
            BassEnc.BASS_Encode_ServerInit(encoder, "127.0.0.1", 40000, 40000, 
                                           BASSEncodeServer.BASS_ENCODE_SERVER_DEFAULT, null, IntPtr.Zero);
            </code>
            Setup PCM encoding on a dummy stream to feed pre-encoded data to a server on port 8000 with a 64KB buffer:
            <code lang="C#">
            // create a dummy stream to host the encoder
            int dummy = Bass.BASS_StreamCreateDummy(44100, 1, BASSFlag.BASS_STREAM_DECODE, IntPtr.Zero);
            // setup the encoder
            int encoder = BassEnc.BASS_Encode_Start(dummy, null, 
                                                    BASSEncode.BASS_ENCODE_PCM | BASSEncode.BASS_ENCODE_NOHEAD, 
                                                    null, IntPtr.Zero);
            // start the server
            int port = BassEnc.BASS_Encode_ServerInit(encoder, "8000", 64000, 64000, 
                                                      BASSEncodeServer.BASS_ENCODE_SERVER_DEFAULT, null, IntPtr.Zero);
            ...
            // feed encoded data to the encoder/server (repeat periodically)
            BassEnc.BASS_Encode_Write(encoder, data, length);
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerKick(System.Int32,System.String)">
            <summary>
            Kicks clients from a server.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="client">The address of the client(s) to kick... NULL (or empty string) = all clients. This should be an IPv4 or IPv6 address, optionally with a port number or netmask. If a port is not specified then all ports connected from the IP address are kicked. A netmask may be specified in CIDR notation to kick a block of IP addresses.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The clients may not be kicked immediately, but shortly after the call. If the server has been setup with an <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC"/> callback function, that will receive notification of the disconnections.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No matching clients were found.</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>This function is not available on Windows CE.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BassEnc.BASSENCVERSION">
            <summary>
            Current BASSenc version (without minor revision).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_ENCODE_TYPE_MP3">
            <summary>
            <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/> content MIME type for MP3
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_ENCODE_TYPE_OGG">
            <summary>
            <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/> content MIME type for OGG (FLAC_OGG or OPUS)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_ENCODE_TYPE_AAC">
            <summary>
            <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/> content MIME type for AAC
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSenc from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassEnc.LoadMe();
            ...
            // when not used anymore...
            BassEnc.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSenc from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassEnc.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassEnc.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.BassEnc.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.BASSEncode">
            <summary>
            BASS Encode Start flags for use with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_DEFAULT">
            <summary>
            Default option, incl. wave header, little-endian and no FP conversion.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_NOHEAD">
            <summary>
            Do NOT send a WAV header to the encoder.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_FP_8BIT">
            <summary>
            Convert floating-point sample data to 8-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_FP_16BIT">
            <summary>
            Convert floating-point sample data to 16-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_FP_24BIT">
            <summary>
            Convert floating-point sample data to 24-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_FP_32BIT">
            <summary>
            Convert floating-point sample data to 32-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_FP_AUTO">
            <summary>
            Convert floating-point sample data back to channel's format
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_BIGEND">
            <summary>
            Big-Endian sample data.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_PAUSE">
            <summary>
            Start the encoder paused.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_PCM">
            <summary>
            Write PCM sample data (no encoder).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_RF64">
            <summary>
            Write RF64 WAV header (no encoder).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_MONO">
            <summary>
            Convert to mono (if not already).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_QUEUE">
            <summary>
            Queue data to feed encoder asynchronously.
            <para>The queue buffer will grow as needed to fit the data, but its size can be limited by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_QUEUE"/> config option (0 = no limit); the default is 10000ms.
            If the queue reaches the size limit and data is lost, the <see cref="F:Un4seen.Bass.AddOn.Enc.BASSEncodeNotify.BASS_ENCODE_NOTIFY_QUEUE_FULL"/> notification will be triggered.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_WFEXT">
            <summary>
            Send the sample format information to the encoder in WAVEFORMATEXTENSIBLE form instead of WAVEFORMATEX form.
            <para>This flag is ignored if the BASS_ENCODE_NOHEAD flag is used.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_CAST_NOLIMIT">
            <summary>
            Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.
            <para>With this option you might disable the rate limiting during casting (as it'll be limited by the playback rate anyway if the source channel is being played).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_LIMIT">
            <summary>
            Limit data rate to real-time.
            <para>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns.
            Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_AIFF">
            <summary>
            Send an AIFF header to the encoder instead of a WAVE header.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_DITHER">
            <summary>
            Apply dither when converting floating-point sample data to integer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_AUTOFREE">
            <summary>
            Free the encoder when the channel is freed.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_FLAC_NOCOUNT">
            <summary>
            BASSENC_FLAC addon flag: Do not count the encoder output to make available from BASS_Encode_GetCount (with BASS_ENCODE_COUNT_OUT). This saves a bit of processing. It also prevents casting (via BASS_Encode_CastInit) or serving (via BASS_Encode_ServerInit) the data, so it should not be used in those cases
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_FLAC_RESET">
            <summary>
            BASSENC_FLAC addon flag: Reset all settings to defaults before processing the new options, else start with the encoder's current settings. Metadata/tag settings are always reset.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_OGG_RESET">
            <summary>
            BASSENC_OGG addon flag: Reset all settings to defaults before processing the new options, else start with the encoder's current settings. Metadata/tag settings are always reset.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_OPUS_RESET">
            <summary>
            BASSENC_OPUS addon flag: Reset all settings to defaults before processing the new options, else start with the encoder's current settings. Metadata/tag settings are always reset.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_OPUS_CTLONLY">
            <summary>
            Only apply '--set-ctl-int' options without starting a new bitstream. This is ignored if BASS_ENCODE_OPUS_RESET is also specified.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_UNICODE">
            <summary>
            Cmdline is Unicode (16-bit characters).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.BASSACMFormat">
            <summary>
            ACM Format flags to be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSACMFormat.BASS_ACM_NONE">
            <summary>
            No ACM.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSACMFormat.BASS_ACM_DEFAULT">
            <summary>
            Use the format as default selection.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSACMFormat.BASS_ACM_RATE">
            <summary>
            Only list formats with same sample rate as the source channel.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSACMFormat.BASS_ACM_CHANS">
            <summary>
            Only list formats with same number of channels (eg. mono/stereo).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSACMFormat.BASS_ACM_SUGGEST">
            <summary>
            Suggest a format (HIWORD=format tag - use one of the <see cref="T:Un4seen.Bass.WAVEFormatTag"/> flags).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSACMFormat.BASS_UNICODE">
            <summary>
            Unicode (16-bit characters) option.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.BASSEncodeNotify">
            <summary>
            To be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> to receive notifications on an encoder's status.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeNotify.BASS_ENCODE_NOTIFY_ENCODER">
            <summary>
            Encoder died.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeNotify.BASS_ENCODE_NOTIFY_CAST">
            <summary>
            Cast server connection died.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeNotify.BASS_ENCODE_NOTIFY_CAST_TIMEOUT">
            <summary>
            Cast timeout.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeNotify.BASS_ENCODE_NOTIFY_QUEUE_FULL">
            <summary>
            Async encoding queue is out of space.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeNotify.BASS_ENCODE_NOTIFY_FREE">
            <summary>
            Encoder has been freed.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.BASSEncodeCount">
            <summary>
            To be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCount(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCount)"/> to define the type of count you want to get.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCount.BASS_ENCODE_COUNT_IN">
            <summary>
            Get the bytes sent to the encoder.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCount.BASS_ENCODE_COUNT_OUT">
            <summary>
            Get the bytes received from the encoder.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCount.BASS_ENCODE_COUNT_CAST">
            <summary>
            Get the bytes sent to the cast server.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCount.BASS_ENCODE_COUNT_QUEUE">
            <summary>
            Data currently in the queue, waiting to be sent to the encoder (if async encoding is enabled).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCount.BASS_ENCODE_COUNT_QUEUE_LIMIT">
            <summary>
            The queue's size limit (if async encoding is enabled).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCount.BASS_ENCODE_COUNT_QUEUE_FAIL">
            <summary>
            Data not queued due to the queue being full or out of memory (if async encoding is enabled).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCount.BASS_ENCODE_COUNT_IN_FP">
            <summary>
            Data sent to the encoder before any floating-point conversion.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType">
            <summary>
            To be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSendMeta(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType,System.Byte[],System.Int32)"/> to define the type of metadata to send.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_XML_CONTENT">
            <summary>
            SHOUTcast v2 Cacheable Metadata (Content Info Metadata).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_XML_URL">
            <summary>
            SHOUTcast v2 Cacheable Metadata (Url Metadata).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_XML_AOL">
            <summary>
            SHOUTcast v2 Cacheable Metadata (Aol Radio format).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_XML_SHOUTCAST">
            <summary>
            SHOUTcast v2 Cacheable Metadata (SHOUTcast 2.0 format).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_BIN_STATIONLOGO_JPG">
            <summary>
            SHOUTcast v2 Cacheable Binary Metadata (Station logo image/jpeg).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_BIN_STATIONLOGO_PNG">
            <summary>
            SHOUTcast v2 Cacheable Binary Metadata (Station logo image/png).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_BIN_STATIONLOGO_BMP">
            <summary>
            SHOUTcast v2 Cacheable Binary Metadata (Station logo image/bmp).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_BIN_STATIONLOGO_GIF">
            <summary>
            SHOUTcast v2 Cacheable Binary Metadata (Station logo image/gif).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_BIN_ALBUMART_JPG">
            <summary>
            SHOUTcast v2 Cacheable Binary Metadata (Album art image/jpeg).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_BIN_ALBUMART_PNG">
            <summary>
            SHOUTcast v2 Cacheable Binary Metadata (Album art image/png).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_BIN_ALBUMART_BMP">
            <summary>
            SHOUTcast v2 Cacheable Binary Metadata (Album art image/bmp).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_BIN_ALBUMART_GIF">
            <summary>
            SHOUTcast v2 Cacheable Binary Metadata (Album art image/gif).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeMetaDataType.BASS_METADATA_XML_TIME_REMAINING">
            <summary>
            SHOUTcast v2 Pass-through Metadata (Time Remaining).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.BASSEncodeStats">
            <summary>
            To be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastGetStats(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeStats,System.String)"/> to define the type of stats you want to get.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeStats.BASS_ENCODE_STATS_SHOUT">
            <summary>
            Shoutcast stats.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeStats.BASS_ENCODE_STATS_ICE">
            <summary>
            Icecast mount-point stats.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeStats.BASS_ENCODE_STATS_ICESERV">
            <summary>
            Icecast server stats.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.BASSEncodeCast">
            <summary>
            To be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/> to define optional server flags.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCast.BASS_ENCODE_CAST_DEFAULT">
            <summary>
            Default (no options).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCast.BASS_ENCODE_CAST_PUBLIC">
            <summary>
            add to public directory
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCast.BASS_ENCODE_CAST_PUT">
            <summary>
            use PUT method
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeCast.BASS_ENCODE_CAST_SSL">
            <summary>
            use SSL/TLS encryption
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.BASSEncodeServer">
            <summary>
            To be used with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerInit(System.Int32,System.String,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeServer,Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC,System.IntPtr)"/> to define optional server flags.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeServer.BASS_ENCODE_SERVER_DEFAULT">
            <summary>
            Default (no options).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeServer.BASS_ENCODE_SERVER_NOHTTP">
            <summary>
            No HTTP headers.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeServer.BASS_ENCODE_SERVER_META">
            <summary>
            Enable Shoutcast metadata.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeServer.BASS_ENCODE_SERVER_SSL">
            <summary>
            Support SSL/TLS encryption
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.BASSEncodeServer.BASS_ENCODE_SERVER_SSLONLY">
            <summary>
            Require SSL/TLS encryption
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT">
            <summary>
            The ACMFORMAT is a specialized and generic format structure. It contains the WAVEFORMATEX structure and define the format of any ACM audio data. 
            Only format information common to all ACM audio data formats are included in this structure. 
            For formats that require additional information, this structure has an additional byte[] keeping the additional information.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.ACMFORMAT.waveformatex">
            <summary>
            The <see cref="T:Un4seen.Bass.WAVEFORMATEX"/> structure that specifies the basic format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Enc.ACMFORMAT.extension">
            <summary>
            Extra format information is appended to the end of the WAVEFORMATEX structure in this array. 
            This information can be used by non-PCM formats to store extra attributes for the wFormatTag. 
            If no extra information is required by the wFormatTag, this member should be set to zero. 
            For WAVE_FORMAT_PCM formats (and only WAVE_FORMAT_PCM formats), this member is ignored.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.ACMFORMAT.#ctor">
            <summary>
            Creates an instance of a generic audio codec format and automatically determines the suggested format buffer length.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.ACMFORMAT.#ctor(System.Int32)">
            <summary>
            Creates an instance of a generic audio codec format with a given total length.
            </summary>
            <param name="length">The total lenght of the format structure (e.g. as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/> when using 0 for the formlen parameter).</param>
            <example>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.ACMFORMAT.#ctor(System.IntPtr)">
            <summary>
            Creates an instance of a generic audio codec format from the given format buffer pointer.
            </summary>
            <param name="codec">A pointer to an ACM codec format structure as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>.</param>
            <example>
            <code lang="C#">
            ACMFORMAT codec = null;
            // get the maximum codec format length
            int formlen = BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, null, BASSACMFormat.BASS_ACM_NONE);
            byte[] buffer = new byte[formlen];
            GCHandle hGC = GCHandle.Alloc( buffer, GCHandleType.Pinned );
            try
            {
              IntPtr codecPtr = hGC.AddrOfPinnedObject();
              if ( BassEnc.BASS_Encode_GetACMFormat( handle, codecPtr, formlen, title, flags) &gt; 0 )
              {
                codec = new ACMFORMAT(codecPtr);
              }
            }
            catch { codec = null; }
            finally
            {
              hGC.Free();
            }
            </code>
            <code lang="VB">
            Dim codec As ACMFORMAT = Nothing
            ' get the maximum codec format length
            Dim formlen As Integer = BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, Nothing, BASSACMFormat.BASS_ACM_NONE)
            Dim buffer(formlen - 1) As Byte
            Dim hGC As GCHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned)
            Try
              Dim codecPtr As IntPtr = hGC.AddrOfPinnedObject()
              If BassEnc.BASS_Encode_GetACMFormat(handle, codecPtr, formlen, title, flags) &gt; 0 Then
                codec = New ACMFORMAT(codecPtr)
              End If
            Catch
              codec = Nothing
            Finally
              hGC.Free()
            End Try
            </code>
            If you are into C# you might also use native pointers in an unsafe codeblock:
            <code lang="C#">
            ACMFORMAT codec = null;
            // get the maximum codec format length
            int formlen = BASS_Encode_GetACMFormat(0, IntPtr.Zero, 0, null, BASSACMFormat.BASS_ACM_NONE);
            byte[] buffer = new byte[formlen];
            unsafe
            {
              fixed (byte* p = buffer)
              {
                if ( BassEnc.BASS_Encode_GetACMFormat( handle, (IntPtr)p, formlen, title, flags) &gt; 0 )
                {
                  codec = new ACMFORMAT((IntPtr)p);
                }
              }
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.ACMFORMAT.ToString">
            <summary>
            Returns a description string for the instance members.
            </summary>
            <returns>Returns a description string for the instance members (wFormatTag, res, nSamplesPerSec, chans).</returns>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Enc.ACMFORMAT.FormatLength">
            <summary>
            Returns the total length of this instance.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.ACMFORMAT.SaveToFile(Un4seen.Bass.AddOn.Enc.ACMFORMAT,System.String)">
            <summary>
            Saves <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> codec format data to a file name.
            </summary>
            <param name="form">The <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>.</param>
            <param name="fileName">The file name to save the ACM codec format data to.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>Use <see cref="M:Un4seen.Bass.AddOn.Enc.ACMFORMAT.LoadFromFile(System.String)"/> to (re)create an instance of an <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> codec format.
            <para>This method might be usefull together with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACM(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFile(System.Int32,System.IntPtr,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)"/>
            in order to load and save predefined codec'.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Enc.ACMFORMAT.LoadFromFile(System.String)">
            <summary>
            Loads <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> codec format data from a file.
            </summary>
            <param name="fileName">The file name from where to load the ACM codec format data.</param>
            <returns>On success an instance of <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> is returned, else <see langword="null"/> is returned.</returns>
            <remarks>Use <see cref="M:Un4seen.Bass.AddOn.Enc.ACMFORMAT.SaveToFile(Un4seen.Bass.AddOn.Enc.ACMFORMAT,System.String)"/> to write the instance data of an <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> codec format to a file.
            <para>This method might be usefull together with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACM(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACMFile(System.Int32,System.IntPtr,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)"/>
            in order to load and save predefined codec's.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC">
            <summary>
            User defined callback function to process (receive) encoded sample data.
            </summary>
            <param name="handle">The encoder that the data is from (as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>).</param>
            <param name="channel">The channel that the data is from.</param>
            <param name="buffer">The pointer to the buffer containing the encoded data.</param>
            <param name="length">The number of bytes in the buffer.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>To have the encoded data received by this callback function, the encoder needs to be told to output to STDOUT (instead of a file).</para>
            <para>
            It is clever to NOT alloc any buffer data (e.g. a byte[]) everytime within the callback method, since ALL callbacks should be really fast!
            And if you would do a 'byte[] data = new byte[]' every time here...the GarbageCollector would never really clean up that memory.
            Sideeffects might occure, due to the fact, that BASS will call this callback too fast and too often...
            </para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
            <example>
            <code lang="C#">
            // the encoding callback
            private ENCODEPROC _myEndoderProc;
            private byte[] _encbuffer = new byte[1048510]; // 1MB buffer
            ...
            _myEndoderProc = new ENCODEPROC(MyEncodingWriter);
            // create the encoder (with default setting for lame)
            BassEnc.BASS_Encode_Start(channel, "lame --alt-preset standard", 
                    BASSEncode.BASS_ENCODE_DEFAULT, _myEndoderProc, IntPtr.Zero);
            Bass.BASS_ChannelPlay(channel, false); // start the channel playing &amp; encoding 
            ...
            private bool MyEncodingWriter(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
            	// copy from managed to unmanaged memory
            	Marshal.Copy(buffer, _encbuffer, 0, length);
            	// process the data in _encbuffer, e.g. write to disk or whatever
            	...
            }
            </code>
            <code lang="VB">
            Private _myEndoderProc As ENCODEPROC
            Private _encbuffer(1048510) As Byte ' 1MB buffer
            ...
            _myEndoderProc = New ENCODEPROC(AddressOf MyEncodingWriter)
            ' create the encoder (with default setting for lame)
            BassEnc.BASS_Encode_Start(channel, "lame --alt-preset standard", 
                    BASSEncode.BASS_ENCODE_DEFAULT, _myEndoderProc, IntPtr.Zero)
            Bass.BASS_ChannelPlay(channel, False)
            ' start the channel playing &amp; encoding 
            Private Function MyEncodingWriter(handle As Integer, channel As Integer, 
                                              buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              ' copy from managed to unmanaged memory
              Marshal.Copy(buffer, _encbuffer, 0, length)
              ' process the data in _encbuffer, e.g. write to disk or whatever
              ...
            End Function
            </code>
            If you are into C# you might also use native pointer access in an unsafe code block:
            <code lang="C#">
            // assuming you have created a: BinaryWriter bw = new BinaryWriter(_fs);
            private unsafe bool MyEncodingWriter(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
            	byte *data = (byte*)buffer;
            	// process the data in 'data', e.g. write to disk or whatever
            	for (int a=0; a&lt;length; a++)
                {
                  // write the received sample data to a local file
                  bw.Write( data[a] );
                }
            }
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.ENCODERPROC">
            <summary>
            User defined callback function to encode sample data. 
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="channel">The channel that the encoder is set on.</param>
            <param name="buffer">Buffer containing the sample data on input, and containing the encoded data on output.</param>
            <param name="length">The number of bytes in the buffer... -1 = the encoder is being freed (no data in the buffer).</param>
            <param name="maxout">The maximum amount of encoded data that can be placed in the buffer.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> was called.</param>
            <returns>The number of bytes of encoded data placed in buffer... -1 = stop encoding.</returns>
            <remarks>
            <para>If the encoder output exceeds the outmax value, then only the first outmax bytes should be delivered and the remainder retained. The function will be called again immediately to get the remainder.</para>
            <para>Instead of returning the data in buffer, it is also possible to provide the encoded data via <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_UserOutput(System.Int32,System.Int64,System.IntPtr,System.Int32)"/>, which also adds the ability to update previous data (eg. headers).</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.ENCODEPROCEX">
            <summary>
            User defined callback function to process (receive) encoded sample data.
            </summary>
            <param name="handle">The encoder that the data is from.</param>
            <param name="channel">The channel that the data is from.</param>
            <param name="buffer">The pointer to the buffer containing the encoded data.</param>
            <param name="length">The number of bytes in the buffer.</param>
            <param name="offset">The file offset of the data in bytes.</param>
            <param name="user">The user instance data given.</param>
            <remarks>
            <para>To have the encoded data received by this callback function, the encoder needs to be told to output to STDOUT (instead of a file).</para>
            <para>
            It is clever to NOT alloc any buffer data (e.g. a byte[]) everytime within the callback method, since ALL callbacks should be really fast!
            And if you would do a 'byte[] data = new byte[]' every time here...the GarbageCollector would never really clean up that memory.
            Sideeffects might occure, due to the fact, that BASS will call this callback too fast and too often...
            </para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC">
            <summary>
            User defined callback function to receive notifications on an encoder's status.
            </summary>
            <param name="handle">The encoder that the notification is from (as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/>).</param>
            <param name="status">The encoder's status, one of the following (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncodeNotify"/>):
            <para>BASS_ENCODE_NOTIFY_ENCODER : The encoder died.</para>
            <para>BASS_ENCODE_NOTIFY_CAST : Cast server connection died.</para>
            <para>BASS_ENCODE_NOTIFY_CAST_TIMEOUT : Cast data sending timeout. The connection is not dead at this point, it may just be a temporary problem.</para>
            <para>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 <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCount(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCount)"/>.</para>
            <para>BASS_ENCODE_NOTIFY_FREE : The encoder has been freed.</para>
            </param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>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.</para>
            <para>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 = <see langword="null"/>).</para>
            <para>If the encoder is already dead when setting up a notification callback, the callback will be triggered immediately.</para>
            <para>It is safe to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> to free an encoder from within a notification callback.</para>
            </remarks>
            <example>
            Using the callback with a recording caster:
            <code lang="C#">
            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);
            Start();
            ...
            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, "server.com:8000", "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);
                BassEnc.BASS_Encode_Stop(_encoder);
                _encoder = 0;
              }
            }
            
            private void EncoderNotify(int handle, BASSEncodeNotify status, IntPtr user)
            {
              // encoder/connection lost
              Stop();
              if (_autoreconnect)
              {
                // do auto-reconnect...
                Thread.Sleep(1000); // wait a sec
                Start();
              } 
            }
            </code>
            <code lang="VB">
            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)
            Start()
            ...
            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, "server.com:8000", "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 &lt;&gt; 0 Then
                BassEnc.BASS_Encode_SetNotify(_encoder, Nothing, IntPtr.Zero)
                BassEnc.BASS_Encode_Stop(_encoder)
                _encoder = 0
              End If
            End Sub
            
            Private Sub EncoderNotify(handle As Integer, status As BASSEncodeNotify, user As IntPtr)
              ' encoder/connection lost
              Stop()
              If _autoreconnect Then
                ' do auto-reconnect...
                Thread.Sleep(1000) ' wait a sec
                Start()
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC">
            <summary>
            User defined callback function to receive notification of client connections and disconnections, and optionally refuse connections.
            </summary>
            <param name="handle">The encoder/server that the client is connecting to or disconnecting from (as returned by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/>).</param>
            <param name="connect">The client is connecting? TRUE = connecting, FALSE = disconnecting.</param>
            <param name="client">The client's IP address and port number... "xxx.xxx.xxx.xxx:port".</param>
            <param name="headers">The request headers... <see langword="null"/> = the client is disconnecting or HTTP headers have been disabled via the BASS_ENCODE_SERVER_NOHTTP flag.
            The headers are in the same form as would be given by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>, which is a series of null-terminated strings, the final string ending with a double null.
            The request headers can optionally be replaced with response headers to send back to the client, each ending with a carriage return and line feed ("\r\n").
            The response headers should not exceed 1KB in length.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerInit(System.Int32,System.String,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeServer,Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC,System.IntPtr)"/> was called.</param>
            <returns>If the client is connecting, <see langword="false"/> means the connection is denied, otherwise it is accepted. The return value is ignored if the client is disconnecting.</returns>
            <remarks>
            <para>This function can be used to keep track of how many clients are connected, and who is connected.
            The request headers can be used to authenticate clients, and response headers can be used to pass information back to the clients.
            By default, connecting clients will be sent an "HTTP/1.0 200 OK" status line if accepted, and an "HTTP/1.0 403 Forbidden" status line if denied.
            That can be overridden in the first response header.</para>
            <para>Disconnection notifications will be received for clients that have disconnected themselves or that have been kicked by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerKick(System.Int32,System.String)"/>, but there will no notification of any clients that are disconnected by the encoder being freed.</para>
            <para>Each server has its own thread that handles new connections and sends data to its clients. The notification callbacks also come from that thread, so the callback function should avoid introducing long delays as that could result in clients missing some data and delay other clients connecting.</para>
            <para>To access the 'headers' data use one of the following utility methods:
            To read the headers use the <see cref="M:Un4seen.Bass.Utils.IntPtrToArrayNullTermAnsi(System.IntPtr)"/> helper method;
            to write to the headers use the <see cref="M:Un4seen.Bass.Utils.StringToNullTermAnsi(System.String,System.IntPtr)"/> helper method.
            </para>
            </remarks>
            <example>
            A callback function that only allows connections from the 196.168/16 network, and only 5 clients:
            <code lang="C#">
            int _listeners = 0; // client count
            
            private bool EncodeClientProc(int handle, bool connect, string client, IntPtr headers, IntPtr user)
            {
               if (connect)
               {
                   if (_listeners == 5)
                   {
                       // hit client limit
                       string[] resHeaders = new string[1] { "HTTP/1.0 403 Server Full" };
                       // set custom status
                       Utils.StringToNullTermAnsi(resHeaders, headers, true);
                       // refuse the connection
                       return false;
                   }
                   if (!client.StartsWith("192.168."))
                   {
                       // not on the 196.168/16 network
                       // refuse the connection
                       return false;
                   }
                   // increment the client count
                   _listeners++;
               }
               else
               {
                   // decrement the client count
                   _listeners--;
               }
               return true;
            }
            </code>
            A callback function that only allows connections with a particular "User-Agent" request header:
            <code lang="C#">
            private bool EncodeClientProc(int handle, bool connect, string client, IntPtr headers, IntPtr user)
            {
               if (connect)
               {
                   // get the received headers
                   string[] getHeaders = Utils.IntPtrToArrayNullTermAnsi(headers);
                   // find the User-Agent header
                   foreach (string content in getHeaders)
                   {
                       if (content.StartsWith("User-Agent:"))
                       {
                           // found the User-Agent header
                           if (content.Substring(11) != "Special Agent")
                               return false;
                           break;
                       }
                   }
               }
               return true;
            }
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac">
            <summary>
            BASS.NET API wrapper for BASSenc_FLAC.DLL
            <para>Requires: bassenc_flac.dll - Enc_FLAC Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSenc_FLAC is an extension to the BASSenc add-on that allows BASS channels 
            to be FLAC encoded, with support for FLACENC options. BASS 2.4 and BASSenc 2.4.12 or above are required.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_GetVersion">
            <summary>
            Retrieves the version number of the BASSenc_FLAC.DLL that is loaded.
            </summary>
            <returns>The BASSenc_FLAC version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_FLAC supports all the BASSenc_FLAC functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASSENCFLACVERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASSenc_FLAC.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASSenc_FLAC version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_FLAC supports all the BASSenc_FLAC functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_StartUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROCEX,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROCEX,System.IntPtr)">
            <summary>
            Sets up an FLAC encoder on a channel.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following reference FLAC encoder style options are supported:
            <para>The following reference FLAC encoder style options are supported: --ogg, --serial-number, --until, -S / --seekpoint, --no-seektable, -T / --tag, --picture, -P / --padding, --no-padding, -b / --blocksize, -V / --verify, --fast, --best, -0 / --compression-level-0 and the other compression level options. Anything else that is included will be ignored. See the FLAC documentation for details on the aforementioned options and defaults.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_FP_8BIT, BASS_ENCODE_FP_16BIT, BASS_ENCODE_FP_24BIT</term><description>When you want to encode a floating-point channel, but the encoder does not support 32-bit floating-point sample data, then you can use one of these flags to have the sample data converted to 8/16/24 bit integer data before it's passed on to the encoder. These flags are ignored if the channel's sample data isn't floating-point.</description></item>
            <item><term>BASS_ENCODE_FP_AUTO</term><description>Convert floating-point sample data back to the channel's format (8/16 bit integer) if the data is only floating-point due to the BASS_CONFIG_FLOATDSP option being enabled.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>options is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>The evenly spaced seekpoint options (with a 'x' or 's' suffix), including the 10s default spacing, are only applicable when the "--until" option is used to tell how long the encoding will be. "--until=-0" can be used for the full length of the source channel, according to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>).</para>
            <para>Tags/comments should be in UTF-8 form. This function will take care of that when the BASS_UNICODE flag is used, but otherwise you will need to make sure that any tags included in options are UTF-8 (not ISO-8859-1/etc).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--picture' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--picture' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_StartFileUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="filename"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_StartFile(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            Sets up a FLAC encoder on a channel, writing the output to a file.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following reference FLAC encoder style options are supported:
            <para>The following reference FLAC encoder style options are supported: --ogg, --serial-number, --until, -S / --seekpoint, --no-seektable, -T / --tag, --picture, -P / --padding, --no-padding, -b / --blocksize, -V / --verify, --fast, --best, -0 / --compression-level-0 and the other compression level options. Anything else that is included will be ignored. See the FLAC documentation for details on the aforementioned options and defaults.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_FP_8BIT, BASS_ENCODE_FP_16BIT, BASS_ENCODE_FP_24BIT</term><description>When you want to encode a floating-point channel, but the encoder does not support 32-bit floating-point sample data, then you can use one of these flags to have the sample data converted to 8/16/24 bit integer data before it's passed on to the encoder. These flags are ignored if the channel's sample data isn't floating-point.</description></item>
            <item><term>BASS_ENCODE_FP_AUTO</term><description>Convert floating-point sample data back to the channel's format (8/16 bit integer) if the data is only floating-point due to the BASS_CONFIG_FLOATDSP option being enabled.</description></item>
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_ENCODE_FLAC_NOCOUNT</term><description>Do not count the encoder output to make available from BASS_Encode_GetCount (with BASS_ENCODE_COUNT_OUT). This saves a bit of processing. It also prevents casting (via BASS_Encode_CastInit) or serving (via BASS_Encode_ServerInit) the data, so it should not be used in those cases.</description></item>
            <item><term>BASS_UNICODE</term><description>options is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="filename">Output filename... <see langword="null"/>=no output file.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>The evenly spaced seekpoint options (with a 'x' or 's' suffix), including the 10s default spacing, are only applicable when the "--until" option is used to tell how long the encoding will be. "--until=-0" can be used for the full length of the source channel, according to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>).</para>
            <para>Tags/comments should be in UTF-8 form. This function will take care of that when the BASS_UNICODE flag is used, but otherwise you will need to make sure that any tags included in options are UTF-8 (not ISO-8859-1/etc).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--picture' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--picture' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_NewStreamUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_NewStream(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode)">
            <summary>
            Starts a new bitstream in an Ogg FLAC encoder's output. 
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="options">The new bitstream's options. The same options as with <see cref="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROCEX,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASS_Encode_FLAC_StartFile(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)"/> are available here.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_FLAC_RESET</term><description>Reset all settings to defaults before processing the new options, else start with the encoder's current settings. Metadata/tag settings are always reset.</description></item>
            <item><term>BASS_UNICODE</term><description>options is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para>This function ends the encoder's current bitstream and starts a new one with the specified settings. This is mainly useful for metadata changes when streaming, eg. with <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerInit(System.Int32,System.String,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeServer,Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC,System.IntPtr)"/>. Unless the BASS_ENCODE_OPUS_RESET flag is specified, the new bitstream's default padding setting will be 0 (not 8192).</para>
            <para>Tags/comments should be in UTF-8 form. This function will take care of that when the BASS_UNICODE flag is used, but otherwise you will need to make sure that any tags included in options are UTF-8 (not ISO-8859-1/etc).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--picture' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--picture' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.BASSENCFLACVERSION">
            <summary>
            Current BASSenc_FLAC version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.EncFlac.BassEnc_Flac.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac">
            <summary>
            BASS.NET API wrapper for BASSenc_AAC.DLL
            <para>Requires: bassenc_aac.dll - Enc_AAC Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BassEnc_Aac is an extension to the BASSenc add-on that allows BASS channels
            to be AAC encoded. BASS 2.4 and BASSenc 2.4.12 or above are required.</para>
            <para>AAC encoding is based on the FDK AAC encoder: <a href="https://wiki.hydrogenaud.io/index.php?title=Fraunhofer_FDK_AAC">Hydrogenauio Fraunhofer FDK AAC</a></para>
            <para>AAC is patented and a licence is required to use it in commercial products. A licence can be obtained from Via: <a href="https://www.via-corp.com/licensing/aac/">www.via-corp.com/licensing</a></para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.BASS_Encode_AAC_GetVersion">
            <summary>
            Retrieves the version number of the bassenc_mp3.DLL that is loaded.
            </summary>
            <returns>The BASSenc_AAC version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_AAC supports all the BASSenc_AAC functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.BASSENCAACVERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.BASS_Encode_AAC_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the bassenc_aac.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASSenc_AAC version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_AAC supports all the BASSenc_AAC functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.BASS_Encode_AAC_StartUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROCEX,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.BASS_Encode_AAC_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROCEX,System.IntPtr)">
            <summary>
            Sets up an AAC encoder on a channel.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following FDK AAC style options are supported:
            <para>--object-type value ... 'value' can be: 2/5/23/29/39. See here for descriptions: <a href="https://wiki.hydrogenaud.io/index.php?title=Fraunhofer_FDK_AAC#VBR_Modes">Hydrogenaudo Fraunhofer FDK AAC</a></para>
            <para>--vbr value ... 'value' can be 0 (CBR) or 1-5 (VBR levels).</para>
            <para>--bitrate value ... bitrate (bps) for CBR.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            </list>
            </param>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>AAC encoding involves extensive floating-point operations, so it is not supported on platforms/architectures that do not have an FPU, eg. older ARM platforms/architectures.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--ti' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--ti' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>This function is not available on platforms/architectures without an FPU.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.BASS_Encode_AAC_StartFileUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="filename"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.BASS_Encode_AAC_StartFile(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            Sets up an AAC encoder on a channel, writing the output to a file.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following FDK AAC style options are supported:
            <para>--object-type value ... 'value' can be: 2/5/23/29/39. See here for descriptions: <a href="https://wiki.hydrogenaud.io/index.php?title=Fraunhofer_FDK_AAC#VBR_Modes">Hydrogenaudo Fraunhofer FDK AAC</a></para>
            <para>--vbr value ... 'value' can be 0 (CBR) or 1-5 (VBR levels).</para>
            <para>--bitrate value ... bitrate (bps) for CBR.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            </list>
            </param>
            <param name="filename">Output filename... <see langword="null"/>=no output file.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>MP3 encoding involves extensive floating-point operations, so it is not supported on platforms/architectures that do not have an FPU, eg. older ARM platforms/architectures.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--ti' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--ti' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>This function is not available on platforms/architectures without an FPU.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.BASSENCAACVERSION">
            <summary>
            Current BASSenc_AAC version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.EncAac.BassEnc_Aac.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3">
            <summary>
            BASS.NET API wrapper for BASSenc_MP3.DLL
            <para>Requires: bassenc_mp3.dll - Enc_MP3 Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BassEnc_Mp3 is an extension to the BASSenc add-on that allows BASS channels
            to be MP3 encoded. BASS 2.4 and BASSenc 2.4.12 or above are required.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.BASS_Encode_MP3_GetVersion">
            <summary>
            Retrieves the version number of the bassenc_mp3.DLL that is loaded.
            </summary>
            <returns>The BASSenc_MP3 version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_MP3 supports all the BASSenc_MP3 functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.BASSENCMP3VERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.BASS_Encode_MP3_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the bassenc_mp3.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASSenc_MP3 version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_MP3 supports all the BASSenc_MP3 functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.BASS_Encode_MP3_StartUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROCEX,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.BASS_Encode_MP3_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROCEX,System.IntPtr)">
            <summary>
            Sets up an MP3 encoder on a channel.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following LAME style options are supported:
            <para>-b, -B, -v, -V, -q, -m, --abr, --preset, --alt-preset, -Y, --resample, -p, -t, --tt, --ta, --tl, --ty, --tc, --tn, --tg, --ti, --tv, --add-id3v2, --id3v1-only, --id3v2-only, --pad-id3v2, --pad-id3v2-size, --noreplaygain. Anything else that is included will be ignored. See the LAME <a href="https://svn.code.sf.net/p/lame/svn/trunk/lame/USAGE">documentation</a> for details on the aforementioned options and defaults.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            </list>
            </param>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>Each tag should be in UTF-16 (as the BASS_UNICODE flag is used). Unicode tags can only be stored in ID3v2 tag blocks. An ID3v2 tags block will be added automatically when required by the tags; this can be changed in options.</para>
            <para>MP3 encoding involves extensive floating-point operations, so it is not supported on platforms/architectures that do not have an FPU, eg. older ARM platforms/architectures.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--ti' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--ti' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>This function is not available on platforms/architectures without an FPU.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.BASS_Encode_MP3_StartFileUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="filename"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.BASS_Encode_MP3_StartFile(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            Sets up an MP3 encoder on a channel, writing the output to a file.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following LAME style options are supported:
            <para>-b, -B, -v, -V, -q, -m, --abr, --preset, --alt-preset, -Y, --resample, -p, -t, --tt, --ta, --tl, --ty, --tc, --tn, --tg, --ti, --tv, --add-id3v2, --id3v1-only, --id3v2-only, --pad-id3v2, --pad-id3v2-size, --noreplaygain. Anything else that is included will be ignored. See the LAME <a href="https://svn.code.sf.net/p/lame/svn/trunk/lame/USAGE">documentation</a> for details on the aforementioned options and defaults.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            </list>
            </param>
            <param name="filename">Output filename... <see langword="null"/>=no output file.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>Each tag should be in UTF-16 (as the BASS_UNICODE flag is used). Unicode tags can only be stored in ID3v2 tag blocks. An ID3v2 tags block will be added automatically when required by the tags; this can be changed in options.</para>
            <para>MP3 encoding involves extensive floating-point operations, so it is not supported on platforms/architectures that do not have an FPU, eg. older ARM platforms/architectures.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--ti' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--ti' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>This function is not available on platforms/architectures without an FPU.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.BASSENCMP3VERSION">
            <summary>
            Current BASSenc_MP3 version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.EncMp3.BassEnc_Mp3.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg">
            <summary>
            BASS.NET API wrapper for BASSenc_OGG.DLL
            <para>Requires: bassenc_ogg.dll - Enc_OGG Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSenc_OGG is an extension to the BASSenc add-on that allows BASS channels 
            to be Ogg Vorbis encoded, with support for OGGENC options. BASS 2.4 and BASSenc 2.4.12 or above are required.</para>
            <para>Ogg Vorbis encoding is based on libogg/vorbis, Copyright(c) 2002-2015 Xiph.org Foundation.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_GetVersion">
            <summary>
            Retrieves the version number of the BASSenc_OGG.DLL that is loaded.
            </summary>
            <returns>The BASSenc_OGG version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_OGG supports all the BASSenc_OGG functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASSENCOGGVERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASSenc_OGG.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASSenc_OGG version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_OGG supports all the BASSenc_OGG functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_StartUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)">
            <summary>
            Sets up an Ogg Vorbis encoder on a channel.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following OGGENC style options are supported:
            <para>The following OGGENC style options are supported: -b / --bitrate, -m / --min-bitrate, -M / --max-bitrate, -q / --quality, -s / --serial, -t / --title, -a / --artist, -G / --genre, -d / --date, -l / --album, -N / --tracknum, -c / --comment. Anything else that is included will be ignored. See the OGGENC documentation for details on the aforementioned options and defaults.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>options is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="proc">Callback function to receive the sample data and return the encoded data.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>Tags/comments should be in UTF-8 form. This function will take care of that when the BASS_UNICODE flag is used, but otherwise you will need to make sure that any tags included in options are UTF-8 (not ISO-8859-1/etc).</para>
            <para>Ogg Vorbis encoding involves extensive floating-point operations, so it is not supported on platforms/architectures that do not have an FPU, eg. older ARM platforms/architectures.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--picture' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--picture' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_StartFileUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="filename"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_StartFile(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            Sets up an Ogg Vorbis encoder on a channel, writing the output to a file.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following OGGENC style options are supported:
            <para>The following OGGENC style options are supported: -b / --bitrate, -m / --min-bitrate, -M / --max-bitrate, -q / --quality, -s / --serial, -t / --title, -a / --artist, -G / --genre, -d / --date, -l / --album, -N / --tracknum, -c / --comment. Anything else that is included will be ignored. See the OGGENC documentation for details on the aforementioned options and defaults.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>options and filename are in UTF-16 form. Otherwise options should be UTF-8 on all platforms, and filename should be ANSI on Windows and UTF-8 on other platforms. (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="filename">Output filename... <see langword="null"/>=no output file.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>Tags/comments should be in UTF-8 form. This function will take care of that when the BASS_UNICODE flag is used, but otherwise you will need to make sure that any tags included in options are UTF-8 (not ISO-8859-1/etc).</para>
            <para>Ogg Vorbis encoding involves extensive floating-point operations, so it is not supported on platforms/architectures that do not have an FPU, eg. older ARM platforms/architectures.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--picture' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--picture' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_NewStreamUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_NewStream(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode)">
            <summary>
            Starts a new bitstream in an Ogg Vorbis encoder's output.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="options">The new bitstream's options. The same options as with <see cref="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASS_Encode_OGG_StartFile(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)"/> are available here.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_OGG_RESET</term><description>Reset all settings to defaults before processing the new options, else start with the encoder's current settings. Metadata/tag settings are always reset.</description></item>
            <item><term>BASS_UNICODE</term><description>options is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para>This function ends the encoder's current bitstream and starts a new one with the specified settings. This is mainly useful for metadata changes when streaming, eg. with BASS_Encode_ServerInit. Starting a new bitstream involves writing new headers, which can be quite large (usually around 4KB), so new bitstreams should not be used too frequently to avoid excessive overhead.</para>
            <para>Tags/comments should be in UTF-8 form. This function will take care of that when the BASS_UNICODE flag is used, but otherwise you will need to make sure that any tags included in options are UTF-8 (not ISO-8859-1/etc).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--picture' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--picture' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.BASSENCOGGVERSION">
            <summary>
            Current BASSenc_OGG version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.EncOgg.BassEnc_Ogg.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus">
            <summary>
            BASS.NET API wrapper for BASSenc_OPUS.DLL
            <para>Requires: bassenc_opus.dll - Enc_OPUS Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSenc_OPUS is an extension to the BASSenc add-on that allows BASS channels
            to be Opus encoded, with support for OPUSENC options. BASS 2.4 and BASSenc 2.4.12 or above are required.</para>
            <para>Opus encoding is based on libOpus, Copyright 2001-2011 Xiph.Org,
            Skype Limited, Octasic, Jean-Marc Valin, Timothy B.Terriberry,
            CSIRO, Gregory Maxwell, Mark Borgerding, Erik de Castro Lopo.
            And libSpeexDSP, Copyright 2002-2008 Xiph.Org, Jean-Marc Valin.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_GetVersion">
            <summary>
            Retrieves the version number of the BASSenc_OPUS.DLL that is loaded.
            </summary>
            <returns>The BASSenc_OPUS version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_OPUS supports all the BASSenc_OPUS functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASSENCOPUSVERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASSenc_OPUS.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASSenc_OPUS version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASSenc_OPUS supports all the BASSenc_OPUS functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_StartUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)">
            <summary>
            Sets up an Opus encoder on a channel.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following OPUSENC style options are supported:
            <para>--bitrate, --vbr, --cvbr, --hard-cbr, --comp / --complexity, --framesize, --expect-loss, --max-delay, --comment, --artist, --title, --album, --tracknumber, --date, --genre, --picture, --padding, --serial, --set-ctl-int. Anything else that is included will be ignored. See the OPUSENC <a href="https://opus-codec.org/docs/opus-tools/opusenc.html">documentation</a> for details on the aforementioned options and defaults.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>options is in UTF-16 form. Otherwise it should be UTF-8. (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="proc">Callback function to receive the sample data and return the encoded data.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>Tags/comments should be in UTF-8 form. This function will take care of that when the BASS_UNICODE flag is used, but otherwise you will need to make sure that any tags included in options are UTF-8 (not ISO-8859-1/etc).</para>
            <para>On Windows and Linux, an SSE supporting CPU is required for sample rates other than 48000/24000/16000/12000/8000 Hz.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--picture' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--picture' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_StartFileUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <param name="filename"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_StartFile(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)">
            <summary>
            Sets up an Ogg Vorbis encoder on a channel, writing the output to a file.
            <para>This overload implements UNICODE options. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="options">Encoder options... <see langword="null"/>=use defaults.
            The following OPUSENC style options are supported:
            <para>--bitrate, --vbr, --cvbr, --hard-cbr, --comp / --complexity, --framesize, --expect-loss, --max-delay, --comment, --artist, --title, --album, --tracknumber, --date, --genre, --picture, --padding, --serial, --set-ctl-int. Anything else that is included will be ignored. See the OPUSENC <a href="https://opus-codec.org/docs/opus-tools/opusenc.html">documentation</a> for details on the aforementioned options and defaults.</para>
            </param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents the data source (DSP system or BASS_Encode_Write call) getting blocked by the encoder, but if data is queud more quickly than the encoder can process it, that could result in lost data.</description></item>
            <item><term>BASS_ENCODE_LIMIT</term><description>Limit the data rate to real-time speed, by introducing a delay when the rate is too high. With BASS 2.4.6 or above, this flag is ignored when the encoder is fed in a playback buffer update cycle (including <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> calls), to avoid possibly causing playback buffer underruns. Except for in those instances, this flag is applied automatically when the encoder is feeding a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_CAST_NOLIMIT</term><description>Don't limit the data rate (to real-time speed) when sending to a Shoutcast or Icecast server.</description></item>
            <item><term>BASS_ENCODE_PAUSE</term><description>Start the encoder paused.</description></item>
            <item><term>BASS_ENCODE_AUTOFREE</term><description>Automatically free the encoder when the source channel is freed.</description></item>
            <item><term>BASS_UNICODE</term><description>options and filename are in UTF-16 form. Otherwise options should be UTF-8 on all platforms, and filename should be ANSI on Windows and UTF-8 on other platforms. (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="filename">Output filename... <see langword="null"/>=no output file.</param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para><see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartUser(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODERPROC,System.IntPtr)"/> is used internally to apply the encoder to the source channel, so the remarks in its documentation also apply to this function.</para>
            <para>Tags/comments should be in UTF-8 form. This function will take care of that when the BASS_UNICODE flag is used, but otherwise you will need to make sure that any tags included in options are UTF-8 (not ISO-8859-1/etc).</para>
            <para>On Windows and Linux, an SSE supporting CPU is required for sample rates other than 48000/24000/16000/12000/8000 Hz.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--picture' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--picture' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_NewStreamUnicode(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="options"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_NewStream(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode)">
            <summary>
            Starts a new bitstream in an Opus encoder's output. 
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="options">The new bitstream's options. The same options as with <see cref="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASS_Encode_OPUS_StartFile(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,System.String)"/> are available here.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/>):
            <list type="table">
            <item><term>BASS_ENCODE_OPUS_RESET</term><description>Reset all settings to defaults before processing the new options, else start with the encoder's current settings. Metadata/tag settings are always reset.</description></item>
            <item><term>BASS_ENCODE_OPUS_CTLONLY</term><description>Only apply '--set-ctl-int' options without starting a new bitstream. This is ignored if BASS_ENCODE_OPUS_RESET is also specified.</description></item>
            <item><term>BASS_UNICODE</term><description>options is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <returns>The encoder handle is returned if the encoder is successfully started, else 0 is returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para>This function ends the encoder's current bitstream and starts a new one with the specified settings. This is mainly useful for metadata changes when streaming, eg. with BASS_Encode_ServerInit. Starting a new bitstream involves writing new headers, which can be quite large (usually around 4KB), so new bitstreams should not be used too frequently to avoid excessive overhead.</para>
            <para>Tags/comments should be in UTF-8 form. This function will take care of that when the BASS_UNICODE flag is used, but otherwise you will need to make sure that any tags included in options are UTF-8 (not ISO-8859-1/etc).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's sample format is not supported by the encoder.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="options"/> contains an invalid setting.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>A '--picture' option file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>A '--picture' option file has an invalid format. It needs to be JPEG, PNG, or GIF.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.BASSENCOPUSVERSION">
            <summary>
            Current BASSenc_OPUS version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.EncOpus.BassEnc_Opus.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Flac.BassFlac">
            <summary>
            BASS.NET API wrapper for BASSFLAC.DLL
            <para>Requires: bassflac.dll - Free Lossless Audio Codec (FLAC) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSFLAC is an extension to the BASS audio library, enabling the playing of FLAC (Free Lossless Audio Codec) encoded files.</para>
            <para>The FLAC format is used in very much the same way as any of the built-in BASS stream formats - simply call the FLAC stream creation function instead of the BASS built-in functions. The BASS plugin system (see <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>) is also supported.</para>
            <para>More information can be found on <a href="http://flac.sourceforge.net">flac.sourceforge.net</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.BASS_FLAC_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.BASS_FLAC_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a FLAC file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.BASS_FLAC_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.BASS_FLAC_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a FLAC memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.BASS_FLAC_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a FLAC file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.BASS_FLAC_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.BASS_FLAC_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.BASS_FLAC_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from a FLAC file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Flac.BassFlac.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bassflac.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Flac.BassFlac.SupportedStreamName">
            <summary>
            Supported file format name of the bassflac.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Flac.BassFlac.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Flac.BassFlac.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Flac.BassFlac.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BassFx">
            <summary>
            BASS.NET API wrapper for BASS_FX.DLL
            <para>Requires: bass_fx.dll - DSP and Effect support Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_FX is an extension to the BASS audio library, providing a complete set of DSP functions to start programming your own DJ software. 
            Programmed to enable the simple and even the advanced programmers/users to have in their programs some sound effects without knowing any DSP at all.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_GetVersion">
            <summary>
            Retrieves the version number of the BASS_FX.DLL that is loaded.
            </summary>
            <returns>The BASS_FX version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASS_FX supports all the BASS_FX functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.Fx.BassFx.BASSFXVERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            Checking the major version only:
            <code lang="C#">
            if ( Utils.HighWord(BassFx.BASS_FX_GetVersion()) != BassFx.BASSFXVERSION )
            {
              MessageBox.Show(this, "Wrong BassFx Version!");
            }
            </code>
            <code lang="VB">
            If Utils.HighWord(BassFx.BASS_FX_GetVersion()) &lt;&gt; BassFx.BASSFXVERSION Then
              MessageBox.Show(Me, "Wrong BassFx Version!")
            End If
            </code>
            Checking for full version "2.4.1.3":
            <code>
            if (BassFx.BASS_FX_GetVersion() &lt; Utils.MakeLong(0x0103, 0x0204))
            {
              MessageBox.Show(this, "Wrong BassFx Version!");
            }
            </code>
            <code lang="VB">
            If BassFx.BASS_FX_GetVersion() &lt; Utils.MakeLong(&amp;H103, &amp;H204) Then
              MessageBox.Show(Me, "Wrong BassFx Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASS_FX.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASS_FX version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASS_FX supports all the BASS_FX functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            <code lang="C#">
            Version expectedVersion = new Version(2, 4);
            if (BassFx.BASS_FX_GetVersion(2) &lt; expectedVersion)
            {
              MessageBox.Show( this, "Wrong BassFx Version!" );
            }
            </code>
            <code lang="VB">
            Dim expectedVersion As New Version(2, 4)
            If BassFx.BASS_FX_GetVersion(2) &lt; expectedVersion Then
              MessageBox.Show(Me, "Wrong BassFx Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoCreate(System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a resampling stream from a decoding channel.
            </summary>
            <param name="channel">Stream/music/wma/cd/any other supported add-on format using a decoding channel (use BASS_STREAM_DECODE when creating the channel).</param>
            <param name="flags">A combination of the following flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_LOOP</term><description>Looped? Note that only complete sample loops are allowed by DirectSound (ie. you can't loop just part of a sample).</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the sample to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D samples must be mono (use BASS_SAMPLE_MONO).</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>Requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the stream.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_FX_FREESOURCE</term><description>Free the source handle as well when the tempo channel is freed.</description></item>
            <item><term>BASS_FX_TEMPO_ALGO_LINEAR</term><description>Uses a linear interpolation mode (simple).</description></item>
            <item><term>BASS_FX_TEMPO_ALGO_CUBIC</term><description>Uses a cubic interpolation mode (recommended, default).</description></item>
            <item><term>BASS_FX_TEMPO_ALGO_SHANNON</term><description>Uses a 8-tap band-limited Shannon interpolation (complex, but not much better than cubic).</description></item>
            </list>
            </param>
            <returns>If successful, the tempo stream handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Multi-channels are supported.</para>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>/<see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/> to get or set the attributes of a tempo stream:
            <list type="table">
            <item><term>BASS_ATTRIB_TEMPO</term><description>The tempo of a channel in percent [-95%...0...+5000%].</description></item>
            <item><term>BASS_ATTRIB_TEMPO_PITCH</term><description>The pitch of a channel in semitones [-60...0...+60].</description></item>
            <item><term>BASS_ATTRIB_TEMPO_FREQ</term><description>The sample rate of a channel in Hz (but calculates by the same % as BASS_ATTRIB_TEMPO).</description></item>
            </list>
            These attributes can either be applied to the tempo channel or the underlying decoding source channel.
            </para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="channel"/> is not valid.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description>The <paramref name="channel"/> is not a decoding channel. Make sure the channel was created using the BASS_STREAM_DECODE or BASS_MUSIC_DECODE flag.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The <paramref name="channel"/>'s format is not supported. Make sure the channel is either Stereo or Mono.</description></item>
            </list>
            </para>
            <para>Tuning the option attributes parameters (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>):</para>
            <para>The time-stretch algorithm has few parameters that can be tuned to optimize sound quality for certain application. The current default parameters have been chosen by iterative if-then analysis (read: "trial and error") to obtain best subjective sound quality in pop/rock music processing, but in applications processing different kind of sound the default parameter set may result into a sub-optimal result.</para>
            <list type="bullet">
            <item>
            <description><see cref="T:Un4seen.Bass.BASSAttribute">BASS_ATTRIB_TEMPO_OPTION_USE_AA_FILTER</see> (default = <see langword="true"/>):
            <para>Use FIR low-pass (anti-alias) filter (gain speed, lose quality)? : <see langword="true"/>=1 / <see langword="false"/>=0.</para>
            </description>
            </item>
            <item>
            <description><see cref="T:Un4seen.Bass.BASSAttribute">BASS_ATTRIB_TEMPO_OPTION_AA_FILTER_LENGTH</see> (default = 32):
            <para>The FIR low-pass (anti-alias) filter length in taps: between 8 and 128 (should be around %4).</para>
            </description>
            </item>
            <item>
            <description><see cref="T:Un4seen.Bass.BASSAttribute">BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO</see> (default = <see langword="false"/>):
            <para>Use quicker tempo change algorithm (gain speed, lose quality)? <see langword="true"/>=1 / <see langword="false"/>=0.</para>
            </description>
            </item>
            <item>
            <description><see cref="T:Un4seen.Bass.BASSAttribute">BASS_ATTRIB_TEMPO_OPTION_SEQUENCE_MS</see> (default = 82):
            <para>This is the default length of a single processing sequence in milliseconds which determines the how the original sound is chopped in the time-stretch algorithm. Larger values mean fewer sequences are used in processing. In principle a larger value sounds better when slowing down the tempo, but worse when increasing the tempo and vice versa.</para>
            </description>
            </item>
            <item>
            <description><see cref="T:Un4seen.Bass.BASSAttribute">BASS_ATTRIB_TEMPO_OPTION_SEEKWINDOW_MS</see> (default = 14):
            <para>The seeking window default length in milliseconds is for the algorithm that seeks the best possible overlapping location. This determines from how wide a sample "window" the algorithm can use to find an optimal mixing location when the sound sequences are to be linked back together.
            The bigger this window setting is, the higher the possibility to find a better mixing position becomes, but at the same time large values may cause a "drifting" sound artifact because neighboring sequences can be chosen at more uneven intervals. If there's a disturbing artifact that sounds as if a constant frequency was drifting around, try reducing this setting.</para>
            </description>
            </item>
            <item>
            <description><see cref="T:Un4seen.Bass.BASSAttribute">BASS_ATTRIB_TEMPO_OPTION_OVERLAP_MS</see> (default = 12):
            <para>Overlap length in milliseconds. When the sound sequences are mixed back together to form again a continuous sound stream, this parameter defines how much the ends of the consecutive sequences will overlap with each other.
            This shouldn't be that critical parameter. If you reduce the BASS_FX_TEMPO_OPTION_SEQUENCE_MS setting by a large amount, you might wish to try a smaller value on this</para>
            </description>
            </item>
            <item>
            <description><see cref="T:Un4seen.Bass.BASSAttribute">BASS_ATTRIB_TEMPO_OPTION_PREVENT_CLICK</see> (bool, default = FALSE):
            <para>Prevents clicks when changing the tempo from or over the zero position.</para>
            <para>Note: This involves a slight sound quality compromise by disallowing swapping processing stage order and affecting situations that pitch is decreased from the nominal.</para>
            </description>
            </item>
            </list>
            <para>The table below summarizes how the parameters can be adjusted for different applications:</para>
            <list type="table">
            <listheader><term>Parameter:</term><description>Effect:</description></listheader>
            <item><term>SEQUENCE_MS</term>
            <description>
            <para>Default value magnitude: Default value is relatively large, chosen for slowing down music tempo.</para>
            <para>Larger value affects: Larger value is usually better for slowing down tempo. Growing the value decelerates the "echoing" artifact when slowing down the tempo.</para>
            <para>Smaller value affects: Smaller value might be better for speeding up tempo. Reducing the value accelerates the "echoing" artifact when slowing down the tempo.</para>
            <para>Music: Default value usually good.</para>
            <para>Speech: A smaller value than default might be better.</para>
            <para>Effect in CPU burden: Increasing the parameter value reduces computation burden.</para>
            </description>
            </item>
            <item><term>SEEKWINDOW_MS</term>
            <description>
            <para>Default value magnitude: Default value is relatively large, chosen for slowing down music tempo.</para>
            <para>Larger value affects: Larger value eases finding a good mixing position, but may cause a "drifting" artifact.</para>
            <para>Smaller value affects: Smaller reduce possibility to find a good mixing position, but reduce the "drifting" artifact.</para>
            <para>Music: Default value usually good, unless a "drifting" artifact is disturbing.</para>
            <para>Speech: Default value usually good.</para>
            <para>Effect in CPU burden: Increasing the parameter value increases computation burden.</para>
            </description>
            </item>
            <item><term>OVERLAP_MS</term>
            <description>
            <para>Default value magnitude: Default value is relatively large, chosen to suit with above parameters.</para>
            <para>Larger value affects: --</para>
            <para>Smaller value affects: If you reduce the "sequence ms" setting, you might wish to try a smaller value.</para>
            <para>Music: --</para>
            <para>Speech: --</para>
            <para>Effect in CPU burden: Increasing the parameter value increases computation burden.</para>
            </description>
            </item>
            </list>
            <para>Performance Optimizations:</para>
            <list type="bullet">
            <item>
            <description>The time-stretch routine has a 'quick' mode that substantially speeds up the algorithm but may degrade the sound quality by a small amount. This mode is activated by <see cref="T:Un4seen.Bass.BASSAttribute">BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO</see> and value <see langword="true"/>=1.</description>
            </item>
            <item>
            <description>Intel SSE optimized routines are used with compatible CPUs when floating point sample type is used. SSE optimizations are currently implemented for Win32 platform only. Processors compatible with SSE extension are Intel processors starting from Pentium-III, and AMD processors starting from Athlon XP.</description>
            </item>
            <item>
            <description>AMD 3DNow! optimized routines are used with compatible CPUs when floating point sample type is used, but SSE extension isn't supported . 3DNow! optimizations are currently implemented for Win32 platform only. These optimizations are used in AMD K6-2 and Athlon (classic) CPU's; better performing SSE routines are used with AMD processor starting from Athlon XP.</description>
            </item>
            </list>
            </remarks>
            <example>
            Create a playing tempo stream out of a decoding stream and loop it:
            <code lang="C#">
            // the source channel
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE);
            // the tempo channel
            int streamFX = BassFx.BASS_FX_TempoCreate(stream, BASSFlag.BASS_FX_FREESOURCE);
            ...
            // change the sampling rate by 20%, the streamFX will be played faster
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_TEMPO_FREQ, 0.2f);
            
            // change the tempo by -15%, the streamFX will be slower
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_TEMPO, -0.15f);
            
            // change the pitch (key) by one octave (12 semitones)
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_TEMPO, 12f);
            </code>
            <code lang="VB">
            ' the source channel
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE)
            ' the tempo channel
            Dim streamFX As Integer = BassFx.BASS_FX_TempoCreate(stream, BASSFlag.BASS_FX_FREESOURCE)
            ...
            ' change the sampling rate by 20%, the streamFX will be played faster
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_TEMPO_FREQ, 0.2F)
            
            ' change the tempo by -15%, the streamFX will be slower
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_TEMPO, -0.15F)
            
            ' change the pitch (key) by one octave (12 semitones)
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_TEMPO, 12F)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoGetSource(System.Int32)">
            <summary>
            Get the source channel handle.
            </summary>
            <param name="channel">Tempo stream handle.</param>
            <returns>If successful, the source channel handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="channel"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // the source channel
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE);
            // the tempo channel
            int streamFX = BassFx.BASS_FX_TempoCreate(stream, BASSFlag.BASS_FX_FREESOURCE);
            ...
            // this will return 'stream'
            int chan = BassFx.BASS_FX_TempoGetSource(streamFX);
            </code>
            <code lang="VB">
            ' the source channel
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE)
            ' the tempo channel
            Dim streamFX As Integer = BassFx.BASS_FX_TempoCreate(stream, BASSFlag.BASS_FX_FREESOURCE)
            ...
            ' this will return 'stream'
            Dim chan As Integer = BassFx.BASS_FX_TempoGetSource(streamFX);
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoGetRateRatio(System.Int32)">
            <summary>
            Get the ratio of the resulting rate and source rate (the resampling ratio).
            </summary>
            <param name="chan">Tempo stream (or source channel) handle.</param>
            <returns>If successful, the resampling ratio is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="chan"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Will return eg. 1.2 if the samplerate was increased by 20%:
            <code lang="C#">
            float ratio = BassFx.BASS_FX_TempoGetRateRatio(streamFX);
            </code>
            <code lang="VB">
            Dim ratio As Single = BassFx.BASS_FX_TempoGetRateRatio(streamFX)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_ReverseCreate(System.Int32,System.Single,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a reversed stream from a decoding channel.
            </summary>
            <param name="channel">Stream/music/wma/cd/any other supported add-on format using a decoding channel.</param>
            <param name="dec_block">Length of decoding blocks in seconds. Larger blocks means less seeking overhead but larger spikes.</param>
            <param name="flags">A combination of the following flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_LOOP</term><description>Looped? Note that only complete sample loops are allowed by DirectSound (ie. you can't loop just part of a sample).</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the sample to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D samples must be mono (use BASS_SAMPLE_MONO).</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>Requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the stream.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_FX_FREESOURCE</term><description>Free the source handle as well when the reverse channel is freed.</description></item>
            </list>
            </param>
            <returns>If successful, the handle of the reversed stream is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>MODs are supported, if BASS_MUSIC_PRESCAN flag was applied to a source handle. Enable reverse supported flags in <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_ReverseCreate(System.Int32,System.Single,Un4seen.Bass.BASSFlag)"/> and the others to source handle. 
            <para>For better MP3/2/1 reverse playback create the source stream using the BASS_STREAM_PRESCAN flag.</para>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>/<see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/> to get or set the attributes of a reverse stream:
            <list type="table">
            <item><term>BASS_ATTRIB_REVERSE_DIR</term><description>The playback direction of a reverse channel (-1(less than 0)=reverse, 1(greater or equal 0)=forward, or use one of the <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXReverse"/> flags).</description></item>
            </list>
            These attributes can either be applied to the reverse channel or the underlying decoding source channel.
            Note, that when playing the channel reverse, the end of a reverse stream is reached at the logial beginning of the stream (this also applies to BASS_SYNC_END).
            </para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="channel"/> is not valid.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description>The <paramref name="channel"/> is not a decoding channel. Make sure the channel was created using the BASS_STREAM_DECODE or BASS_MUSIC_DECODE flag.</description></item>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="channel"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Create a reverse stream with 2 seconds decoding blocks:
            <code lang="C#">
            // the source channel
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE | 
                                                                        BASSFlag.BASS_STREAM_PRESCAN);
            // the reverse channel
            int streamFX = BassFx.BASS_FX_ReverseCreate(stream, 2f, BASSFlag.BASS_FX_FREESOURCE);
            ...
            // play the channel reverse
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_REVERSE_DIR, -1f);
            // or
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_REVERSE_DIR, (float)BASSFXReverse.BASS_FX_RVS_REVERSE);
            
            // play the channel forward
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_REVERSE_DIR, 1f);
            // or
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_REVERSE_DIR, (float)BASSFXReverse.BASS_FX_RVS_FORWARD);
            </code>
            <code lang="VB">
            ' the source channel
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE Or
                                                                                   BASSFlag.BASS_STREAM_PRESCAN)
            ' the tempo channel
            Dim streamFX As Integer = BassFx.BASS_FX_ReverseCreate(stream, 2F, BASSFlag.BASS_FX_FREESOURCE)
            ...
            ' play the channel reverse
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_REVERSE_DIR, -1F)
            ' or
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_REVERSE_DIR, CSng(BASSFXReverse.BASS_FX_RVS_REVERSE))
            
            ' play the channel forward
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_REVERSE_DIR, 1F)
            ' or
            Bass.BASS_ChannelSetAttribute(streamFX, BASSAttribute.BASS_ATTRIB_REVERSE_DIR, CSng(BASSFXReverse.BASS_FX_RVS_FORWARD))
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_ReverseGetSource(System.Int32)">
            <summary>
            Get the source channel handle of the reversed stream.
            </summary>
            <param name="channel">The handle of the reversed stream.</param>
            <returns>If successful, the handle of the source of the reversed stream is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="channel"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // the source channel
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE | 
                                                                        BASSFlag.BASS_STREAM_PRESCAN);
            // the reverse channel
            int streamFX = BassFx.BASS_FX_ReverseCreate(stream, 2f, BASSFlag.BASS_FX_FREESOURCE);
            ...
            // this will return 'stream'
            int chan = BassFx.BASS_FX_ReverseGetSource(streamFX);
            </code>
            <code lang="VB">
            ' the source channel
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE Or
                                                                                   BASSFlag.BASS_STREAM_PRESCAN)
            ' the tempo channel
            Dim streamFX As Integer = BassFx.BASS_FX_ReverseCreate(stream, 2F, BASSFlag.BASS_FX_FREESOURCE)
            ...
            ' this will return 'stream'
            Dim chan As Integer = BassFx.BASS_FX_ReverseGetSource(streamFX);
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_DecodeGet(System.Int32,System.Double,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMPROGRESSPROC,System.IntPtr)">
            <summary>
            Get the original BPM of a decoding channel.
            </summary>
            <param name="channel">Stream/music/wma/cd/any other supported add-on format using a decoding channel.</param>
            <param name="startSec">Start detecting position in seconds (if &lt;0 it uses the current position).</param>
            <param name="endSec">End detecting position in seconds (&gt; 0).</param>
            <param name="minMaxBPM">Set min &amp; max bpm, e.g: <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/>(LowWord, HighWord), LowWord=Min, HighWord=Max. 0 = defaults to 45/230.</param>
            <param name="flags">Use one of the following (see <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXBpm"/>):
            <list type="table">
            <item><term>BASS_FX_BPM_BKGRND</term><description>If in use, then you can do other stuff while detection's in process.</description></item>
            <item><term>BASS_FX_BPM_MULT2</term><description>If in use, then the detected BPM will be automatically multiplied by 2 if (BPM &lt; minBPM*2) - recommended setting.</description></item>
            <item><term>BASS_FX_FREESOURCE</term><description>Free the source handle as well?</description></item>
            </list>
            </param>
            <param name="proc">User defined function to receive the process in percents (see <see cref="T:Un4seen.Bass.AddOn.Fx.BPMPROGRESSPROC"/>), use <see langword="null"/> if not in use.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the original BPM value is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The BPM detection algorithm works by detecting repeating low-frequency (&lt;250Hz) sound patterns and thus works mostly with most rock/pop music with bass or drum beat. 
            The BPM detection doesn't work on pieces such as classical music without distinct, repeating bass frequency patterns. Also pieces with varying tempo, varying bass patterns or very complex bass patterns (jazz, hiphop) may produce odd BPM readings.</para>
            <para>In cases when the bass pattern drifts a bit around a nominal beat rate (e.g. drummer is again drunken ;-), the BPM algorithm may report incorrect harmonic one-halft to one-thirdth of the correct BPM value.
            In such case the system could for example report BPM value of 50 or 100 instead of correct BPM value of 150.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="channel"/> is not valid.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description>The <paramref name="channel"/> is not a decoding channel. Make sure the channel was created using the BASS_STREAM_DECODE or BASS_MUSIC_DECODE flag.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The <paramref name="channel"/>'s format is not supported. Make sure the channel is either Stereo or Mono.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>An illegal parameter was specified.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>BPM detection, for this <paramref name="channel"/> is already in use.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the BPM value for the first 120 seconds of a track:
            <code lang="C#">
            private BPMPROGRESSPROC _bpmProc;
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE);
            _bpmProc = new BPMPROGRESSPROC(MyBPMProc);
            float bpm = BassFx.BASS_FX_BPM_DecodeGet(stream, 0.0, 120.0, 0, BASSFXBpm.BASS_FX_BPM_BKGRND | 
                                                                            BASSFXBpm.BASS_FX_FREESOURCE | 
                                                                            BASSFXBpm.BASS_FX_BPM_MULT2, _bpmProc);
            BassFx.BASS_FX_BPM_Free(stream);
            ...
            private void MyBPMProc(int channel, float percent)
            {
              Console.Write("{0}%\r", percent);
            }
            </code>
            <code lang="VB">
            Private _bpmProc As BPMPROGRESSPROC
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE)
            _bpmProc = New BPMPROGRESSPROC(AddressOf MyBPMProc)
            Dim bpm As Single = BassFx.BASS_FX_BPM_DecodeGet(stream, 0.0, 120.0, 0, BASSFXBpm.BASS_FX_BPM_BKGRND Or 
                                                                                    BASSFXBpm.BASS_FX_FREESOURCE Or 
                                                                                    BASSFXBpm.BASS_FX_BPM_MULT2, _bpmProc)
            BassFx.BASS_FX_BPM_Free(stream)
            ...
            Private Sub MyBPMProc(channel As Integer, percent As Single)
              Console.Write("{0}%\r", percent)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatDecodeGet(System.Int32,System.Double,System.Double,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)">
            <summary>
            Enable getting Beat position in seconds of the decoded channel using a callback function.
            </summary>
            <param name="channel">Stream/music/wma/cd/any other supported add-on format using a decoding channel.</param>
            <param name="startSec">Start detecting position in seconds.</param>
            <param name="endSec">End detecting position in seconds (&gt; 0).</param>
            <param name="flags">Use one of the following (see <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXBpm"/>):
            <list type="table">
            <item><term>BASS_FX_BPM_BKGRND</term><description>If in use, then you can do other stuff while detection's in process.</description></item>
            <item><term>BASS_FX_FREESOURCE</term><description>Free the source handle as well?</description></item>
            </list>
            </param>
            <param name="proc">User defined function to receive the beat position values (see <see cref="T:Un4seen.Bass.AddOn.Fx.BPMBEATPROC"/>).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This method works pretty much the same as <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatCallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)"/> respectivly <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_DecodeGet(System.Int32,System.Double,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMPROGRESSPROC,System.IntPtr)"/> - it is almost a mix of the two of them.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="channel"/> is not valid.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description>The <paramref name="channel"/> is not a decoding channel. Make sure the channel was created using the BASS_STREAM_DECODE or BASS_MUSIC_DECODE flag.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>An illegal parameter was specified.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>Beat detection, for this <paramref name="channel"/> is already in use.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get all the beat positions of the first minute of a track:
            <code lang="C#">
            private BPMBEATPROC _beatProc;
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE);
            _beatProc = new BPMBEATPROC(MyBeatProc);
            BassFx.BASS_FX_BPM_BeatDecodeGet(stream, 0.0, 60.0, BASSFXBpm.BASS_FX_BPM_BKGRND, _beatProc, IntPtr.Zero);
            BassFx.BASS_FX_BPM_BeatFree(stream);
            ...
            private void MyBeatProc(int channel, double beatpos, IntPtr user)
            {
              Console.WriteLine("Beat at: {0}", beatpos);
            }
            </code>
            <code lang="VB">
            Private _beatProc As BPMBEATPROC
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE)
            _beatProc = New BPMBEATPROC(AddressOf MyBeatProc)
            BassFx.BASS_FX_BPM_BeatDecodeGet(stream, 0.0, 60.0, BASSFXBpm.BASS_FX_BPM_BKGRND, _beatProc, IntPtr.Zero)
            BassFx.BASS_FX_BPM_BeatFree(stream)
            ...
            Private Sub MyBeatProc(channel As Integer, beatpos As Double, user As IntPtr)
              Console.WriteLine("Beat at: {0}", beatpos)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_Translate(System.Int32,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXBpmTrans)">
            <summary>
            Translate the given BPM to FREQ/PERCENT and vice versa or multiply BPM by 2.
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <param name="val2tran">Specify a value to translate to a given option (no matter if used X2).</param>
            <param name="trans">Any of the following translation options (see <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXBpmTrans"/>):
            <list type="table">
            <item><term>BASS_FX_BPM_TRAN_X2</term><description>Multiply the original BPM value by 2. This may be used only once, and will change the original BPM as well.</description></item>
            <item><term>BASS_FX_BPM_TRAN_2FREQ</term><description>BPM value to Frequency.</description></item>
            <item><term>BASS_FX_BPM_TRAN_FREQ2</term><description>Frequency to BPM value.</description></item>
            <item><term>BASS_FX_BPM_TRAN_2PERCENT</term><description>Percents to BPM value.</description></item>
            <item><term>BASS_FX_BPM_TRAN_PERCENT2</term><description>BPM value to Percents.</description></item>
            </list>
            </param>
            <returns>If successful, the newly calculated value is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function will not detect the BPM, it will just translate the detected original BPM value of a given handle.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>An illegal parameter was specified.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>BASS_FX_BPM_TRAN_X2 already used on this handle.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            The following method does a simple translation assuming you have calculated the original BPM on a source channel:
            <code lang="C#">
            private float GetNewBPM(int sourceChannel, int tempoChannel)
            {
              return BassFx.BASS_FX_BPM_Translate(sourceChannel, 
                                                  BassFx.BASS_FX_TempoGetRateRatio(tempoChannel) * 100f, 
                                                  BASSFXBpmTrans.BASS_FX_BPM_PERCENT2);
            }
            </code>
            <code lang="VB">
            Private Function GetNewBPM(sourceChannel As Integer, tempoChannel As Integer) As Single
              Return BassFx.BASS_FX_BPM_Translate(sourceChannel, 
                                                  BassFx.BASS_FX_TempoGetRateRatio(tempoChannel) * 100F, 
                                                  BASSFXBpmTrans.BASS_FX_BPM_PERCENT2)
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_Free(System.Int32)">
            <summary>
            Frees all resources used by a given handle.
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Used together with <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_DecodeGet(System.Int32,System.Double,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMPROGRESSPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_CallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMPROC,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,System.IntPtr)"/>.
            If BASS_FX_FREESOURCE was used, this will also free the underlying decoding channel as well.
            You can't set/get this flag with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>/<see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_CallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMPROC,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,System.IntPtr)">
            <summary>
            Enable getting BPM value by period of time in seconds.
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <param name="proc">User defined function to receive the bpm value (see <see cref="T:Un4seen.Bass.AddOn.Fx.BPMPROC"/>).</param>
            <param name="period">Detection period in seconds.</param>
            <param name="minMaxBPM">Set min &amp; max bpm, e.g: <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/>(LowWord, HighWord), LowWord=Min, HighWord=Max. 0 = defaults to 45/230.</param>
            <param name="flags">Use one of the following (see <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXBpm"/>):
            <list type="table">
            <item><term>BASS_FX_BPM_MULT2</term><description>If in use, then the detected BPM will be automatically multiplied by 2 if (BPM &lt; minBPM*2) - recommended setting.</description></item>
            </list>
            </param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>An illegal parameter was specified.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>BASS_FX_BPM_TRAN_X2 already used on this handle.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Getting BPM values in periods of 10 seconds:
            <code lang="C#">
            private BPMPROC _bpmProc;
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE);
            _bpmProc = new BPMPROC(MyBPMProc);
            BassFx.BASS_FX_BPM_CallbackSet(stream, _bpmProc, 10.0, Utils.MakeLong(45,240), 
                                           BASSFXBpm.BASS_FX_BPM_MULT2, IntPtr.Zero);
            ...
            private void MyBPMProc(int handle, float bpm, IntPtr user)
            {
              Console.Write("BPM: {0}\r", bpm);
            }
            </code>
            <code lang="VB">
            Private _bpmProc As BPMPROC
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE)
            _bpmProc = New BPMPROC(MyBPMProc)
            BassFx.BASS_FX_BPM_CallbackSet(stream, _bpmProc, 10.0, Utils.MakeLong(45, 240), 
                                           BASSFXBpm.BASS_FX_BPM_MULT2, IntPtr.Zero)
            ...
            Private Sub MyBPMProc(handle As Integer, bpm As Single, user As IntPtr)
              Console.Write("BPM: {0}" + ControlChars.Cr, bpm)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_CallbackReset(System.Int32)">
            <summary>
            Reset the BPM buffers.
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function flushes the internal buffers of the BPM callback. The BPM callback is automatically reset by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, except when called from a "mixtime" <see cref="T:Un4seen.Bass.SYNCPROC"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatCallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)">
            <summary>
            Enable getting Beat position in seconds in real-time.
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <param name="proc">User defined function to receive the beat position values (see <see cref="T:Un4seen.Bass.AddOn.Fx.BPMBEATPROC"/>).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This method works on real-time (buffered) as well as on decoding channels and might also be used together with Tempo channels.
            <para><see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatFree(System.Int32)"/> must be called at the end to free the real-time beat position callback and resources.</para>
            <para>Note: You should call <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatCallbackReset(System.Int32)"/> after you have changed the position of the stream when called from a "mixtime" <see cref="T:Un4seen.Bass.SYNCPROC"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get all the beat positions of the first minute of a track:
            <code lang="C#">
            private BPMBEATPROC _beatProc;
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT);
            _beatProc = new BPMBEATPROC(MyBeatProc);
            BassFx.BASS_FX_BPM_BeatCallbackSet(stream, _beatProc, IntPtr.Zero);
            Bass.BASS_ChannelPlay(stream, false);
            ...
            private void MyBeatProc(int channel, double beatpos, IntPtr user)
            {
              Console.WriteLine("Beat at: {0}", beatpos);
            }
            </code>
            <code lang="VB">
            Private _beatProc As BPMBEATPROC
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT)
            _beatProc = New BPMBEATPROC(AddressOf MyBeatProc)
            BassFx.BASS_FX_BPM_BeatCallbackSet(stream, _beatProc, IntPtr.Zero)
            Bass.BASS_ChannelPlay(stream, False)
            ...
            Private Sub MyBeatProc(channel As Integer, beatpos As Double, user As IntPtr)
              Console.WriteLine("Beat at: {0}", beatpos)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatCallbackReset(System.Int32)">
            <summary>
            Resets the internal buffers.
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function flushes the internal buffers of the Beat callback. The Beat callback is automatically reset by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, except when called from a "mixtime" <see cref="T:Un4seen.Bass.SYNCPROC"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatSetParameters(System.Int32,System.Single,System.Single,System.Single)">
            <summary>
            Set new values for beat detection parameters.
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <param name="bandwidth">Bandwidth in Hz between 0 and samplerate/2 (-1.0f = leave current, default is 10Hz).</param>
            <param name="centerfreq">The center-frequency in Hz of the band pass filter between 0 and samplerate/2 (-1.0f = leave current, default is 90Hz).</param>
            <param name="beat_rtime">Beat release time in ms. (-1.0f = leave current, default is 20ms).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Beat detection is using a Band Pass Filter. A band-pass filter is a device that passes frequencies within a certain range and rejects (attenuates) frequencies outside that range.
            So the <paramref name="bandwidth"/> parameter defines the range around a center-frequency to include in the beat detection algo.
            The <paramref name="centerfreq"/> parameter actually defines the center-frequency of the band pass filter.
            Once a beat is detected, the <paramref name="beat_rtime"/> parameter defines the time in ms. in which no other beat will be detected after that just detected beat. 
            The background is, that often you have kind-of 'double beats' in a drum set. So the <paramref name="beat_rtime"/> should avoid, that a second (quickly repeated beat) beat is detected.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get all the beat positions of the first minute of a track:
            <code lang="C#">
            private BPMBEATPROC _beatProc;
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT);
            _beatProc = new BPMBEATPROC(MyBeatProc);
            BassFx.BASS_FX_BPM_BeatCallbackSet(stream, _beatProc, IntPtr.Zero);
            BassFx.BASS_FX_BPM_BeatSetParameters(stream, 20f, 110f, 24f);
            Bass.BASS_ChannelPlay(stream, false);
            ...
            private void MyBeatProc(int channel, double beatpos, IntPtr user)
            {
              Console.WriteLine("Beat at: {0}", beatpos);
            }
            </code>
            <code lang="VB">
            Private _beatProc As BPMBEATPROC
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT)
            _beatProc = New BPMBEATPROC(AddressOf MyBeatProc)
            BassFx.BASS_FX_BPM_BeatCallbackSet(stream, _beatProc, IntPtr.Zero)
            BassFx.BASS_FX_BPM_BeatSetParameters(stream, 20F, 240F, 24F)
            Bass.BASS_ChannelPlay(stream, False)
            ...
            Private Sub MyBeatProc(channel As Integer, beatpos As Double, user As IntPtr)
              Console.WriteLine("Beat at: {0}", beatpos)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatGetParameters(System.Int32,System.Single@,System.Single@,System.Single@)">
            <summary>
            Gets the current beat detection parameter values.
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <param name="bandwidth">Current bandwidth in Hz.</param>
            <param name="centerfreq">Current center-frequency in Hz of the band pass filter.</param>
            <param name="beat_rtime">Current beat release time in ms.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Beat detection is using a Band Pass Filter. A band-pass filter is a device that passes frequencies within a certain range and rejects (attenuates) frequencies outside that range.
            So the <paramref name="bandwidth"/> parameter defines the range around a center-frequency to include in the beat detection algo.
            The <paramref name="centerfreq"/> parameter actually defines the center-frequency of the band pass filter.
            Once a beat is detected, the <paramref name="beat_rtime"/> parameter defines the time in ms. in which no other beat will be detected after that just detected beat. 
            The background is, that often you have kind-of 'double beats' in a drum set. So the <paramref name="beat_rtime"/> should avoid, that a second (quickly repeated beat) beat is detected.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the current beat parameters:
            <code lang="C#">
            float bandwidth = 0f;
            float centerfreq = 0f;
            float beat_rtime = 0f;
            if (BassFx.BASS_FX_BPM_BeatGetParameters(stream, ref bandwidth, ref centerfreq, ref beat_rtime))
            {
              Console.WriteLine("Bandwidth={0}, Center-Freq={1}, Release-Time={2}", bandwidth, centerfreq, beat_rtime);
            }
            </code>
            <code lang="VB">
            Dim bandwidth As Single = 0F
            Dim centerfreq As Single = 0F
            Dim beat_rtime As Single = 0F
            If BassFx.BASS_FX_BPM_BeatGetParameters(stream, bandwidth, centerfreq, beat_rtime) Then
              Console.WriteLine("Bandwidth={0}, Center-Freq={1}, Release-Time={2}", bandwidth, centerfreq, beat_rtime)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatGetParameters(System.Int32,System.Object,System.Object,System.Object)">
            <summary>
            Gets the current beat parameter values.
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <param name="bandwidth">Current bandwidth in Hz (<see langword="null"/>=don't retrieve it).</param>
            <param name="centerfreq">Current center-frequency of the band pass filter in Hz (<see langword="null"/>=don't retrieve it).</param>
            <param name="beat_rtime">Current beat release time in ms. (<see langword="null"/>=don't retrieve it).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Beat detection is using a Band Pass Filter. A band-pass filter is a device that passes frequencies within a certain range and rejects (attenuates) frequencies outside that range.
            So the <paramref name="bandwidth"/> parameter defines the range around a center-frequency to include in the beat detection algo.
            The <paramref name="centerfreq"/> parameter actually defines the center-frequency of the band pass filter.
            Once a beat is detected, the <paramref name="beat_rtime"/> parameter defines the time in ms. in which no other beat will be detected after that just detected beat. 
            The background is, that often you have kind-of 'double beats' in a drum set. So the <paramref name="beat_rtime"/> should avoid, that a second (quickly repeated beat) beat is detected.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the current beat release time only:
            <code lang="C#">
            object beat_rtime = 0f;
            if (BassFx.BASS_FX_BPM_BeatGetParameters(stream, null, null, beat_rtime))
            {
              // beat_rtime must be casted back to a float
              Console.WriteLine("Release-Time={0}", (float)beat_rtime);
            }
            </code>
            <code lang="VB">
            Dim beat_rtime As Object = 0F
            If BassFx.BASS_FX_BPM_BeatGetParameters(stream, Nothing, Nothing, beat_rtime) Then
              ' beat_rtime must be casted back to a float
              Console.WriteLine("Release-Time={0}", CSng(beat_rtime))
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatFree(System.Int32)">
            <summary>
            Free all resources used by a given handle (decode or callback beat).
            </summary>
            <param name="handle">Stream/music/wma/cd/any other supported add-on format.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Used together with <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatDecodeGet(System.Int32,System.Double,System.Double,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatCallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)"/>.
            <para>Note: If the BASS_FX_FREESOURCE flag is used, this will free the source decoding channel as well. You can't set/get this flag with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BassFx.BASSFXVERSION">
            <summary>
            Current BASS_FX version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASS_FX from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassFx.LoadMe();
            ...
            // when not used anymore...
            BassFx.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASS_FX from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassFx.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassFx.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BassFx.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASSFXBpm">
            <summary>
            BASS_FX BPM/Beat options, to be used with <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_DecodeGet(System.Int32,System.Double,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMPROGRESSPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_CallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMPROC,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,System.IntPtr)"/> resp. <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatDecodeGet(System.Int32,System.Double,System.Double,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXBpm.BASS_FX_BPM_DEFAULT">
            <summary>
            Decode: No option.
            <para>Caution: when used with the Translate methods this flag would be identical to BASS_FX_BPM_X2.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXBpm.BASS_FX_BPM_BKGRND">
            <summary>
            Decode: Do the processing in a background thread.
            <para>If in use, then you can do other stuff while detection's in process.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXBpm.BASS_FX_BPM_MULT2">
            <summary>
            Decode: If in use, then will auto multiply bpm by 2 (if BPM &lt; MinBPM*2).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXBpm.BASS_FX_FREESOURCE">
            <summary>
            Decode: Free the source handle as well?
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASSFXBpmTrans">
            <summary>
            BASS_FX BPM Translation options, to be used with <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_Translate(System.Int32,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXBpmTrans)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXBpmTrans.BASS_FX_BPM_TRAN_X2">
            <summary>
            BPM Translate: Multiply the original BPM value by 2 (may be called only once &amp; will change the original BPM as well!).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXBpmTrans.BASS_FX_BPM_TRAN_2FREQ">
            <summary>
            BPM Translate: BPM value to Frequency.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXBpmTrans.BASS_FX_BPM_TRAN_FREQ2">
            <summary>
            BPM Translate: Frequency to BPM value.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXBpmTrans.BASS_FX_BPM_TRAN_2PERCENT">
            <summary>
            BPM Translate: Percents to BPM value.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXBpmTrans.BASS_FX_BPM_TRAN_PERCENT2">
            <summary>
            BPM Translate: BPM value to Percents.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASSFXReverse">
            <summary>
            BASS_FX Reverse Playback directions, to be used with the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)">BASS_ATTRIB_REVERSE_DIR</see> attribute.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXReverse.BASS_FX_RVS_REVERSE">
            <summary>
            Playing in reverse direction.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXReverse.BASS_FX_RVS_FORWARD">
            <summary>
            Playing in forward direction.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASSFXChan">
            <summary>
            DSP channels flags.
            </summary>
            <remarks>
            <para>Multi-channel order of each channel is as follows:</para>
            <list type="table">
            <item><term>3 channels</term><description>left-front, right-front, center.</description></item>
            <item><term>4 channels</term><description>left-front, right-front, left-rear/side, right-rear/side.</description></item>
            <item><term>6 channels (5.1)</term><description>left-front, right-front, center, LFE, left-rear/side, right-rear/side.</description></item>
            <item><term>8 channels (7.1)</term><description>left-front, right-front, center, LFE, left-rear/side, right-rear/side, left-rear center, right-rear center.</description></item>
            </list>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHANALL">
            <summary>
            All channels at once (as by default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHANNONE">
            <summary>
            Disable an effect for all channels (resp. set the global volume of the <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME"/> effect).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN1">
            <summary>
            left-front channel
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN2">
            <summary>
            right-front channel
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN3">
            <summary>
            Channel 3: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN4">
            <summary>
            Channel 4: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN5">
            <summary>
            Channel 5: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN6">
            <summary>
            Channel 6: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN7">
            <summary>
            Channel 7: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN8">
            <summary>
            Channel 8: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN9">
            <summary>
            Channel 9: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN10">
            <summary>
            Channel 10: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN11">
            <summary>
            Channel 11: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN12">
            <summary>
            Channel 12: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN13">
            <summary>
            Channel 13: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN14">
            <summary>
            Channel 14: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN15">
            <summary>
            Channel 15: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN16">
            <summary>
            Channel 16: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN17">
            <summary>
            Channel 17: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN18">
            <summary>
            Channel 18: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN19">
            <summary>
            Channel 19: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN20">
            <summary>
            Channel 20: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN21">
            <summary>
            Channel 21: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN22">
            <summary>
            Channel 22: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN23">
            <summary>
            Channel 23: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN24">
            <summary>
            Channel 24: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN25">
            <summary>
            Channel 25: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN26">
            <summary>
            Channel 26: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN27">
            <summary>
            Channel 27: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN28">
            <summary>
            Channel 28: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN29">
            <summary>
            Channel 29: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSFXChan.BASS_BFX_CHAN30">
            <summary>
            Channel 30: depends on the multi-channel source (see above info).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASSBFXBQF">
            <summary>
            BASS_BFX BiQuad filters. Defines within the <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF"/> structure which BiQuad filter should be used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSBFXBQF.BASS_BFX_BQF_LOWPASS">
            <summary>
            BiQuad Lowpass filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSBFXBQF.BASS_BFX_BQF_HIGHPASS">
            <summary>
            BiQuad Highpass filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSBFXBQF.BASS_BFX_BQF_BANDPASS">
            <summary>
            BiQuad Bandpass filter (constant 0 dB peak gain).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSBFXBQF.BASS_BFX_BQF_BANDPASS_Q">
            <summary>
            BiQuad Bandpass Q filter (constant skirt gain, peak gain = Q).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSBFXBQF.BASS_BFX_BQF_NOTCH">
            <summary>
            BiQuad Notch filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSBFXBQF.BASS_BFX_BQF_ALLPASS">
            <summary>
            BiQuad All-Pass filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSBFXBQF.BASS_BFX_BQF_PEAKINGEQ">
            <summary>
            BiQuad Peaking EQ filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSBFXBQF.BASS_BFX_BQF_LOWSHELF">
            <summary>
            BiQuad Low-Shelf filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASSBFXBQF.BASS_BFX_BQF_HIGHSHELF">
            <summary>
            BiQuad High-Shelf filter.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Swap/Remap/Downmix.
            </summary>
            <remarks>
            This effect mixes those channels together which are specified in the 'lChannel' array.
            Where each array element represent the target channel (0=CHAN1, 1=CHAN2 etc.) it's value represents the source channels which should be mixed together.
            If you set a BASS_BFX_CHANNONE flag on a channel, then it will be muted.
            This allows you to either downmix, remap or swap any channels with/to any channel.
            <para>Example 1: Downmix Channel 1 with Channel 5 and put it in Channel 1
            <code lang="none">
            lChannel[0] = BASSFXChan.BASS_BFX_CHAN1 | BASSFXChan.BASS_BFX_CHAN5
            </code>
            </para>
            <para>Example 2: Swap channel 1 and channel 2
            <code lang="none">
            lChannel[0] = BASSFXChan.BASS_BFX_CHAN2
            lChannel[1] = BASSFXChan.BASS_BFX_CHAN1
            </code>
            </para>
            <para>Example 3: Duplicate channel 1 to channel 2
            <code lang="none">
            lChannel[0] = BASSFXChan.BASS_BFX_CHAN1
            lChannel[1] = BASSFXChan.BASS_BFX_CHAN1
            </code>
            </para>
            <para>Example 4: Remap channel 1 so it will be in channel 2 and 3
            <code lang="none">
            lChannel[0] = BASSFXChan.BASS_BFX_CHANNONE
            lChannel[1] = BASSFXChan.BASS_BFX_CHAN1
            lChannel[2] = BASSFXChan.BASS_BFX_CHAN1
            </code>
            </para>
            <para>Example 5: Downmix 5.1 to Stereo
            <code lang="none">
            lChannel[0] = BASSFXChan.BASS_BFX_CHAN1 | BASSFXChan.BASS_BFX_CHAN3 | BASSFXChan.BASS_BFX_CHAN5
            lChannel[1] = BASSFXChan.BASS_BFX_CHAN2 | BASSFXChan.BASS_BFX_CHAN4 | BASSFXChan.BASS_BFX_CHAN6
            lChannel[2] = BASSFXChan.BASS_BFX_CHANNONE
            lChannel[3] = BASSFXChan.BASS_BFX_CHANNONE
            lChannel[4] = BASSFXChan.BASS_BFX_CHANNONE
            lChannel[5] = BASSFXChan.BASS_BFX_CHANNONE
            </code>
            </para>
            <para>Multi-channel index is as follows:
            <list type="table">
            <item><term>Mono</term><description>0=left.</description></item>
            <item><term>Stereo</term><description>0=left, 1=right.</description></item>
            <item><term>3 channels</term><description>0=left-front, 1=right-front, 2=center.</description></item>
            <item><term>4 channels</term><description>0=left-front, 1=right-front, 2=left-rear/side, 3=right-rear/side.</description></item>
            <item><term>6 channels (5.1)</term><description>0=left-front, 1=right-front, 2=center, 3=LFE, 4=left-rear/side, 5=right-rear/side.</description></item>
            <item><term>8 channels (7.1)</term><description>0=left-front, 1=right-front, 2=center, 3=LFE, 4=left-rear/side, 5=right-rear/side, 6=left-rear center, 7=right-rear center.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX.ptr">
            <summary>
            For internal use only.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX.lChannel">
            <summary>
            Array of channels to mix together using <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag's (lChannel[0]=1st=left, lChannel[0]=2nd=right channel etc.).
            </summary>
            <remarks>Each value of an element represents a <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag specifying the source channels to be mixed/used.
            Whereas the element index determines the target channel to put the mixed channels to.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX.#ctor(System.Int32)">
            <summary>
            Constructor assigning a linear 1:1 remap (0=CHAN1, 1=CHAN2 etc.).
            </summary>
            <param name="numChans">The number of channels to use.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX.#ctor(Un4seen.Bass.AddOn.Fx.BASSFXChan[])">
            <summary>
            Constructor already setting the channel order.
            </summary>
            <param name="channels">The variable list of the zero-based channel indexes (1st=0, 2nd=1,...). Each parameter will be applied in exactly this order.</param>
            <example>
            Swap channels 1 and 2:
            <code lang="C#">
            BASS_BFX_MIX swap = new BASS_BFX_MIX(BASSFXChan.BASS_BFX_CHAN2, BASSFXChan.BASS_BFX_CHAN1);
            int channel = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            int fxMix = Bass.BASS_ChannelSetFX(channel, BASSFXType.BASS_FX_BFX_MIX, 0);
            Bass.BASS_FXSetParameters(fxMix, swap);
            </code>
            <code lang="VB">
            Dim swap As New BASS_BFX_MIX(BASSFXChan.BASS_BFX_CHAN2, BASSFXChan.BASS_BFX_CHAN1)
            Dim channel As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim fxMix As Integer = Bass.BASS_ChannelSetFX(channel, BASSFXType.BASS_FX_BFX_MIX, 0)
            Bass.BASS_FXSetParameters(fxMix, swap)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX.Finalize">
            <summary>
            Default Finilizer.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX.Dispose">
            <summary>
            Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX_core.ptr">
            <summary>
            
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Rotate.
            </summary>
            <remarks>
            <para>This is a volume rotate effect between even channels, just like 2 channels playing ping-pong between each other.</para>
            <para>The fRate defines the speed in Hz.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE.fRate">
            <summary>
            Rotation rate/speed in Hz (A negative rate can be used for reverse direction).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE.#ctor(System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="Rate">Rotation rate/speed in Hz (A negative rate can be used for reverse direction).</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Echo.
            </summary>
            <remarks>No multi-channel option, only max. 2 channels (stereo).
            <para>This is an echo effect that replays what you have played one or more times after a period of time. It's something like the echoes you might hear shouting against a canyon wall.</para>
            <para>The fLevel is the volume of a signal. The lDelay is the delay time in ms.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO.fLevel">
            <summary>
            Echo level (0...1..n, linear). Default = 0.
            </summary>
            <remarks>Examples: 0.0 = -unlimited dB, 0.5 = -6dB, 1.0 = 0dB, 2.0 = +6dB
            <para>To convert a dB value to a 0-1 linear value, you can do this:
            <code lang="C#">double linear = Math.Pow(10d, dB / 20.0);</code>
            </para>
            <para>To convert a linear value to a dB value, you can do this:
            <code lang="C#">double dB = 20.0 * Math.Log10(level / 1.0);</code>
            </para>
            Or use the <see cref="M:Un4seen.Bass.Utils.LevelToDB(System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Utils.DBToLevel(System.Double,System.Int32)"/> methods.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO.lDelay">
            <summary>
            Delay in ms (1200...30000). Default = 1200ms.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO.#ctor(System.Single,System.Int32)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="Level">Echo level (0...1...n).</param>
            <param name="Delay">Delay in ms (1200...30000).</param>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_FLANGER">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Flanger.
            </summary>
            <remarks>
            Flangers mix a varying delayed signal (usually about 5ms [0.005] to 15ms [0.015]) with the original to produce a series of notches in the frequency response. 
            The important difference between flanging and phasing is that a flanger produces a large number of notches that are harmonically (musically) related, while a phaser produces a small number of notches that are evenly spread across the frequency spectrum. 
            With high resonance, you get the "jet plane" effect.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FLANGER.fWetDry">
            <summary>
            Ratio of wet (processed) signal to dry (unprocessed) signal (0...1...n, linear, default=1).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FLANGER.fSpeed">
            <summary>
            Flanger speed in seconds (0...0.09, [0ms - 90ms]). Default 0.01.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FLANGER.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_FLANGER.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_FLANGER.#ctor(System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="WetDry">Ratio of wet (processed) signal to dry (unprocessed) signal (0...1...n).</param>
            <param name="Speed">Flanger speed in seconds (0...0.09).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_FLANGER.#ctor(System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="WetDry">Ratio of wet (processed) signal to dry (unprocessed) signal (0...1...n).</param>
            <param name="Speed">Flanger speed in seconds (0...0.09).</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_FLANGER.Preset_Default">
            <summary>
            Sets the instance members to a preset (WetDry=1, Speed=0.012).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Volume. (L/R for STEREO, L for MONO for both channels).
            </summary>
            <remarks>Global volume is set to 1.0 [0dB]. Channels volume can't be greater than global volume.
            To set a new global volume, set lChannel = 0.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect. 0 (BASS_FX_DSP_CHANNONE) for global volume control.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME.fVolume">
            <summary>
            Volume of the channel (0..1..n). Default = 1 (no amplification).
            </summary>
            <remarks>Examples: 0.0 = -unlimited dB, 0.5 = -6dB, 1.0 = 0dB, 2.0 = +6dB
            <para>To convert a dB value to a 0-1 linear value, you can do this:
            <code lang="C#">double linear = Math.Pow(10d, dB / 20.0);</code>
            </para>
            <para>To convert a linear value to a dB value, you can do this:
            <code lang="C#">double dB = 20.0 * Math.Log10(level / 1.0);</code>
            </para>
            Or use the <see cref="M:Un4seen.Bass.Utils.LevelToDB(System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Utils.DBToLevel(System.Double,System.Int32)"/> methods.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME.#ctor(System.Single)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="Volume">Volume of all channel (0..1..n).</param>
            <remarks>The volume is a float value between 0.0 (silence) and 1.0 (full volume, no amplification). A value above 1.0 indicates an amplification, which might cause distortion, if the original sound gets too lound and might needs to be clipped later.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME.#ctor(System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="Volume">Volume of all channel (0..1..n).</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
            <remarks>The volume is a float value between 0.0 (silence) and 1.0 (full volume, no amplification). A value above 1.0 indicates an amplification, which might cause distortion, if the original sound gets too lound and might needs to be clipped later.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Peaking equalizer.
            </summary>
            <example>
            Setting up a multi-band EQ:
            <code lang="C#">
            private int _fxEQ;
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_SAMPLE_FLOAT);
            SetBFX_EQ(stream);
            ...
            // increase the treble by +6bB
            UpdateFX(2, 6f);
            ...
            
            private void SetBFX_EQ(int channel)
            {
              // set peaking equalizer effect with no bands
              _fxEQ = Bass.BASS_ChannelSetFX(channel, BASSFXType.BASS_FX_BFX_PEAKEQ, 0);
            
              // setup the EQ bands
              BASS_BFX_PEAKEQ eq = new BASS_BFX_PEAKEQ();
              eq.fQ = 0f;
              eq.fBandwidth = 2.5f;
              eq.lChannel = BASSFXChan.BASS_BFX_CHANALL;
            
              // create 1st band for bass
              eq.lBand = 0;
              eq.fCenter = 125f;
              Bass.BASS_FXSetParameters(_fxEQ, eq);
              UpdateFX(0, 0f);
            
              // create 2nd band for mid
              eq.lBand = 1;
              eq.fCenter = 1000f;
              Bass.BASS_FXSetParameters(_fxEQ, eq);
              UpdateFX(1, 0f);
            
              // create 3rd band for treble
              eq.lBand = 2;
              eq.fCenter = 8000f;
              Bass.BASS_FXSetParameters(_fxEQ, eq);
              UpdateFX(2, 0f);
            }
            
            private void UpdateFX(int band, float gain)
            {
              BASS_BFX_PEAKEQ eq = new BASS_BFX_PEAKEQ();
              // get values of the selected band
              eq.lBand = band;
              Bass.BASS_FXGetParameters(_fxEQ, eq);
              eq.fGain = gain;
              Bass.BASS_FXSetParameters(_fxEQ, eq);
            }
            </code>
            <code lang="VB">
            Private _fxEQ As Integer
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L.ToUInt32(), 0L.ToUInt32(), BASSFlag.BASS_SAMPLE_FLOAT)
            SetBFX_EQ(stream)
            ...
            ' increase the treble by +6bB
            UpdateFX(2, 6F)
            ...
            
            Private Sub SetBFX_EQ(channel As Integer)
              ' set peaking equalizer effect with no bands
              _fxEQ = Bass.BASS_ChannelSetFX(channel, BASSFXType.BASS_FX_BFX_PEAKEQ, 0)
            
              ' setup the EQ bands
              Dim eq As New BASS_BFX_PEAKEQ()
              eq.fQ = 0F
              eq.fBandwidth = 2.5F
              eq.lChannel = BASSFXChan.BASS_BFX_CHANALL
            
              ' create 1st band for bass
              eq.lBand = 0
              eq.fCenter = 125F
              Bass.BASS_FXSetParameters(_fxEQ, eq)
              UpdateFX(0, 0F)
            
              ' create 2nd band for mid
              eq.lBand = 1
              eq.fCenter = 1000F
              Bass.BASS_FXSetParameters(_fxEQ, eq)
              UpdateFX(1, 0F)
            
              ' create 3rd band for treble
              eq.lBand = 2
              eq.fCenter = 8000F
              Bass.BASS_FXSetParameters(_fxEQ, eq)
              UpdateFX(2, 0F)
            End Sub
            
            Private Sub UpdateFX(band As Integer, gain As Single)
              Dim eq As New BASS_BFX_PEAKEQ()
              ' get values of the selected band
              eq.lBand = band
              Bass.BASS_FXGetParameters(_fxEQ, eq)
              eq.fGain = gain
              Bass.BASS_FXSetParameters(_fxEQ, eq)
            End Sub
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ.lBand">
            <summary>
            Number of bands (0...n), more bands means more memory and cpu usage. Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ.fBandwidth">
            <summary>
            Bandwidth in octaves (0.1...4...n), Q is not in use (fBandwidth has priority over fQ). Default = 1 (0=not in use).
            <para>In most cases users should use the minimum of 0.5 octave.</para>
            <para>The bandwidth in octaves (between -3 dB frequencies for BPF and notch or between midpoint (dBgain/2) gain frequencies for peaking EQ).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ.fQ">
            <summary>
            EE kinda definition of Q (0.1...1...n), if bandwidth is not in use. Default = 0.0 (0=not in use).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ.fCenter">
            <summary>
            Center frequency in Hz (1Hz...nHz). Default = 1000 (max. is 1/2 of the samplerate).
            </summary>
            <remarks>Use 'oldcenter*freq/oldfreq' to update the fCenter after changing the samplerate.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ.fGain">
            <summary>
            Gain in dB (-15...0...+15). Default 0dB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Band">Number of bands (0...n), more bands means more memory and cpu usage.</param>
            <param name="Bandwidth">Bandwidth in octaves (0.1...4), Q is not in use.</param>
            <param name="Q">EE kinda definition of Q (0...1...n), bandwidth is not in use.</param>
            <param name="Center">Center frequency in Hz (1...n).</param>
            <param name="Gain">Gain in dB (-15...0...+15).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Band">Number of bands (0...n), more bands means more memory and cpu usage.</param>
            <param name="Bandwidth">Bandwidth in octaves (0.1...4), Q is not in use.</param>
            <param name="Q">EE kinda definition of Q )0...1...n), bandwidth is not in use.</param>
            <param name="Center">Center frequency in Hz (1...n).</param>
            <param name="Gain">Gain in dB (-15...0...+15).</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_REVERB">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Reverb.
            </summary>
            <remarks>No multi-channel option, only max. 2 channels (stereo).
            <para>Reverb is the sound you hear in a room with hard surfaces (such as your bathroom) where sound bounces around the room for a while after the initial sound stops. This effect takes a lot of computing power to reproduce well.</para>
            <para>Reverb is actually made up of a very large number of repeats, with varying levels and tones over time. Reverbs usually offer you a choice of different algorithm to simulate different environments such as different sized rooms and halls, studio effects such as plate, chamber and reverse * reverbs, and sometimes emulations of guitar spring reverbs.</para>
            <para>The fLevel is the volume of a signal. The lDelay is the delay time in ms.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_REVERB.fLevel">
            <summary>
            Reverb level (0...1...n, linear). Default = 0.
            </summary>
            <remarks>Examples: 0.0 = -unlimited dB, 0.5 = -6dB, 1.0 = 0dB, 2.0 = +6dB
            <para>To convert a dB value to a 0-1 linear value, you can do this:
            <code lang="C#">double linear = Math.Pow(10d, dB / 20.0);</code>
            </para>
            <para>To convert a linear value to a dB value, you can do this:
            <code lang="C#">double dB = 20.0 * Math.Log10(level / 1.0);</code>
            </para>
            Or use the <see cref="M:Un4seen.Bass.Utils.LevelToDB(System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Utils.DBToLevel(System.Double,System.Int32)"/> methods.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_REVERB.lDelay">
            <summary>
            Delay in ms (1200...10000). Default = 1200ms.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_REVERB.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_REVERB.#ctor(System.Single,System.Int32)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Level">Reverb level (0...1...n).</param>
            <param name="Delay">Delay in ms (1200...10000).</param>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_LPF">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Low pass filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_LPF.fResonance">
            <summary>
            Resonance (0.01...10). Default = 2.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_LPF.fCutOffFreq">
            <summary>
            Cut-off frequency in Hz (1...info.freq/2). Default = 200Hz.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_LPF.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_LPF.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_LPF.#ctor(System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Resonance">Resonance (0.01...10).</param>
            <param name="CutOffFreq">Cut-off frequency in Hz (1...info.freq/2).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_LPF.#ctor(System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Resonance">Resonance (0.01...10).</param>
            <param name="CutOffFreq">Cut-off frequency in Hz (1...info.freq/2).</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Dynamic amplification.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.fTarget">
            <summary>
            Target volume level (0&lt;...1, linear). Default = 1.0 (0dB).
            </summary>
            <remarks>Examples: 0.0 = -unlimited dB, 0.5 = -6dB, 1.0 = 0dB
            <para>To convert a dB value to a 0-1 linear value, you can do this:
            <code lang="C#">double linear = Math.Pow(10d, dB / 20.0);</code>
            </para>
            <para>To convert a linear value to a dB value, you can do this:
            <code lang="C#">double dB = 20.0 * Math.Log10(level / 1.0);</code>
            </para>
            Or use the <see cref="M:Un4seen.Bass.Utils.LevelToDB(System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Utils.DBToLevel(System.Double,System.Int32)"/> methods.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.fQuiet">
            <summary>
            Quiet volume level (0...1, linear). Default = 0.
            </summary>
            <remarks>Examples: 0.0 = -unlimited dB, 0.5 = -6dB, 1.0 = 0dB
            <para>To convert a dB value to a 0-1 linear value, you can do this:
            <code lang="C#">double linear = Math.Pow(10d, dB / 20.0);</code>
            </para>
            <para>To convert a linear value to a dB value, you can do this:
            <code lang="C#">double dB = 20.0 * Math.Log10(level / 1.0);</code>
            </para>
            Or use the <see cref="M:Un4seen.Bass.Utils.LevelToDB(System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Utils.DBToLevel(System.Double,System.Int32)"/> methods.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.fRate">
            <summary>
            Amplification adjustment rate (0...1, linear), e.g. 0.02. Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.fGain">
            <summary>
            Amplification level (0...1...n, linear). Default = 0.
            </summary>
            <remarks>Examples: 0.0 = -unlimited dB, 0.5 = -6dB, 1.0 = 0dB, 2.0 = +6dB
            <para>To convert a dB value to a 0-1 linear value, you can do this:
            <code lang="C#">double linear = Math.Pow(10d, dB / 20.0);</code>
            </para>
            <para>To convert a linear value to a dB value, you can do this:
            <code lang="C#">double dB = 20.0 * Math.Log10(level / 1.0);</code>
            </para>
            Or use the <see cref="M:Un4seen.Bass.Utils.LevelToDB(System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Utils.DBToLevel(System.Double,System.Int32)"/> methods.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.fDelay">
            <summary>
            Delay in seconds before increasing level (0...n, linear). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Target">Target volume level (0&lt;...1)</param>
            <param name="Quiet">Quiet volume level (0...1)</param>
            <param name="Rate">Amplification adjustment rate (0...1)</param>
            <param name="Gain">Amplification level (0...1...n)</param>
            <param name="Delay">Delay in seconds before increasing level (0...n)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Target">Target volume level (0&lt;...1)</param>
            <param name="Quiet">Quiet volume level (0...1)</param>
            <param name="Rate">Amplification adjustment rate (0...1)</param>
            <param name="Gain">Amplification level (0...1...n)</param>
            <param name="Delay">Delay in seconds before increasing level (0...n)</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.Preset_Soft">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.Preset_Medium">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP.Preset_Hard">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Auto wah.
            </summary>
            <remarks>
            <para>The effect implements the auto-wah by using 4-stage phaser effect which moves a peak in the frequency response up and down the frequency spectrum by amplitude of input signal.</para>
            <para>The fDryMix is the volume of input signal and the fWetMix is the volume of delayed signal. The fFeedback sets feedback of auto wah (phaser). The fRate and fRange control how fast and far the frequency notches move. The fRate is the rate of sweep in cycles per second, fRange is the width of sweep in octaves. And the the fFreq is the base frequency of sweep.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.fDryMix">
            <summary>
            Dry (unaffected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.fWetMix">
            <summary>
            Wet (affected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.fFeedback">
            <summary>
            Feedback (-1...+1). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.fRate">
            <summary>
            Rate of sweep in cycles per second (0&lt;...&lt;10). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.fRange">
            <summary>
            Sweep range in octaves (0&lt;...&lt;10). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.fFreq">
            <summary>
            Base frequency of sweep range (0&lt;...1000). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2...+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2...+2)</param>
            <param name="Feedback">Feedback (-1...+1)</param>
            <param name="Rate">Rate of sweep in cycles per second (0&lt;...&lt;10)</param>
            <param name="Range">Sweep range in octaves (0&lt;...&lt;10)</param>
            <param name="Freq">Base frequency of sweep range (0&lt;...1000)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2...+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2...+2)</param>
            <param name="Feedback">Feedback (-1...+1)</param>
            <param name="Rate">Rate of sweep in cycles per second (0&lt;...&lt;10)</param>
            <param name="Range">Sweep range in octaves (0&lt;...&lt;10)</param>
            <param name="Freq">Base frequency of sweep range (0&lt;...1000)</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.Preset_SlowAutoWah">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.Preset_FastAutoWah">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH.Preset_HiFastAutoWah">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Echo 2.
            </summary>
            <remarks>
            <para>This is an echo effect that replays what you have played one or more times after a period of time. It's something like the echoes you might hear shouting against a canyon wall.</para>
            <para>The fDryMix is the volume of input signal and the fWetMix is the volume of delayed signal. The fDelay is the delay time in sec. The fFeedback sets how much delay is feed back to the input (for repeating delays).</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.fDryMix">
            <summary>
            Dry (unaffected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.fWetMix">
            <summary>
            Wet (affected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.fFeedback">
            <summary>
            Feedback (-1...+1). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.fDelay">
            <summary>
            Delay in seconds (0&lt;...6). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.#ctor(System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2..+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2..+2)</param>
            <param name="Feedback">Feedback (-1..+1)</param>
            <param name="Delay">Delay in seconds (0&lt;..6)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.#ctor(System.Single,System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2..+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2..+2)</param>
            <param name="Feedback">Feedback (-1..+1)</param>
            <param name="Delay">Delay in seconds (0&lt;..6)</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.Preset_SmallEcho">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.Preset_ManyEchoes">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2.Preset_ReverseEchoes">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Phaser.
            </summary>
            <remarks>
            <para>Phasers use an internal low frequency oscillator to automatically move notches in the frequency response up and down the frequency spectrum. 
            An important difference between phasing and flanging is that phasers space these notches evenly across the frequency spectrum, while the notches in flanging and chorus are harmonically (musically) related. 
            You don't hear the notches as such (because they are the frequencies that are removed). 
            What you hear is the resulting frequency peaks between these notches. Phasing works by mixing the original signal with one that is phase shifted over the frequency spectrum. 
            For example, a four stage phaser signal (such as this) could be from 0 degrees at 100Hz, shifted to 720 degrees at 5Khz (these extremes are not quite possible practically, but are near enough to explain the effect). 
            This is how the term phase shifter comes about. A 4 stage phaser has 2 notches with bass response, a central peak, and treble response. 
            By using resonance to enhance the central peak, you can get a sound similar to an automatic wah. 
            Using a phaser with lots of stages and setting the resonance high can give a sound similar to flanging, although they are really quite different.</para>
            <para>The fDryMix is the volume of input signal and the fWetMix is the volume of delayed signal. 
            The fFeedback sets feedback of phaser. 
            The fRate and fRange control how fast and far the frequency notches move. 
            The fRate is the rate of sweep in cycles per second, fRange is the width of sweep in octaves. 
            And the the fFreq is the base frequency of sweep.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.fDryMix">
            <summary>
            Dry (unaffected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.fWetMix">
            <summary>
            Wet (affected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.fFeedback">
            <summary>
            Feedback (-1...+1). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.fRate">
            <summary>
            Rate of sweep in cycles per second (0&lt;...&lt;10). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.fRange">
            <summary>
            Sweep range inoctaves (0&lt;...&lt;10). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.fFreq">
            <summary>
            Base frequency of sweep range (0&lt;...1000). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2...+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2...+2)</param>
            <param name="Feedback">Feedback (-1...+1)</param>
            <param name="Rate">Rate of sweep in cycles per second (0&lt;...&lt;10)</param>
            <param name="Range">Sweep range inoctaves (0&lt;...&lt;10)</param>
            <param name="Freq">Base frequency of sweep range (0&lt;...1000)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2...+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2...+2)</param>
            <param name="Feedback">Feedback (-1...+1)</param>
            <param name="Rate">Rate of sweep in cycles per second (0&lt;...&lt;10)</param>
            <param name="Range">Sweep range inoctaves (0&lt;...&lt;10)</param>
            <param name="Freq">Base frequency of sweep range (0&lt;...1000)</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.Preset_PhaseShift">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.Preset_SlowInvertPhaseShiftWithFeedback">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.Preset_BasicPhase">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.Preset_PhaseWithFeedback">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.Preset_MediumPhase">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.Preset_FastPhase">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.Preset_InvertWithInvertFeedback">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER.Preset_TremoloWah">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Echo 3.
            </summary>
            <remarks>
            <para>This is an echo effect that replays what you have played one or more times after a period of time. It's something like the echoes you might hear shouting against a canyon wall.</para>
            <para>The fDryMix is the volume of input signal and the fWetMix is the volume of delayed signal. The fDelay is the delay time in sec.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.fDryMix">
            <summary>
            Dry (unaffected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.fWetMix">
            <summary>
            Wet (affected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.fDelay">
            <summary>
            Delay in seconds (0&lt;...6). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.#ctor(System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2..+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2..+2)</param>
            <param name="Delay">Delay in seconds (0&lt;..6)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.#ctor(System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2..+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2..+2)</param>
            <param name="Delay">Delay in seconds (0&lt;..6)</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.Preset_SmallEcho">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.Preset_DoubleKick">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3.Preset_LongEcho">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Chorus.
            </summary>
            <remarks>
            <para>True vintage chorus works the same way as flanging. 
            It mixes a varying delayed signal with the original to produce a large number of harmonically related notches in the frequency response. 
            Chorus uses a longer delay than flanging, so there is a perception of "spaciousness", although the delay is too short to hear as a distinct slap-back echo. 
            There is also little or no feedback, so the effect is more subtle.</para>
            <para>The fDryMix is the volume of input signal and the fWetMix is the volume of delayed signal. 
            The fFeedback sets feedback of chorus. 
            The fRate, fMinSweep and fMaxSweep control how fast and far the frequency notches move. 
            The fRate is the rate of delay change in millisecs per sec, fMaxSweep-fMinSweep is the range or width of sweep in ms.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.fDryMix">
            <summary>
            Dry (unaffected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.fWetMix">
            <summary>
            Wet (affected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.fFeedback">
            <summary>
            Feedback (-1...+1). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.fMinSweep">
            <summary>
            Minimum delay in ms (0&lt;...6000). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.fMaxSweep">
            <summary>
            Maximum delay in ms (0&lt;...6000). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.fRate">
            <summary>
            Rate in ms/s (0&lt;...1000). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2...+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2...+2)</param>
            <param name="Feedback">Feedback (-1...+1)</param>
            <param name="MinSweep">Minimum delay in ms (0&lt;...6000)</param>
            <param name="MaxSweep">Maximum delay in ms (0&lt;...6000)</param>
            <param name="Rate">Rate in ms/s (0&lt;...1000)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2...+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2...+2)</param>
            <param name="Feedback">Feedback (-1...+1)</param>
            <param name="MinSweep">Minimum delay in ms (0&lt;...6000)</param>
            <param name="MaxSweep">Maximum delay in ms (0&lt;...6000)</param>
            <param name="Rate">Rate in ms/s (0&lt;...1000)</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.Preset_Flanger">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.Preset_ExaggeratedChorusLTMPitchSshiftedVoices">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.Preset_Motocycle">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.Preset_Devil">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.Preset_WhoSayTTNManyVoices">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.Preset_BackChipmunk">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.Preset_Water">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS.Preset_ThisIsTheAirplane">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect All pass filter.
            </summary>
            <remarks>
            <para>The allpass filter has the unique property that it passes all frequencies equally. This property makes it useful in reverberator design because it increases echo density while reducing signal coloration (an allpass filter is NOT transparent to transient signals, as it does have a phase response). The structure of an allpass filter is similar to the comb filter, but it contains an additional feedforward path. In reverb applications, the delay used in an allpass filter is generally measured in milliseconds. This keeps the 'reflections' spaced apart in a similar fashion to a room's impulse response.</para>
            <para>The fDelay sets delay for all pass filter. The fGain controls the gain of all pass filter.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.fGain">
            <summary>
            Gain of the all pass filter (-1...+1). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.fDelay">
            <summary>
            Delay in seconds (0...6). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.#ctor(System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Gain">Gain (-1..+1)</param>
            <param name="Delay">Delay in seconds (0..6)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.#ctor(System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Gain">Gain (-1..+1)</param>
            <param name="Delay">Delay in seconds (0..6)</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.Preset_SmallRever">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.Preset_RobotVoice">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF.Preset_LongReverberation">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Dynamic Range Compressor.
            </summary>
            <remarks>
            <para>Compressors are commonly used in recording to control the level, by making loud passages quieter, and quiet passages louder. 
            This is useful in allowing a vocalist to sing quiet and loud for different emphasis, and always be heard clearly in the mix. 
            Compression is generally applied to guitar to give clean sustain, where the start of a note is "squashed" with the gain automatically increased as the not fades away. 
            Compressors take a short time to react to a picked note, and it can be difficult to find settings that react quickly enough to the volume change without killing the natural attack sound of your guitar.</para>
            <para>The fThreshold sets the level above which volume is cut, and below which volume is boosted. 
            This is usually achieved simply by increasing the internal gain, so it really controls the amount of perceived sustain. 
            The fAttacktime controls how fast the unit responds to volume increases. 
            The fReleasetime controls how slowly the unit responds to decreasing volume.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.fThreshold">
            <summary>
            Compressor threshold (0...+1). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.fAttacktime">
            <summary>
            Attack time in ms (0&lt;...1000). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.fReleasetime">
            <summary>
            Release time in ms (0&lt;...5000). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_FX_DSP_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.#ctor(System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Threshold">Compressor threshold (0...+1)</param>
            <param name="Attacktime">Attack time in ms (0&lt;...1000)</param>
            <param name="Releasetime">Release time in ms (0&lt;...5000)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.#ctor(System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Threshold">Compressor threshold (0...+1)</param>
            <param name="Attacktime">Attack time in ms (0&lt;...1000)</param>
            <param name="Releasetime">Release time in ms (0&lt;...5000)</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.Preset_50Attack15msRelease1sec">
            <summary>
            Sets the instance members to a preset.
            </summary>
            <remarks>
            <para>Threshold: -6 dB</para>
            <para>Attack: 15ms</para>
            <para>Release: 1sec</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.Preset_80Attack1msRelease05sec">
            <summary>
            Sets the instance members to a preset.
            </summary>
            <remarks>
            <para>Threshold: -2 dB</para>
            <para>Attack: 1ms</para>
            <para>Release: 500ms</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.Preset_Soft">
            <summary>
            Sets the instance members to a preset.
            </summary>
            <remarks>
            <para>Threshold: -1 dB</para>
            <para>Attack: 20ms</para>
            <para>Release: 350ms</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.Preset_SoftHigh">
            <summary>
            Sets the instance members to a preset.
            </summary>
            <remarks>
            <para>Threshold: -3 dB</para>
            <para>Attack: 10ms</para>
            <para>Release: 200ms</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.Preset_Medium">
            <summary>
            Sets the instance members to a preset.
            </summary>
            <para>Threshold: -6 dB</para>
            <para>Attack: 5ms</para>
            <para>Release: 250ms</para>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR.Preset_Hard">
            <summary>
            Sets the instance members to a preset.
            </summary>
            <para>Threshold: -12 dB</para>
            <para>Attack: 2.2ms</para>
            <para>Release: 400ms</para>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Distortion.
            </summary>
            <remarks>
            <para>Similar to Pre/Post Gain and Drive controls on amps. 
            They were first introduced as a trick to added color to a guitar's tone. 
            Usually produced back then by turning the amp all the way up, or slightly pulling out a tube from its socket. 
            These tones are now today referred to as Overdrives. 
            Today, there are an almost infinite variety of these effects, and they range in 3 classes: Distortions, Fuzz, and Overdrive. 
            One common feature to mostly all of these types of pedals is a volume and drive (also noted as distortion, fuzz, gain, ...etc.). 
            Overdrives are usually a sustain and volume boosting pedal. Used by more traditional rock and country bands. 
            Next are the Distortions, which range from punk style to death metal screams. They are similar to Overdrives, but have more buzzing quality to them. 
            Finally, there are the Fuzzes which are more distorted than distortions, but are more mellow and compressed sounding. 
            Many pedals can be confused within these names, and some may be named other than what they are. 
            Towards the end of this era, the back-to-back diode pair became popular as a technique to provide soft clipping (with germanium diodes) and hard clipping (with silicon diodes). 
            Today, overdrive effects usually means soft clipping, where gain is reduced beyond the clipping point, while distortion usually means hard clipping, where the level is fixed beyond the clipping point. 
            Distortion is a little harder sound, good for rock, while overdrive gives a more natural sound.</para>
            <para>The fDrive controls the amount of overdrive. 
            The fVolume to balance the effect volume with the bypassed level. 
            It can also be used to boost the signal for solos. 
            The fDryMix is the volume of input signal and the fWetMix is the volume of distorted signal. 
            The fFeedback sets feedback of distortion.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.fDrive">
            <summary>
            Distortion drive (0...5). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.fDryMix">
            <summary>
            Dry (unaffected) signal mix (-5...+5). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.fWetMix">
            <summary>
            Wet (affected) signal mix (-5...+5). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.fFeedback">
            <summary>
            Feedback (-1...+1). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.fVolume">
            <summary>
            Distortion volume (0...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Drive">Distortion drive (0...5)</param>
            <param name="DryMix">Dry (unaffected) signal mix (-5...+5)</param>
            <param name="WetMix">Wet (affected) signal mix (-5...+5)</param>
            <param name="Feedback">Feedback (-1...+1)</param>
            <param name="Volume">Distortion volume (0...+2)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="Drive">Distortion drive (0...5)</param>
            <param name="DryMix">Dry (unaffected) signal mix (-5...+5)</param>
            <param name="WetMix">Wet (affected) signal mix (-5...+5)</param>
            <param name="Feedback">Feedback (-1...+1)</param>
            <param name="Volume">Distortion volume (0...+2)</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.Preset_HardDistortion">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.Preset_VeryHardDistortion">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION.Preset_MediumDistortion">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Dynamic Range Compressor.
            </summary>
            <remarks>
            Dynamic range compression also called DRC, or simply compression, is a process that reduces the dynamic range of an audio signal. 
            Compression is used during sound recording, live sound reinforcement, and broadcasting to control the level of audio. A compressor is the device used to apply compression.
            <para>Compressors are commonly used in recording to control the level, by making loud passages quieter, and quiet passages louder. 
            This is useful in allowing a vocalist to sing quiet and loud for different emphasis, and always be heard clearly in the mix. 
            Compression is generally applied to guitar to give clean sustain, where the start of a note is "squashed" with the gain automatically increased as the not fades away. 
            Compressors take a short time to react to a picked note, and it can be difficult to find settings that react quickly enough to the volume change without killing the natural attack sound of your guitar.</para>
            <para>The fThreshold sets the level above which volume is reduced in level while quiet sound are untreated (downward compression). 
            The fAttack controls how fast the unit responds to volume increases. 
            The fRelease controls how slowly the unit responds to decreasing volume.</para>
            <para>The compressor reduces the gain (level) of an audio signal if its amplitude exceeds a threshold (using RMS sensing with a hard knee). 
            The amount of gain reduction is determined by a ratio. For example, with a ratio of 4:1, when the (time averaged) input level is 4 dB over the threshold, the output signal level will be 1 dB over the threshold. 
            The gain (level) has been reduced by 3 dB. When the input level is 8 dB above the threshold, the output level will be 2 dB; a 6 dB gain reduction.
            A more specific example for a 4:1 ratio:
            Threshold = −10 dB;
            Input = −6 dB (4 dB above the threshold);
            Output = −9 dB (1 dB above the threshold)
            </para>
            <para>With any threshold/ratio combination, you could calculate the gain for a 0dB peak like this:
            fGain=fThreshold*(1/fRatio-1)</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.fGain">
            <summary>
            Output gain in dB of signal after compression, in the range from -60 to 60. The default value is 5 dB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.fThreshold">
            <summary>
            Point in dB at which compression begins, in decibels, in the range from -60 to 0. The default value is -15 dB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.fRatio">
            <summary>
            Compression ratio, in the range from 1 to 100. The default value is 3, which means 3:1 compression.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.fAttack">
            <summary>
            Time in ms before compression reaches its full value, in the range from 0.01 to 500. The default value is 20 ms.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.fRelease">
            <summary>
            Time (speed) in ms at which compression is stopped after input drops below fThreshold, in the range from 50 to 3000. The default value is 200 ms.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="Gain">Output gain in dB of signal after compression, in the range from -60 to 60.</param>
            <param name="Threshold">Point in dB at which compression begins, in decibels, in the range from -60 to 0.</param>
            <param name="Ratio">Compression ratio, in the range from 1 to 100.</param>
            <param name="Attack">Time in ms before compression reaches its full value, in the range from 0.01 to 500.</param>
            <param name="Release">Speed in ms at which compression is stopped after input drops below fThreshold, in the range from 50 to 3000.</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.Calculate0dBGain">
            <summary>
            Calculates for the current threshold/ratio combination a gain value to roughly achieve a 0 dB peak line.
            </summary>
            <remarks>Sets fGain=(fThreshold/2)*(1/fRatio-1).</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.Preset_Soft">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.Preset_Soft2">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.Preset_Medium">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.Preset_Hard">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.Preset_Hard2">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2.Preset_HardCommercial">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Volume Envelope.
            </summary>
            <remarks>
            <para>Make sure that the first node is at position 0.0.</para>
            <para>Envelopes are applied on top of the channel's attributes, as set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. 
            The final volume is a product of the channel attribute and the envelope.</para>
            </remarks>
            <example>
            Setting a volume envelope on a source channel:
            <code lang="C#">
            int fx = Bass.BASS_ChannelSetFX(source, BASSFXType.BASS_FX_BFX_VOLUME_ENV, 0);
            BASS_BFX_VOLUME_ENV ve = new BASS_BFX_VOLUME_ENV(
                                            new BASS_BFX_ENV_NODE(0.0, 1f), 
                                            new BASS_BFX_ENV_NODE(5.0, 1f), 
                                            new BASS_BFX_ENV_NODE(7.0, 0.5f), 
                                            new BASS_BFX_ENV_NODE(12.0, 0.5f), 
                                            new BASS_BFX_ENV_NODE(14.0, 1f));
            // which is the same as:
            BASS_BFX_ENV_NODE[] en = new BASS_BFX_ENV_NODE[5];
            en[0].pos = 0.0;
            en[0].val = 1f;
            en[1].pos = 5.0;
            en[2].val = 1f;
            en[3].pos = 7.0;
            en[3].val = 0.5f;
            en[4].pos = 12.0;
            en[4].val = 0.5f;
            en[5].pos = 14.0;
            en[5].val = 1f;
            ve = new BASS_BFX_VOLUME_ENV(en);
            
            Bass.BASS_FXSetParameters(fx, ve);
            </code>
            <code lang="VB">
            Dim fx As Integer = Bass.BASS_ChannelSetFX(source, BASSFXType.BASS_FX_BFX_VOLUME_ENV, 0) 
            Dim ve As New BASS_BFX_VOLUME_ENV(
                              New BASS_BFX_ENV_NODE(0.0, 1F), 
                              New BASS_BFX_ENV_NODE(5.0, 1F), 
                              New BASS_BFX_ENV_NODE(7.0, 0.5F), 
                              New BASS_BFX_ENV_NODE(12.0, 0.5F), 
                              New BASS_BFX_ENV_NODE(14.0, 1F)) 
            ' which is the same as: 
            Dim en As BASS_BFX_ENV_NODE() = New BASS_BFX_ENV_NODE(4) {} 
            en(0).pos = 0.0 
            en(0).val = 1F 
            en(1).pos = 5.0 
            en(2).val = 1F 
            en(3).pos = 7.0 
            en(3).val = 0.5F 
            en(4).pos = 12.0 
            en(4).val = 0.5F 
            en(5).pos = 14.0 
            en(5).val = 1F 
            ve = New BASS_BFX_VOLUME_ENV(en) 
            
            Bass.BASS_FXSetParameters(fx, ve) 
            </code>
            Getting a volume envelope from a source channel:
            <code lang="C#">
            BASS_BFX_VOLUME_ENV ve = new BASS_BFX_VOLUME_ENV();
            if (Bass.BASS_FXGetParameters(fx, ve))
            {
                foreach (BASS_BFX_ENV_NODE node in ve.pNodes)
                    Console.WriteLine(node);
            }
            </code>
            <code lang="VB">
            Dim ve As New BASS_BFX_VOLUME_ENV() 
            If Bass.BASS_FXGetParameters(fx, ve) Then 
                For Each node As BASS_BFX_ENV_NODE In ve.pNodes 
                        Console.WriteLine(node) 
                Next 
            End If 
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.lNodeCount">
            <summary>
            The number of nodes contained in the pNodes array.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.ptr">
            <summary>
            For internal use only.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.bFollow">
            <summary>
            Follow the source position (default is <see langword="true"/>)?
            </summary>
            <remarks>If set to <see langword="true"/>, position changes also change the position of the volume envelope.
            When it's <see langword="false"/>, the envelope position is never reset.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.pNodes">
            <summary>
            The array of envelope nodes (the first node must be at position 0.0).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.#ctor(System.Int32)">
            <summary>
            Constructor assigning the number of volume envelope nodes to use.
            </summary>
            <param name="nodeCount">The number of volume envelope nodes to use.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.#ctor(Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE[])">
            <summary>
            Constructor assigning the volume envelope nodes to use.
            </summary>
            <param name="nodes">The array of volume nodes to use with this instance (the first node must be at position 0.0).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.Finalize">
            <summary>
            Default Finilizer.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV.Dispose">
            <summary>
            Implements the IDisposable interface.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE_core">
            <summary>
            Internal helper for .Net core marshalling
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE_core.lChannel">
            <summary>
            
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE_core.lNodeCount">
            <summary>
            
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE_core.ptr">
            <summary>
            
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE_core.bFollow">
            <summary>
            
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE">
            <summary>
            Used within <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV"/> to define one volume envelope node.
            </summary>
            <remarks>
            <para>Envelopes are applied on top of the channel's attributes, as set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. 
            The final volume is a product of the channel attribute and the envelope.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE.pos">
            <summary>
            The postion of the node in seconds.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE.val">
            <summary>
            The volume envelope value at the position (0.0=silence, 1.0=max.).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE.#ctor(System.Double,System.Single)">
            <summary>
            Constructor to initialize the members.
            </summary>
            <param name="Pos">The postion of the node in seconds.</param>
            <param name="Val">The volume envelope value at the position (0.0=silence, 1.0=max.).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE.ToString">
            <summary>
            A description of the volume envelope node (position, value).
            </summary>
            <returns>A description of the volume envelope node (position, value).</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect BiQuad filter.
            </summary>
            <remarks>
            BiQuad filters are second-order recursive linear filters. 
            <para><b>BASS_BFX_BQF_LOWPASS:</b><br/>
            A low-pass filter is a filter that passes low-frequency signals but attenuates (reduces the amplitude of) signals with frequencies higher than the fCenter frequency. The actual amount of attenuation for each frequency varies from filter to filter. It is sometimes called a high-cut filter, or treble cut filter when used in audio applications. A low-pass filter is the opposite of a high-pass filter, and a band-pass filter is a combination of a low-pass and a high-pass.
            </para>
            <para><b>BASS_BFX_BQF_HIGHPASS:</b><br/>
            A high-pass filter is an LTI filter that passes high frequencies well but attenuates (i.e., reduces the amplitude of) frequencies lower than the fCenter frequency. The actual amount of attenuation for each frequency is a design parameter of the filter. It is sometimes called a low-cut filter; the terms bass-cut filter or rumble filter are also used in audio applications.
            </para>
            <para><b>BASS_BFX_BQF_BANDPASS:</b><br/>
            A band-pass filter is a device that passes frequencies within a certain range and rejects (attenuates) frequencies outside that range. An example of an analogue electronic band-pass filter is an RLC circuit (a resistor–inductor–capacitor circuit). These filters can also be created by combining a low-pass filter with a high-pass filter.
            </para>
            <para><b>BASS_BFX_BQF_NOTCH:</b><br/>
            In signal processing, a band-stop filter or band-rejection filter is a filter that passes most frequencies unaltered, but attenuates those in a specific range to very low levels. It is the opposite of a band-pass filter. A notch filter is a band-stop filter with a narrow stopband (high Q factor). Notch filters are used in live sound reproduction (Public Address systems, also known as PA systems) and in instrument amplifier (especially amplifiers or preamplifiers for acoustic instruments such as acoustic guitar, mandolin, bass instrument amplifier, etc.) to reduce or prevent feedback, while having little noticeable effect on the rest of the frequency spectrum. Other names include 'band limit filter', 'T-notch filter', 'band-elimination filter', and 'band-reject filter'.
            </para>
            <para><b>BASS_BFX_BQF_ALLPASS:</b><br/>
            An all-pass filter is a signal processing filter that passes all frequencies equally, but changes the phase relationship between various frequencies. It does this by varying its propagation delay with frequency. Generally, the filter is described by the frequency at which the phase shift crosses 90° (i.e., when the input and output signals go into quadrature — when there is a quarter wavelength of delay between them).
            </para>
            <para><b>BASS_BFX_BQF_PEAKINGEQ:</b><br/>
            A peaking equalizer raises or lowers a range of frequencies around a central point in a bell shape. A peaking equalizer with controls to adjust the level (fGain), fBandwidth (fQ) and center frequency (Hz) is called a parametric equalizer.
            Peaking Equalizer in BASS_FX can be achieved directly and efficiently by <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ"/>.
            </para>
            <para><b>BASS_BFX_BQF_ALLPASS:</b><br/>
            An all-pass filter is a signal processing filter that passes all frequencies equally, but changes the phase relationship between various frequencies. It does this by varying its propagation delay with frequency. Generally, the filter is described by the frequency at which the phase shift crosses 90° (i.e., when the input and output signals go into quadrature — when there is a quarter wavelength of delay between them).
            </para>
            <para><b>BASS_BFX_BQF_LOWSHELF:</b><br/>
            A low-shelf filter passes all frequencies, but increasing or reducing frequencies below the fCenter frequency by specified amount.
            </para>
            <para><b>BASS_BFX_BQF_HIGHSHELF:</b><br/>
            A high-shelf filter passes all frequencies, but increasing or reducing frequencies above the fCenter frequency by specified amount.
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF.lFilter">
            <summary>
            Defines which BiQuad filter should be used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF.fCenter">
            <summary>
            Cut-off frequency (Center in PEAKINGEQ and Shelving filters) in Hz (1...info.freq/2). Default = 200Hz.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF.fGain">
            <summary>
            Gain in dB (-15...0...+15). Default 0dB (used only for PEAKINGEQ and Shelving filters).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF.fBandwidth">
            <summary>
            Bandwidth in octaves (0.1...4...n), Q is not in use (fBandwidth has priority over fQ). Default = 1 (0=not in use).
            <para>The bandwidth in octaves (between -3 dB frequencies for for BANDPASS and NOTCH or between midpoint (dBgain/2) gain frequencies for PEAKINGEQ).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF.fQ">
            <summary>
            The EE kinda definition (linear), if fBandwidth is not in use (0.1...1). Default = 0.0 (0=not in use).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF.fS">
            <summary>
            A shelf slope parameter (linear, used only with Shelving filters) (0.1...1). Default = 0.0.
            <para>When fS=1, the shelf slope is as steep as you can get it and remain monotonically increasing or decreasing gain with frequency.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF.#ctor(Un4seen.Bass.AddOn.Fx.BASSBFXBQF,System.Single,System.Single,System.Single,System.Single,System.Single,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="filter">The filter to use (one of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSBFXBQF"/>).</param>
            <param name="center">Cut-off frequency (Center in PEAKINGEQ and Shelving filters) in Hz (1...info.freq/2).</param>
            <param name="gain">Gain in dB (-15...0...+15). Default 0dB (used only for PEAKINGEQ and Shelving filters).</param>
            <param name="bandwidth">Bandwidth in octaves (0.1...4...n), Q is not in use (fBandwidth has priority over fQ) (0=not in use).</param>
            <param name="q">EE kinda definition of Q (0.1...1...n), if bandwidth is not in use (0=not in use).</param>
            <param name="s">A shelf slope parameter (linear, used only with Shelving filters) (0...1...n).</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Echo 4.
            </summary>
            <remarks>
            <para>This is an echo effect that replays what you have played one or more times after a period of time. It's something like the echoes you might hear shouting against a canyon wall. For reverb effect enable feedback.</para>
            <para>The fDryMix is the volume of input signal and the fWetMix is the volume of delayed signal. The fDelay is the delay time in sec. The fFeedback sets how much delay is feed back to the input (for repeating delays). If bStereo is enabled and a stream has an even number of channels then, each even channels will be echoed to each other.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.fDryMix">
            <summary>
            Dry (unaffected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.fWetMix">
            <summary>
            Wet (affected) signal mix (-2...+2). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.fFeedback">
            <summary>
            Output signal to feed back into input (-1...+1). Default = 0 (disabled).
            </summary>
            <remarks>Used for reverb effects.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.fDelay">
            <summary>
            Delay in seconds (0&lt;...n). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.bStereo">
            <summary>
            Echo adjoining channels to each other? Default is disabled.
            </summary>
            <remarks>Only allowed with even number of channels!
            <para>If enabled and a stream has an even number of channels then, each even channels will be echoed to each other.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.#ctor(System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2..+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2..+2)</param>
            <param name="Delay">Delay in seconds (0&lt;..6)</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.#ctor(System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2..+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2..+2)</param>
            <param name="Delay">Delay in seconds (0&lt;..6)</param>
            <param name="Feedback">Output signal to feed back into input (-1...+1).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.#ctor(System.Single,System.Single,System.Single,System.Single,System.Boolean)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2..+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2..+2)</param>
            <param name="Delay">Delay in seconds (0&lt;..6)</param>
            <param name="Feedback">Output signal to feed back into input (-1...+1).</param>
            <param name="Stereo">Even channels are echoed to each other if enabled.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.#ctor(System.Single,System.Single,System.Single,System.Single,System.Boolean,Un4seen.Bass.AddOn.Fx.BASSFXChan)">
            <summary>
            Constructor already setting the members
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (-2..+2)</param>
            <param name="WetMix">Wet (affected) signal mix (-2..+2)</param>
            <param name="Delay">Delay in seconds (0&lt;..6)</param>
            <param name="Feedback">Output signal to feed back into input (-1...+1).</param>
            <param name="Stereo">Even channels are echoed to each other if enabled.</param>
            <param name="chans">The channel control flag defining on which channels the effect should be applied to (a combinbation of <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.Preset_SmallEcho">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.Preset_DoubleKick">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4.Preset_LongEcho">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PITCHSHIFT">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Pitch Shift using FFT.
            </summary>
            <remarks>
            <para>This effect uses FFT for its pitch shifting while maintaining duration.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PITCHSHIFT.fPitchShift">
            <summary>
            A factor value which is between 0.5 (one octave down) and 2 (one octave up) (1 won't change the pitch, default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PITCHSHIFT.fSemitones">
            <summary>
            Semitones (0 won't change the pitch). Default = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PITCHSHIFT.lFFTsize">
            <summary>
            Defines the FFT frame size used for the processing. Typical values are 1024, 2048 (default) and 4096, max is 8192.
            </summary>
            <remarks>It may be any value up to 8192 but it MUST be a power of 2.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PITCHSHIFT.lOsamp">
            <summary>
            Is the STFT oversampling factor which also determines the overlap between adjacent STFT frames. Default = 8.
            </summary>
            <remarks>It should at least be 4 for moderate scaling ratios. A value of 32 is recommended for best quality (better quality = higher CPU usage).</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_PITCHSHIFT.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PITCHSHIFT.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_PITCHSHIFT.#ctor(System.Single,System.Single,System.Int64,System.Int64)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="PitchShift">A factor value which is between 0.5 (one octave down) and 2 (one octave up).</param>
            <param name="Semitones">Semitones (0 won't change the pitch).</param>
            <param name="FFTsize">Defines the FFT frame size used for the processing (1024, 2048, 4096 or 8192).</param>
            <param name="Osamp">Is the STFT oversampling factor which also determines the overlap between adjacent STFT frames (4...64).</param>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of the DSP effect Reverb.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB.fDryMix">
            <summary>
            Dry (unaffected) signal mix (0.0...1.0, def. 0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB.fWetMix">
            <summary>
            Wet (affected) signal mix (0.0...3.0, def. 1.0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB.fRoomSize">
            <summary>
            Room size (0.0...1.0, def. 0.5).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB.fDamp">
            <summary>
            Damping factor (0.0...1.0, def. 0.5).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB.fWidth">
            <summary>
            Stereo width (0.0...1.0, def. 1.0).
            </summary>
            <remarks>It should at least be 4 for moderate scaling ratios. A value of 32 is recommended for best quality (better quality = higher CPU usage).</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB.lMode">
            <summary>
            Mode: 0=no freeze or 1=freeze, def. 0 (no freeze).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB.lChannel">
            <summary>
            A <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXChan"/> flag to define on which channels to apply the effect.
            <para>Default: -1 (BASS_BFX_CHANALL) - all channels.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB.#ctor">
            <summary>
            Default constructor
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Int32)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="DryMix">Dry (unaffected) signal mix (0.0...1.0, def. 0).</param>
            <param name="WetMix">Wet (affected) signal mix (0.0...3.0, def. 1.0).</param>
            <param name="RoomSize">Room size (0.0...1.0, def. 0.5).</param>
            <param name="Damp">Damping factor (0.0...1.0, def. 0.5).</param>
            <param name="Width">Stereo width (0.0...1.0, def. 1.0).</param>
            <param name="Mode">Mode: 0=no freeze or 1=freeze, def. 0 (no freeze).</param>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BPMPROGRESSPROC">
            <summary>
            User defined callback function, to get the bpm detection process in percents.
            </summary>
            <param name="channel">Channel that the <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_DecodeGet(System.Int32,System.Double,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMPROGRESSPROC,System.IntPtr)"/> applies to.</param>
            <param name="percent">The progress of the process in percent (0%..100%).</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_DecodeGet(System.Int32,System.Double,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMPROGRESSPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BPMPROC">
            <summary>
            User defined callback function, to auto get the BPM after each period of time in seconds.
            </summary>
            <param name="handle">Handle that the <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_CallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMPROC,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,System.IntPtr)"/> applies to.</param>
            <param name="bpm">The new original bpm value.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_CallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMPROC,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Fx.BPMBEATPROC">
            <summary>
            User defined callback function, to get the Beat position in seconds.
            </summary>
            <param name="handle">Handle that the <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatCallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatDecodeGet(System.Int32,System.Double,System.Double,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)"/> has applied to.</param>
            <param name="beatpos">The exact beat position in seconds.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatCallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_BeatDecodeGet(System.Int32,System.Double,System.Double,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMBEATPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Hls.BassHls">
            <summary>
            BASS.NET API wrapper for BASSHLS.DLL
            <para>Requires: basshls.dll - HTTP Live Streaming Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSHLS is an extension to the BASS audio library, enabling the playing of HLS (HTTP Live Streaming) streams.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.BASS_HLS_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.BASS_HLS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a local HLS playlist.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            </param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.
            <para>This is a local file version of the <see cref="M:Un4seen.Bass.AddOn.Hls.BassHls.BASS_HLS_StreamCreateURL(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> function. 
            Although the HLS playlist can be a local file, the media segments in the playlist must be URLs.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.BASS_HLS_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.BASS_HLS_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a local HLS playlist.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            </param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.
            <para>This is a local file version of the <see cref="M:Un4seen.Bass.AddOn.Hls.BassHls.BASS_HLS_StreamCreateURL(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> function. 
            Although the HLS playlist can be a local file, the media segments in the playlist must be URLs.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.BASS_HLS_StreamCreateURLAscii(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.BASS_HLS_StreamCreateURLUnicode(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.BASS_HLS_StreamCreateURL(System.String,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from an HLS playlist on the internet, optionally receiving the downloaded data in a callback. 
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            </param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.
            <para>HLS streams consist of a media playlist and segments. The media segments usually contain AAC audio data, but MP3 or AC3 are also possible. 
            AAC support is available as standard with BASS via OS codecs on some platforms, but the BASS_AAC add-on can otherwise be used to provide that support; 
            BASSHLS can make use of any add-on that has been loaded via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>. The data will usually be in an MPEG-TS container, but it can also be plain audio data, possibly with ID3v2 tags.</para>
            <para>As well as possibly ID3v2 tags, the current segment's EXTINF tag in the media playlist is available from BASS_ChannelGetTags with the BASS_TAG_HLS_EXTINF tag type. 
            If present, the ID3v2 tags can/will change with each segment. A sync can be set to be informed of when a new segment starts downloading, which could be used to refresh the tags. 
            The current segment's sequence number is available from <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> with BASS_FILEPOS_HLS_SEGMENT.</para>
            <para>A DOWNLOADPROC callback function can be used to receive the downloaded data from all of the segments. When the data is in an MPEG-TS container, the audio data will be extracted from the container before being passed to the callback function.</para>
            <para>Master playlists are supported, but BASSHLS will simply play the first entry from them. If you would like to play a different entry (eg. perhaps for a different bitrate), you could download the master playlist separately and then extract the wanted entry's URL from it and pass that to BASSHLS.</para>
            <para>The BASS_STREAM_BLOCK flag is applied automatically to HLS streams, which means only a small amount of the downloaded data will be kept in memory. Be careful not to stop/pause the stream for too long, otherwise the connection may timeout due to there being no activity.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Hls.BassHls.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Hls.BassHls.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Hls.BassHls.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BassMidi">
            <summary>
            BASS .NET API wrapper for BASSMIDI.
            <para>Requires: bassmidi.dll - BASSMIDI Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSMIDI is an extension to the BASS audio library, enabling the playing of MIDI files (Musical Instrument Digital Interface), using SF2 soundfonts to provide the sounds.</para>
            <para>The MIDI format is used in very much the same way as any of the built-in BASS	stream formats - simply call the MIDI stream creation function instead of the BASS built-in functions. 
            The BASS plugin system (see BASS_PluginLoad) is also supported.</para>
            <para>SF2 soundfonts are used to provide the sounds. There are several soundfonts available on the internet. 
            One example (Chorium) is available from the BASS webpage. On Win32, the Creative 4MB/2MB soundfont (CT4MGM.SF2/CT2MGM.SF2) will be used by default when it's present (in the Windows system directory).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Creates a sample stream to render real-time MIDI events.
            </summary>
            <param name="channels">The number of MIDI channels: 1 (min) - 128 (max).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_MIDI_ASYNC</term><description>Process events asynchronously in <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> calls. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NODRUMPARAM</term><description>Do not apply default per-drum reverb and chorus levels and instead set them all to full. The default is to set different levels for different types of drum, eg. lower levels on kick drums. The levels can subsequently be changed via the MIDI_EVENT_DRUM_REVERB and MIDI_EVENT_DRUM_CHORUS events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but will only take effect upon a program change or system reset.</description></item>
            <item><term>BASS_MIDI_NOFX</term><description>Disable reverb and chorus processing, saving some CPU time. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOSYSRESET</term><description>Ignore system reset events (MIDI_EVENT_SYSTEM) when the system mode is unchanged. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOTEOFF1</term><description>Only release the oldest instance upon a note off event (MIDI_EVENT_NOTE with velocity=0) when there are overlapping instances of the note. Otherwise all instances are released. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            </list>
            </param>
            <param name="freq">Sample rate (in Hz) to render/play the MIDI at (0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call; 1 = the device's current output rate or the BASS_Init rate if that is not available).</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function creates a stream solely for real-time MIDI events. As it's not based on any file, the stream has no predetermined length and is never-ending. Seeking isn't possible, but it is possible to reset everything, including playback buffer, 
            by calling <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> (restart = <see langword="true"/>) or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> (pos = 0).</para>
            <para>MIDI events are applied using the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> function. If the stream is being played (it's not a decoding channel), then there will be some delay in the effect of the events being heard. 
            This latency can be reduced by making use of the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> and <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATEPERIOD"/> options.</para>
            <para>Channel 10 (if it exists) defaults to percussion/drums and the rest melodic, otherwise they are all melodic. That can be changed using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> and the MIDI_EVENT_DRUMS event.</para>
            <para>Soundfonts provide the sounds that are used to render a MIDI stream. A default soundfont configuration is applied initially to the new MIDI stream, which can subsequently be overriden using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/>.</para>
            <para>To play a MIDI file, use <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="channels"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="freq"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Creates a sample stream from a MIDI sound file.
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_MIDI_ASYNC</term><description>Process events asynchronously in <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> calls. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYEND</term><description>Let the sound decay naturally (including reverb) instead of stopping abruptly at the end of the events, including when looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYSEEK</term><description>Let the old sound decay naturally (including reverb) when changing the position, including looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but it should generally only be used in <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> calls to have it applied to particular position changes, eg. custom loops.</description></item>
            <item><term>BASS_MIDI_NOCROP</term><description>Do not remove empty space (containing no events) from the end of the file.</description></item>
            <item><term>BASS_MIDI_NODRUMPARAM</term><description>Do not apply default per-drum reverb and chorus levels and instead set them all to full. The default is to set different levels for different types of drum, eg. lower levels on kick drums. The levels can subsequently be changed via the MIDI_EVENT_DRUM_REVERB and MIDI_EVENT_DRUM_CHORUS events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but will only take effect upon a program change or system reset.</description></item>
            <item><term>BASS_MIDI_NOFX</term><description>Disable reverb and chorus processing, saving some CPU time. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOSYSRESET</term><description>Ignore system reset events (MIDI_EVENT_SYSTEM) when the system mode is unchanged. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOTEOFF1</term><description>Only release the oldest instance upon a note off event (MIDI_EVENT_NOTE with velocity=0) when there are overlapping instances of the note. Otherwise all instances are released. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            </list>
            </param>
            <param name="freq">Sample rate (in Hz) to render/play the MIDI at (0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call; 1 = the device's current output rate or the BASS_Init rate if that is not available).</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>BASSMIDI supports format 0/1/2 MIDI files. In the case of format 2, the tracks are rendered/played one after another. RIFF MIDI (RMID) files are also supported. The General MIDI standard events are supported, as are several Roland GS and Yamaha XG NRPN and SysEx events. A full list of supported MIDI events can be found in the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> documentation.
            <para>A MIDI stream will have 16 MIDI channels by default, but may have more if the MIDI port meta-event (21h) is used in the file. Each port adds 16 channels: port 0 = channels 1-16, port 1 = channels 17-32, etc. Up to 8 ports are supported for a maximum of 128 channels, with any higher ports being mapped to port 0 (channels 1-16). Channel 10 in each port's block of 16 channels defaults to being a drum channel.</para>
            <para>Soundfonts provide the sounds that are used to render a MIDI stream. A default soundfont configuration is applied initially to the new MIDI stream, which can subsequently be overriden using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/>. 
            By default, with the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIDI_AUTOFONT</see> config option enabled, BASSMIDI will also look for a soundfont of the same name as the MIDI file. For example, if the MIDI is "afile.mid", then it will look for a "afile.sf2" (or "afile.mid.sf2"). Note that a MIDI stream can have multiple soundfonts stacked, each providing different presets, for example.</para>
            <para>As well as the standard byte/time-based positioning, MIDI tick-based positioning is also supported. The BASS_POS_MIDI_TICK "mode" can be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> to deal in ticks.</para>
            <para>Marker, instrument name, cue and lyric events can be retrieved via the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/> function. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)">Syncs</see> (BASS_SYNC_MIDI_MARKER, BASS_SYNC_MIDI_CUE, BASS_SYNC_MIDI_LYRIC, BASS_SYNC_MIDI_EVENT, BASS_SYNC_MIDI_TICK) 
            can also be used to be notified of their occurrence.</para>
            <para>The texts of each track in the MIDI file are available via the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_MIDI_TRACK"/> + track tag, where track=0 is the first track. A pointer to a series of null-terminated strings is given, the final string ending with a double null. 
            The first text in the first track is generally the title of the MIDI file. RIFF MIDI tags are also available via the standard <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_INFO"/> tag.
            In addition you might also use the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetMidiTrackText(System.Int32,System.Int32)"/> method to retrieve the track text.</para>
            <para>Unlike with most stream formats, the entire MIDI file is loaded to memory. This means the file can be deleted or moved after calling this function.</para>
            <para>As well as providing dedicated stream creation functions, BASSMIDI supports the BASS plugin system, adding MIDI file support to the standard BASS stream creation functions - <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>. 
            This is enabled using the BASS_PluginLoad function.</para>
            <para>MIDI streams created via the plugin system use the sample rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored. On Android and iOS, sinc interpolation requires a NEON-supporting CPU; the BASS_MIDI_SINCINTER flag will otherwise be ignored. Sinc interpolation is not available on Windows CE.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="file"/> is not a valid URL.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="freq"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Creates a sample stream from a MIDI memory IntPtr.
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_MIDI_ASYNC</term><description>Process events asynchronously in <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> calls. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYEND</term><description>Let the sound decay naturally (including reverb) instead of stopping abruptly at the end of the events, including when looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYSEEK</term><description>Let the old sound decay naturally (including reverb) when changing the position, including looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but it should generally only be used in <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> calls to have it applied to particular position changes, eg. custom loops.</description></item>
            <item><term>BASS_MIDI_NOCROP</term><description>Do not remove empty space (containing no events) from the end of the file.</description></item>
            <item><term>BASS_MIDI_NODRUMPARAM</term><description>Do not apply default per-drum reverb and chorus levels and instead set them all to full. The default is to set different levels for different types of drum, eg. lower levels on kick drums. The levels can subsequently be changed via the MIDI_EVENT_DRUM_REVERB and MIDI_EVENT_DRUM_CHORUS events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but will only take effect upon a program change or system reset.</description></item>
            <item><term>BASS_MIDI_NOFX</term><description>Disable reverb and chorus processing, saving some CPU time. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOSYSRESET</term><description>Ignore system reset events (MIDI_EVENT_SYSTEM) when the system mode is unchanged. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOTEOFF1</term><description>Only release the oldest instance upon a note off event (MIDI_EVENT_NOTE with velocity=0) when there are overlapping instances of the note. Otherwise all instances are released. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            </list>
            </param>
            <param name="freq">Sample rate (in Hz) to render/play the MIDI at (0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call; 1 = the device's current output rate or the BASS_Init rate if that is not available).</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>BASSMIDI supports format 0/1/2 MIDI files. In the case of format 2, the tracks are rendered/played one after another. RIFF MIDI (RMID) files are also supported. The General MIDI standard events are supported, as are several Roland GS and Yamaha XG NRPN and SysEx events. A full list of supported MIDI events can be found in the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> documentation.
            <para>A MIDI stream will have 16 MIDI channels by default, but may have more if the MIDI port meta-event (21h) is used in the file. Each port adds 16 channels: port 0 = channels 1-16, port 1 = channels 17-32, etc. Up to 8 ports are supported for a maximum of 128 channels, with any higher ports being mapped to port 0 (channels 1-16). Channel 10 in each port's block of 16 channels defaults to being a drum channel.</para>
            <para>Soundfonts provide the sounds that are used to render a MIDI stream. A default soundfont configuration is applied initially to the new MIDI stream, which can subsequently be overriden using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/>. 
            By default, with the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIDI_AUTOFONT</see> config option enabled, BASSMIDI will also look for a soundfont of the same name as the MIDI file. For example, if the MIDI is "afile.mid", then it will look for a "afile.sf2" (or "afile.mid.sf2"). Note that a MIDI stream can have multiple soundfonts stacked, each providing different presets, for example.</para>
            <para>As well as the standard byte/time-based positioning, MIDI tick-based positioning is also supported. The BASS_POS_MIDI_TICK "mode" can be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> to deal in ticks.</para>
            <para>Marker, instrument name, cue and lyric events can be retrieved via the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/> function. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)">Syncs</see> (BASS_SYNC_MIDI_MARKER, BASS_SYNC_MIDI_CUE, BASS_SYNC_MIDI_LYRIC, BASS_SYNC_MIDI_EVENT, BASS_SYNC_MIDI_TICK) 
            can also be used to be notified of their occurrence.</para>
            <para>The texts of each track in the MIDI file are available via the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_MIDI_TRACK"/> + track tag, where track=0 is the first track. A pointer to a series of null-terminated strings is given, the final string ending with a double null. 
            The first text in the first track is generally the title of the MIDI file. RIFF MIDI tags are also available via the standard <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_INFO"/> tag.
            In addition you might also use the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetMidiTrackText(System.Int32,System.Int32)"/> method to retrieve the track text.</para>
            <para>Unlike with most stream formats, the entire MIDI file is loaded to memory. This means the file can be deleted or moved after calling this function.</para>
            <para>As well as providing dedicated stream creation functions, BASSMIDI supports the BASS plugin system, adding MIDI file support to the standard BASS stream creation functions - <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>. 
            This is enabled using the BASS_PluginLoad function.</para>
            <para>MIDI streams created via the plugin system use the sample rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored. On Android and iOS, sinc interpolation requires a NEON-supporting CPU; the BASS_MIDI_SINCINTER flag will otherwise be ignored. Sinc interpolation is not available on Windows CE.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="memory"/> is not a valid URL.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFileMemory(System.Boolean,System.Byte[],System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="freq"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFile(System.Byte[],System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Creates a sample stream from a MIDI memory byte[].
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="memory">A managed memory location as a byte[].</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_MIDI_ASYNC</term><description>Process events asynchronously in <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> calls. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYEND</term><description>Let the sound decay naturally (including reverb) instead of stopping abruptly at the end of the events, including when looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYSEEK</term><description>Let the old sound decay naturally (including reverb) when changing the position, including looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but it should generally only be used in <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> calls to have it applied to particular position changes, eg. custom loops.</description></item>
            <item><term>BASS_MIDI_NOCROP</term><description>Do not remove empty space (containing no events) from the end of the file.</description></item>
            <item><term>BASS_MIDI_NODRUMPARAM</term><description>Do not apply default per-drum reverb and chorus levels and instead set them all to full. The default is to set different levels for different types of drum, eg. lower levels on kick drums. The levels can subsequently be changed via the MIDI_EVENT_DRUM_REVERB and MIDI_EVENT_DRUM_CHORUS events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but will only take effect upon a program change or system reset.</description></item>
            <item><term>BASS_MIDI_NOFX</term><description>Disable reverb and chorus processing, saving some CPU time. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOSYSRESET</term><description>Ignore system reset events (MIDI_EVENT_SYSTEM) when the system mode is unchanged. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOTEOFF1</term><description>Only release the oldest instance upon a note off event (MIDI_EVENT_NOTE with velocity=0) when there are overlapping instances of the note. Otherwise all instances are released. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            </list>
            </param>
            <param name="freq">Sample rate (in Hz) to render/play the MIDI at (0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call; 1 = the device's current output rate or the BASS_Init rate if that is not available).</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>BASSMIDI supports format 0/1/2 MIDI files. In the case of format 2, the tracks are rendered/played one after another. RIFF MIDI (RMID) files are also supported. The General MIDI standard events are supported, as are several Roland GS and Yamaha XG NRPN and SysEx events. A full list of supported MIDI events can be found in the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> documentation.
            <para>A MIDI stream will have 16 MIDI channels by default, but may have more if the MIDI port meta-event (21h) is used in the file. Each port adds 16 channels: port 0 = channels 1-16, port 1 = channels 17-32, etc. Up to 8 ports are supported for a maximum of 128 channels, with any higher ports being mapped to port 0 (channels 1-16). Channel 10 in each port's block of 16 channels defaults to being a drum channel.</para>
            <para>Soundfonts provide the sounds that are used to render a MIDI stream. A default soundfont configuration is applied initially to the new MIDI stream, which can subsequently be overriden using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/>. 
            By default, with the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIDI_AUTOFONT</see> config option enabled, BASSMIDI will also look for a soundfont of the same name as the MIDI file. For example, if the MIDI is "afile.mid", then it will look for a "afile.sf2" (or "afile.mid.sf2"). Note that a MIDI stream can have multiple soundfonts stacked, each providing different presets, for example.</para>
            <para>As well as the standard byte/time-based positioning, MIDI tick-based positioning is also supported. The BASS_POS_MIDI_TICK "mode" can be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> to deal in ticks.</para>
            <para>Marker, instrument name, cue and lyric events can be retrieved via the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/> function. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)">Syncs</see> (BASS_SYNC_MIDI_MARKER, BASS_SYNC_MIDI_CUE, BASS_SYNC_MIDI_LYRIC, BASS_SYNC_MIDI_EVENT, BASS_SYNC_MIDI_TICK) 
            can also be used to be notified of their occurrence.</para>
            <para>The texts of each track in the MIDI file are available via the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_MIDI_TRACK"/> + track tag, where track=0 is the first track. A pointer to a series of null-terminated strings is given, the final string ending with a double null. 
            The first text in the first track is generally the title of the MIDI file. RIFF MIDI tags are also available via the standard <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_INFO"/> tag.
            In addition you might also use the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetMidiTrackText(System.Int32,System.Int32)"/> method to retrieve the track text.</para>
            <para>Unlike with most stream formats, the entire MIDI file is loaded to memory. This means the file can be deleted or moved after calling this function.</para>
            <para>As well as providing dedicated stream creation functions, BASSMIDI supports the BASS plugin system, adding MIDI file support to the standard BASS stream creation functions - <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>. 
            This is enabled using the BASS_PluginLoad function.</para>
            <para>MIDI streams created via the plugin system use the sample rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored. On Android and iOS, sinc interpolation requires a NEON-supporting CPU; the BASS_MIDI_SINCINTER flag will otherwise be ignored. Sinc interpolation is not available on Windows CE.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="memory"/> is not a valid URL.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)">
            <summary>
            Creates a sample stream from a MIDI file via a user callback function.
            </summary>
            <param name="system">File system to use, which must be <see cref="F:Un4seen.Bass.BASSStreamSystem.STREAMFILE_NOBUFFER"/>, as the entire MIDI file is preloaded.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_MIDI_ASYNC</term><description>Process events asynchronously in <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> calls. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYEND</term><description>Let the sound decay naturally (including reverb) instead of stopping abruptly at the end of the events, including when looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYSEEK</term><description>Let the old sound decay naturally (including reverb) when changing the position, including looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but it should generally only be used in <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> calls to have it applied to particular position changes, eg. custom loops.</description></item>
            <item><term>BASS_MIDI_NOCROP</term><description>Do not remove empty space (containing no events) from the end of the file.</description></item>
            <item><term>BASS_MIDI_NODRUMPARAM</term><description>Do not apply default per-drum reverb and chorus levels and instead set them all to full. The default is to set different levels for different types of drum, eg. lower levels on kick drums. The levels can subsequently be changed via the MIDI_EVENT_DRUM_REVERB and MIDI_EVENT_DRUM_CHORUS events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but will only take effect upon a program change or system reset.</description></item>
            <item><term>BASS_MIDI_NOFX</term><description>Disable reverb and chorus processing, saving some CPU time. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOSYSRESET</term><description>Ignore system reset events (MIDI_EVENT_SYSTEM) when the system mode is unchanged. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOTEOFF1</term><description>Only release the oldest instance upon a note off event (MIDI_EVENT_NOTE with velocity=0) when there are overlapping instances of the note. Otherwise all instances are released. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            </list>
            </param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <param name="freq">Sample rate (in Hz) to render/play the MIDI at (0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call; 1 = the device's current output rate or the BASS_Init rate if that is not available).</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This is a user file version of the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)"/> function and the remarks in its documentation also apply here, except that the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_AUTOFONT"/> config option has no effect. If there is a matching soundfont, it can be applied using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/>.
            <para>As there is no file associated with a user file stream, it's not possible for BASSMIDI to look for a soundfont with the same name as the MIDI file. If there is a matching soundfont, it can be applied using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="system"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported (ie. no WDM drivers).</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <param name="freq"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <param name="freq"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)">
            <summary>
            Creates a sample stream from an MIDI file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
            <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_STREAM_STATUS</term><description>Pass status info (HTTP/ICY tags) from the server to the <paramref name="proc"/> callback during connection. This can be useful to determine the reason for a failure.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_MIDI_ASYNC</term><description>Process events asynchronously in <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> calls. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYEND</term><description>Let the sound decay naturally (including reverb) instead of stopping abruptly at the end of the events, including when looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYSEEK</term><description>Let the old sound decay naturally (including reverb) when changing the position, including looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but it should generally only be used in <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> calls to have it applied to particular position changes, eg. custom loops.</description></item>
            <item><term>BASS_MIDI_NOCROP</term><description>Do not remove empty space (containing no events) from the end of the file.</description></item>
            <item><term>BASS_MIDI_NODRUMPARAM</term><description>Do not apply default per-drum reverb and chorus levels and instead set them all to full. The default is to set different levels for different types of drum, eg. lower levels on kick drums. The levels can subsequently be changed via the MIDI_EVENT_DRUM_REVERB and MIDI_EVENT_DRUM_CHORUS events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but will only take effect upon a program change or system reset.</description></item>
            <item><term>BASS_MIDI_NOFX</term><description>Disable reverb and chorus processing, saving some CPU time. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOSYSRESET</term><description>Ignore system reset events (MIDI_EVENT_SYSTEM) when the system mode is unchanged. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOTEOFF1</term><description>Only release the oldest instance upon a note off event (MIDI_EVENT_NOTE with velocity=0) when there are overlapping instances of the note. Otherwise all instances are released. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            </list>
            </param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="freq">Sample rate (in Hz) to render/play the MIDI at (0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call; 1 = the device's current output rate or the BASS_Init rate if that is not available).</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This is an internet version of the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)"/> function and the remarks in its documentation also apply here, except that the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_AUTOFONT"/> config option has no effect. 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_NONET</term><description>No internet connection could be opened. Can be caused by a bad <see cref="T:Un4seen.Bass.BASSConfig">proxy setting</see>.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="url"/> is not a valid URL.</description></item>
            <item><term>BASS_ERROR_PROTOCOL</term><description>The protocol in <paramref name="url"/> is not supported.</description></item>
            <item><term>BASS_ERROR_SSL</term><description>SSL/HTTPS support is not available.</description></item>
            <item><term>BASS_ERROR_TIMEOUT</term><description>The server did not respond to the request within the timeout period, as set with the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_NET_TIMEOUT</see> config option.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateEvents(Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Creates a sample stream from a sequence of MIDI events.
            </summary>
            <param name="events">The array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/>s containing the event sequence to play (the array should be terminated with a MIDI_EVENT_END event).</param>
            <param name="ppqn">The number of pulses per quarter note (or ticks per beat) value of the MIDI stream to create.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_MIDI_ASYNC</term><description>Process events asynchronously in <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> calls. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYEND</term><description>Let the sound decay naturally (including reverb) instead of stopping abruptly at the end of the events, including when looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_DECAYSEEK</term><description>Let the old sound decay naturally (including reverb) when changing the position, including looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but it should generally only be used in <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> calls to have it applied to particular position changes, eg. custom loops.</description></item>
            <item><term>BASS_MIDI_NODRUMPARAM</term><description>Do not apply default per-drum reverb and chorus levels and instead set them all to full. The default is to set different levels for different types of drum, eg. lower levels on kick drums. The levels can subsequently be changed via the MIDI_EVENT_DRUM_REVERB and MIDI_EVENT_DRUM_CHORUS events. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but will only take effect upon a program change or system reset.</description></item>
            <item><term>BASS_MIDI_NOFX</term><description>Disable reverb and chorus processing, saving some CPU time. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOSYSRESET</term><description>Ignore system reset events (MIDI_EVENT_SYSTEM) when the system mode is unchanged. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_MIDI_NOTEOFF1</term><description>Only release the oldest instance upon a note off event (MIDI_EVENT_NOTE with velocity=0) when there are overlapping instances of the note. Otherwise all instances are released. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            </list>
            </param>
            <param name="freq">Sample rate to render/play the MIDI at (0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call; 1 = the device's current output rate (or the BASS_Init rate if that is not available).</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function creates a stream to play a predefined sequence of MIDI events. Any of the standard MIDI events listed in the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> section can be used, but the MIDI_EVENT_MIXLEVEL, MIDI_EVENT_TRANSPOSE, and MIDI_EVENT_SYSTEMEX events are not available and will be ignored. The sequence should end with a MIDI_EVENT_END event. Multiple tracks are possible via the MIDI_EVENT_END_TRACK event, which signals the end of a track; the next event will be in a new track. Any MIDI_EVENT_TEMPO events should be in the first track.</para>
            <para>The number of MIDI channels in the stream is determined by the highest chan value in the events, with a minimum of 16 and a maximum of 128. By default, channel 10 will be percussion/drums and the rest melodic, but the MIDI_EVENT_DEFDRUMS event can be used to change that (should be in tick 0 to apply from start).</para>
            <para>The event sequence is copied, so the events array does not need to persist beyond the function call.</para>
            <para>Soundfonts provide the sounds that are used to render a MIDI stream. A default soundfont configuration is applied initially to the new MIDI stream, which can subsequently be overridden using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_NONET</term><description>No internet connection could be opened. Can be caused by a bad <see cref="T:Un4seen.Bass.BASSConfig">proxy setting</see>.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="events"/> are not valid.</description></item>
            <item><term>BASS_ERROR_TIMEOUT</term><description>The server did not respond to the request within the timeout period, as set with the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_NET_TIMEOUT</see> config option.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMarkInternal(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.MIDI_MARK_INTERNAL@)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="type"></param>
            <param name="index"></param>
            <param name="mark"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)">
            <summary>
            Retrieves a marker from a MIDI stream.
            </summary>
            <param name="handle">The MIDI stream to retrieve the marker from.</param>
            <param name="type">The type of marker to retrieve, one of the following (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker"/>):
            <list type="table">
            <item><term>BASS_MIDI_MARK_COPY</term><description>Copyright notice events (MIDI meta event 2).</description></item>
            <item><term>BASS_MIDI_MARK_CUE</term><description>Cue events (MIDI meta event 07).</description></item>
            <item><term>BASS_MIDI_MARK_INST</term><description>Instrument name events (MIDI meta event 4).</description></item>
            <item><term>BASS_MIDI_MARK_KEYSIG</term><description>Key signature events (MIDI meta event 89). The marker text is in the form of "a b", where a is the number of sharps (if positive) or flats (if negative), and b signifies major (if 0) or minor (if 1).</description></item>
            <item><term>BASS_MIDI_MARK_LYRIC</term><description>Lyric events (MIDI meta event 05).</description></item>
            <item><term>BASS_MIDI_MARK_MARKER</term><description>Marker events (MIDI meta event 06).</description></item>
            <item><term>BASS_MIDI_MARK_TEXT</term><description>Text events (MIDI meta event 01).</description></item>
            <item><term>BASS_MIDI_MARK_TIMESIG</term><description>Time signature events (MIDI meta event 88). The marker text is in the form of "a/b c d", where a is the numerator, b is the denominator, c is the metronome pulse, and d is the number of 32nd notes per MIDI quarter-note.</description></item>
            <item><term>BASS_MIDI_MARK_TRACK</term><description>Track name events (MIDI meta event 3).</description></item>
            <item><term>BASS_MIDI_MARK_TRACKSTART</term><description>Start of a track in a standard MIDI format 2 file. The marker text is the track number (0 = the first).</description></item>
            <item><term>BASS_MIDI_MARK_TICK</term><description>FLAG: get position in ticks instead of bytes.</description></item>
            </list>
            </param>
            <param name="index">The marker to retrieve... 0 = the first.</param>
            <param name="mark">Instance of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK"/> class to receive the marker details.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The markers are ordered chronologically.
            <para><see cref="T:Un4seen.Bass.BASSSync">BASS_SYNC_MIDI_xxx Syncs</see> can be used to be informed of when markers are encountered during playback.</para>
            <para>If a lyric marker text begins with a '/' (slash) character, that means a new line should be started. If the text begins with a '\' (backslash) character, the display should be cleared. 
            Lyrics can sometimes be found in BASS_MIDI_MARK_TEXT instead of BASS_MIDI_MARK_LYRIC markers.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="index"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            List a MIDI stream's markers:
            <code lang="C#">
            BASS_MIDI_MARK mark = new BASS_MIDI_MARK();
            int idx = 0;
            while (BassMidi.BASS_MIDI_StreamGetMark(handle, BASSMIDIMarker.BASS_MIDI_MARK_MARKER, idx, mark))
            {
              idx++;
              Console.WriteLine("{0}.Marker: {1}", idx, mark);
            }
            </code>
            <code lang="VB">
            Dim mark As New BASS_MIDI_MARK()
            Dim idx As Integer = 0
            While BassMidi.BASS_MIDI_StreamGetMark(handle, BASSMIDIMarker.BASS_MIDI_MARK_MARKER, idx, mark)
              idx += 1
              Console.WriteLine("{0}.Marker: {1}", idx, mark)
            End While
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32)">
            <summary>
            Retrieves a marker from a MIDI stream.
            </summary>
            <param name="handle">The MIDI stream to retrieve the marker from.</param>
            <param name="type">The type of marker to retrieve, one of the following (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker"/>):
            <list type="table">
            <item><term>BASS_MIDI_MARK_COPY</term><description>Copyright notice events (MIDI meta event 2).</description></item>
            <item><term>BASS_MIDI_MARK_CUE</term><description>Cue events (MIDI meta event 07).</description></item>
            <item><term>BASS_MIDI_MARK_INST</term><description>Instrument name events (MIDI meta event 4).</description></item>
            <item><term>BASS_MIDI_MARK_KEYSIG</term><description>Key signature events (MIDI meta event 89). The marker text is in the form of "a b", where a is the number of sharps (if positive) or flats (if negative), and b signifies major (if 0) or minor (if 1).</description></item>
            <item><term>BASS_MIDI_MARK_LYRIC</term><description>Lyric events (MIDI meta event 05).</description></item>
            <item><term>BASS_MIDI_MARK_MARKER</term><description>Marker events (MIDI meta event 06).</description></item>
            <item><term>BASS_MIDI_MARK_TEXT</term><description>Text events (MIDI meta event 01).</description></item>
            <item><term>BASS_MIDI_MARK_TIMESIG</term><description>Time signature events (MIDI meta event 88). The marker text is in the form of "a/b c d", where a is the numerator, b is the denominator, c is the metronome pulse, and d is the number of 32nd notes per MIDI quarter-note.</description></item>
            <item><term>BASS_MIDI_MARK_TRACK</term><description>Track name events (MIDI meta event 3).</description></item>
            <item><term>BASS_MIDI_MARK_TRACKSTART</term><description>Start of a track in a standard MIDI format 2 file. The marker text is the track number (0 = the first).</description></item>
            <item><term>BASS_MIDI_MARK_TICK</term><description>FLAG: get position in ticks instead of bytes.</description></item>
            </list>
            </param>
            <param name="index">The marker to retrieve... 0 = the first.</param>
            <returns>On success, an instance of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK"/> class is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The markers are ordered chronologically.
            <para><see cref="T:Un4seen.Bass.BASSSync">BASS_SYNC_MIDI_xxx Syncs</see> can be used to be informed of when markers are encountered during playback.</para>
            <para>If a lyric marker text begins with a '/' (slash) character, that means a new line should be started. If the text begins with a '\' (backslash) character, the display should be cleared. 
            Lyrics can sometimes be found in BASS_MIDI_MARK_TEXT instead of BASS_MIDI_MARK_LYRIC markers.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> in not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="index"/> in not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            List a MIDI stream's markers:
            <code lang="C#">
            int idx = 0;
            BASS_MIDI_MARK mark;
            while ((mark = BassMidi.BASS_MIDI_StreamGetMark(handle, BASSMIDIMarker.BASS_MIDI_MARK_MARKER, idx)) != null)
            {
              idx++;
              Console.WriteLine("{0}.Marker: {1}", idx, mark);
            }
            </code>
            <code lang="VB">
            Dim idx As Integer = 0
            Dim mark As BASS_MIDI_MARK
            While True
              mark = BassMidi.BASS_MIDI_StreamGetMark(stream, BASSMIDIMarker.BASS_MIDI_MARK_MARKER, idx)
              If mark Is Nothing Then
                Exit While
              End If
              idx += 1
              Console.WriteLine("{0}.Marker: {1}", idx, mark)
            End While
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMarksInternal(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,Un4seen.Bass.AddOn.Midi.MIDI_MARK_INTERNAL[])">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="track"></param>
            <param name="type"></param>
            <param name="marks"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMarks(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker)">
            <summary>
            Retrieves the markers in a MIDI file stream.
            </summary>
            <param name="handle">The MIDI stream to retrieve the markers from.</param>
            <param name="track">The track to get the markers from... 0 = 1st track, -1 = all tracks.</param>
            <param name="type">The type of marker to retrieve, one of the following (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker"/>):
            <list type="table">
            <item><term>BASS_MIDI_MARK_COPY</term><description>Copyright notice events (MIDI meta event 2).</description></item>
            <item><term>BASS_MIDI_MARK_CUE</term><description>Cue events (MIDI meta event 07).</description></item>
            <item><term>BASS_MIDI_MARK_INST</term><description>Instrument name events (MIDI meta event 4).</description></item>
            <item><term>BASS_MIDI_MARK_KEYSIG</term><description>Key signature events (MIDI meta event 89). The marker text is in the form of "a b", where a is the number of sharps (if positive) or flats (if negative), and b signifies major (if 0) or minor (if 1).</description></item>
            <item><term>BASS_MIDI_MARK_LYRIC</term><description>Lyric events (MIDI meta event 05).</description></item>
            <item><term>BASS_MIDI_MARK_MARKER</term><description>Marker events (MIDI meta event 06).</description></item>
            <item><term>BASS_MIDI_MARK_TEXT</term><description>Text events (MIDI meta event 01).</description></item>
            <item><term>BASS_MIDI_MARK_TIMESIG</term><description>Time signature events (MIDI meta event 88). The marker text is in the form of "a/b c d", where a is the numerator, b is the denominator, c is the metronome pulse, and d is the number of 32nd notes per MIDI quarter-note.</description></item>
            <item><term>BASS_MIDI_MARK_TRACK</term><description>Track name events (MIDI meta event 3).</description></item>
            <item><term>BASS_MIDI_MARK_TRACKSTART</term><description>Start of a track in a standard MIDI format 2 file. The marker text is the track number (0 = the first).</description></item>
            <item><term>BASS_MIDI_MARK_TICK</term><description>FLAG: get position in ticks instead of bytes.</description></item>
            </list>
            </param>
            <returns>On success, an array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK"/> instances is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The markers are ordered chronologically, and by track number (lowest first) if multiple markers have the same position.</para>
            <para>SYNCs can be used to be informed of when markers are encountered during playback.</para>
            <para>If a lyric marker text begins with a / (slash) character, that means a new line should be started. If the text begins with a \ (backslash) character, the display should be cleared. Lyrics can sometimes be found in BASS_MIDI_MARK_TEXT instead of BASS_MIDI_MARK_LYRIC markers.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="track"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMarksCount(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker)">
            <summary>
            Retrieves the number of markers in a MIDI file stream.
            </summary>
            <param name="handle">The MIDI stream to retrieve the markers from.</param>
            <param name="track">The track to get the markers from... 0 = 1st track, -1 = all tracks.</param>
            <param name="type">The type of marker to retrieve, one of the following (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker"/>):
            <list type="table">
            <item><term>BASS_MIDI_MARK_COPY</term><description>Copyright notice events (MIDI meta event 2).</description></item>
            <item><term>BASS_MIDI_MARK_CUE</term><description>Cue events (MIDI meta event 07).</description></item>
            <item><term>BASS_MIDI_MARK_INST</term><description>Instrument name events (MIDI meta event 4).</description></item>
            <item><term>BASS_MIDI_MARK_KEYSIG</term><description>Key signature events (MIDI meta event 89). The marker text is in the form of "a b", where a is the number of sharps (if positive) or flats (if negative), and b signifies major (if 0) or minor (if 1).</description></item>
            <item><term>BASS_MIDI_MARK_LYRIC</term><description>Lyric events (MIDI meta event 05).</description></item>
            <item><term>BASS_MIDI_MARK_MARKER</term><description>Marker events (MIDI meta event 06).</description></item>
            <item><term>BASS_MIDI_MARK_TEXT</term><description>Text events (MIDI meta event 01).</description></item>
            <item><term>BASS_MIDI_MARK_TIMESIG</term><description>Time signature events (MIDI meta event 88). The marker text is in the form of "a/b c d", where a is the numerator, b is the denominator, c is the metronome pulse, and d is the number of 32nd notes per MIDI quarter-note.</description></item>
            <item><term>BASS_MIDI_MARK_TRACK</term><description>Track name events (MIDI meta event 3).</description></item>
            <item><term>BASS_MIDI_MARK_TRACKSTART</term><description>Start of a track in a standard MIDI format 2 file. The marker text is the track number (0 = the first).</description></item>
            <item><term>BASS_MIDI_MARK_TICK</term><description>FLAG: get position in ticks instead of bytes.</description></item>
            </list>
            </param>
            <returns>On success, the number of markers is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="track"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)">
            <summary>
            Applies an event to a MIDI stream.
            </summary>
            <param name="handle">The MIDI stream to apply the event to (as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>).</param>
            <param name="chan">The MIDI channel to apply the event to... 0 = channel 1.</param>
            <param name="eventtype">The event to apply (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for details).</param>
            <param name="param">The event parameter (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for details).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Apart from the "global" events, all events apply only to the specified MIDI channel.</para>
            <para>Except for the "non-MIDI" events, events applied to a MIDI file stream can subsequently be overridden by events in the file itself, and will also be overridden when seeking or looping. That can be avoided by using additional channels, allocated via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CHANS"/> attribute.</para>
            <para>Event syncs (BASS_SYNC_MIDI_xxx, see <see cref="T:Un4seen.Bass.BASSSync"/>) are not triggered by this function. If sync triggering is wanted, <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> can be used instead.</para>
            <para>If the MIDI stream is being played (it's not a decoding channel), then there will be some delay in the effect of the event being heard. 
            This latency can be reduced by making use of the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_BUFFER</see> and <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_UPDATEPERIOD</see> config options when creating the stream.</para>
            <para>If multiple events need to be applied at the same time, <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> can be used instead of this function.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One of the other parameters is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play the middle C note (key 60) with a velocity of 100, on channel 1 for 2 seconds:
            <code lang="C#">
            // press the key
            BassMidi.BASS_MIDI_StreamEvent(handle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, 60, 100);
            // wait 2 seconds
            Thread.Sleep(2000);
            // release the key
            BassMidi.BASS_MIDI_StreamEvent(handle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, 60);
            </code>
            <code lang="VB">
            ' press the key
            BassMidi.BASS_MIDI_StreamEvent(handle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, 60, 100)
            ' wait 2 seconds
            Thread.Sleep(2000)
            ' release the key
            BassMidi.BASS_MIDI_StreamEvent(handle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, 60)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Byte,System.Byte)">
            <summary>
            Applies an event to a MIDI stream.
            </summary>
            <param name="handle">The MIDI stream to apply the event to (as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>).</param>
            <param name="chan">The MIDI channel to apply the event to... 0 = channel 1.</param>
            <param name="eventtype">The event to apply (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for details).</param>
            <param name="loParam">The event parameter (LOBYTE), (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for details).</param>
            <param name="hiParam">The event parameter (HIBYTE), (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for details).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Apart from the "global" events, all events apply only to the specified MIDI channel.</para>
            <para>Except for the "non-MIDI" events, events applied to a MIDI file stream can subsequently be overridden by events in the file itself, and will also be overridden when seeking or looping. That can be avoided by using additional channels, allocated via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CHANS"/> attribute.</para>
            <para>Event syncs (BASS_SYNC_MIDI_xxx, see <see cref="T:Un4seen.Bass.BASSSync"/>) are not triggered by this function. If sync triggering is wanted, <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> can be used instead.</para>
            <para>If the MIDI stream is being played (it's not a decoding channel), then there will be some delay in the effect of the event being heard. 
            This latency can be reduced by making use of the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_BUFFER</see> and <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_UPDATEPERIOD</see> config options when creating the stream.</para>
            <para>If multiple events need to be applied at the same time, <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> can be used instead of this function.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One of the other parameters is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play the middle C note (key 60) with a velocity of 100, on channel 1 for 2 seconds:
            <code lang="C#">
            // press the key
            BassMidi.BASS_MIDI_StreamEvent(handle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, 60, 100);
            // wait 2 seconds
            Thread.Sleep(2000);
            // release the key
            BassMidi.BASS_MIDI_StreamEvent(handle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, 60);
            </code>
            <code lang="VB">
            ' press the key
            BassMidi.BASS_MIDI_StreamEvent(handle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, 60, 100)
            ' wait 2 seconds
            Thread.Sleep(2000)
            ' release the key
            BassMidi.BASS_MIDI_StreamEvent(handle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, 60)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[])">
            <summary>
            Applies any number of events to a MIDI stream (BASS_MIDI_EVENTS_STRUCT).
            </summary>
            <param name="handle">The MIDI stream to apply the events to (as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>).</param>
            <param name="flags">BASS_MIDI_EVENTS_STRUCT, with optional flags (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode"/>):
            <list type="table">
            <item><term>BASS_MIDI_EVENTS_RAW</term><description>Raw MIDI event data, as would be sent to a MIDI device. Running status is supported. To overcome the 16 channel limit, the event data's channel information can optionally be overridden by adding the new channel number to this parameter, where +1 = the 1st channel.</description></item>
            <item><term>BASS_MIDI_EVENTS_STRUCT</term><description>An array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> structures.</description></item>
            <item><term>BASS_MIDI_EVENTS_NORSTATUS</term><description>Flag: Disable running status, meaning each event must include a status byte. Only applicable with BASS_MIDI_EVENTS_RAW.</description></item>
            <item><term>BASS_MIDI_EVENTS_SYNC</term><description>Flag: Trigger <see cref="T:Un4seen.Bass.BASSSync">BASS_SYNC_MIDI_xxx</see> syncs for the processed events (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>).</description></item>
            </list>
            </param>
            <param name="events">The event data (an array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> structures).</param>
            <returns>If successful, the number of events processed is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Events applied to a MIDI file stream can subsequently be overridden by events in the file itself, and will also be overridden when seeking or looping. That can be avoided by using additional channels, allocated via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CHANS"/> attribute.</para>
            <para>If the MIDI stream is being played (it's not a decoding channel), then there will be some delay in the effect of the event being heard. 
            This latency can be reduced by making use of the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_BUFFER</see> and <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_UPDATEPERIOD</see> config options when creating the stream.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="flags"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,System.Int32,System.Byte[])">
            <summary>
            Applies any number of events to a MIDI stream (BASS_MIDI_EVENTS_RAW).
            </summary>
            <param name="handle">The MIDI stream to apply the events to (as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>).</param>
            <param name="flags">BASS_MIDI_EVENTS_RAW, with optional flags (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode"/>):
            <list type="table">
            <item><term>BASS_MIDI_EVENTS_RAW</term><description>Raw MIDI event data, as would be sent to a MIDI device. Running status is supported. To overcome the 16 channel limit, the event data's channel information can optionally be overridden by adding the new channel number to this parameter, where +1 = the 1st channel.</description></item>
            <item><term>BASS_MIDI_EVENTS_STRUCT</term><description>An array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> structures.</description></item>
            <item><term>BASS_MIDI_EVENTS_NORSTATUS</term><description>Flag: Disable running status, meaning each event must include a status byte. Only applicable with BASS_MIDI_EVENTS_RAW.</description></item>
            <item><term>BASS_MIDI_EVENTS_SYNC</term><description>Flag: Trigger <see cref="T:Un4seen.Bass.BASSSync">BASS_SYNC_MIDI_xxx</see> syncs for the processed events (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>).</description></item>
            </list>
            </param>
            <param name="chan">To overcome the 16 channel limit, the event data's channel information can optionally be overridden by adding the new channel number to this parameter, where 1 = the 1st channel - else leave to 0.</param>
            <param name="events">The event data (raw MIDI event data, as would be sent to a MIDI device).</param>
            <returns>If successful, the number of events processed is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Events applied to a MIDI file stream can subsequently be overridden by events in the file itself, and will also be overridden when seeking or looping. That can be avoided by using additional channels, allocated via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CHANS"/> attribute.</para>
            <para>If the MIDI stream is being played (it's not a decoding channel), then there will be some delay in the effect of the event being heard. 
            This latency can be reduced by making use of the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_BUFFER</see> and <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_UPDATEPERIOD</see> config options when creating the stream.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="flags"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Applies any number of events to a MIDI stream (BASS_MIDI_EVENTS_RAW).
            </summary>
            <param name="handle">The MIDI stream to apply the events to (as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>).</param>
            <param name="flags">BASS_MIDI_EVENTS_RAW, with optional flags (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode"/>):
            <list type="table">
            <item><term>BASS_MIDI_EVENTS_RAW</term><description>Raw MIDI event data, as would be sent to a MIDI device. Running status is supported. To overcome the 16 channel limit, the event data's channel information can optionally be overridden by adding the new channel number to this parameter, where +1 = the 1st channel.</description></item>
            <item><term>BASS_MIDI_EVENTS_STRUCT</term><description>An array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> structures.</description></item>
            <item><term>BASS_MIDI_EVENTS_NORSTATUS</term><description>Flag: Disable running status, meaning each event must include a status byte. Only applicable with BASS_MIDI_EVENTS_RAW.</description></item>
            <item><term>BASS_MIDI_EVENTS_SYNC</term><description>Flag: Trigger <see cref="T:Un4seen.Bass.BASSSync">BASS_SYNC_MIDI_xxx</see> syncs for the processed events (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>).</description></item>
            </list>
            </param>
            <param name="chan">To overcome the 16 channel limit, the event data's channel information can optionally be overridden by adding the new channel number to this parameter, where 1 = the 1st channel - else leave to 0.</param>
            <param name="events">The pointer to the event data (e.g. as received in a <see cref="T:Un4seen.Bass.AddOn.Midi.MIDIINPROC"/>).</param>
            <param name="length">The number of bytes contained in the <paramref name="events"/>.</param>
            <returns>If successful, the number of events processed is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Events applied to a MIDI file stream can subsequently be overridden by events in the file itself, and will also be overridden when seeking or looping. That can be avoided by using additional channels, allocated via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CHANS"/> attribute.</para>
            <para>If the MIDI stream is being played (it's not a decoding channel), then there will be some delay in the effect of the event being heard. 
            This latency can be reduced by making use of the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_BUFFER</see> and <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_UPDATEPERIOD</see> config options when creating the stream.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="flags"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent)">
            <summary>
            Retrieves the current value of an event in a MIDI stream channel.
            </summary>
            <param name="handle">The MIDI stream to retrieve the event from (as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>).</param>
            <param name="chan">The MIDI channel to get the event value from... 0 = channel 1.</param>
            <param name="eventtype">The event value to retrieve (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for details on the available event types and their values).
            With the MIDI_EVENT_NOTE, MIDI_EVENT_KEYPRES, MIDI_EVENT_SCALETUNING and drum key (MIDI_EVENT_DRUM_CUTOFF/etc) events, the HIWORD - use MAKELONG(event,key) - can be used to specify which key/note to get the value from. Special MIDI_EVENT_NOTES and MIDI_EVENT_VOICES events are also available to check how many keys are pressed and how many voices are active, respectively.</param>
            <returns>The event parameter (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for details) if successful - else -1 (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            The MIDI_EVENT_NOTE event value will be 1 if the specified key is pressed and 0 if not. 
            The MIDI_EVENT_NOTES event can be used to check how many keys in total are pressed in the specified channel. 
            If a key is simultaneously pressed multiple times, it will still only be counted once. 
            <para>SYNCs can be used to be informed of when event values change.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One of the other parameters is invalid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetEvents(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[])">
            <summary>
            Retrieves the events in a MIDI file stream.
            </summary>
            <param name="handle">The MIDI stream to get the events from.</param>
            <param name="track">The track to get the events from... 0 = 1st track.</param>
            <param name="filter">The type of event to retrieve (use MIDI_EVENT_NONE to retrieve all events). See <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for a list of possible event types.</param>
            <param name="events">The pointer to an array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> to retrieve the events (<see langword="null"/> = get the number of events without getting the events themselves).</param>
            <returns>If successful, the number of events is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function should first be called with <paramref name="events"/> = <see langword="null"/> to get the number of events, before allocating an array of the required size and retrieving the events.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is for real-time events only, so does not have an event sequence.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="track"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Retrieve all events in the 1st track:
            <code lang="C#">
            int eventCount = BassMidi.BASS_MIDI_StreamGetEvents(_stream, 0, BASSMIDIEvent.MIDI_EVENT_NONE);
            BASS_MIDI_EVENT[] events = new BASS_MIDI_EVENT[eventCount];
            int count = BassMidi.BASS_MIDI_StreamGetEvents(_stream, 0, BASSMIDIEvent.MIDI_EVENT_NONE, events);
            </code>
            <code lang="VB">
            Dim eventCount = BassMidi.BASS_MIDI_StreamGetEvents(_stream, 0, BASSMIDIEvent.MIDI_EVENT_NONE)
            Dim events(eventCount) As BASS_MIDI_EVENT
            Dim count As Integer = BassMidi.BASS_MIDI_StreamGetEvents(_stream, 0, BASSMIDIEvent.MIDI_EVENT_NONE, events)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetEvents(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32,System.Int32)">
            <summary>
            Retrieves a portion of the events in a MIDI stream.
            </summary>
            <param name="handle">The MIDI stream to get the events from.</param>
            <param name="track">The track to get the events from... 0 = 1st track.</param>
            <param name="filter">The type of event to retrieve (use MIDI_EVENT_NONE to retrieve all events). See <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for a list of possible event types.</param>
            <param name="events">The pointer to an array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> to retrieve the events (<see langword="null"/> = get the number of events without getting the events themselves).</param>
            <param name="start">The first event to retrieve.</param>
            <param name="count">The maximum number of events to retrieve.</param>
            <returns>If successful, the number of events is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function should first be called with <paramref name="events"/> = <see langword="null"/> to get the number of events, before allocating an array of the required size and retrieving the events.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is for real-time events only, so does not have an event sequence.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="track"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Retrieve the first 10 events in the 1st track:
            <code lang="C#">
            BASS_MIDI_EVENT[] events = new BASS_MIDI_EVENT[10];
            int count = BassMidi.BASS_MIDI_StreamGetEvents(_stream, 0, BASSMIDIEvent.MIDI_EVENT_NONE, events, 0, 10);
            </code>
            <code lang="VB">
            Dim events(10) As BASS_MIDI_EVENT
            Dim count As Integer = BassMidi.BASS_MIDI_StreamGetEvents(_stream, 0, BASSMIDIEvent.MIDI_EVENT_NONE, events, 0, 10)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetEvents(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent)">
            <summary>
            Retrieves the events in a MIDI file stream.
            </summary>
            <param name="handle">The MIDI stream to get the events from.</param>
            <param name="track">The track to get the events from... 0 = 1st track.</param>
            <param name="filter">The type of event to retrieve (use MIDI_EVENT_NONE to retrieve all events). See <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for a list of possible event types.</param>
            <returns>An array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT"/> configuration entries if successfull - or <see langword="null"/> on error.</returns>
            <remarks>This overload will always return all present event objects.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is for real-time events only, so does not have an event sequence.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="track"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Retrieve all note events in the 2nd track:
            <code lang="C#">
            BASS_MIDI_EVENT[] events = BassMidi.BASS_MIDI_StreamGetEvents(_stream, 1, BASSMIDIEvent.MIDI_EVENT_NOTE);
            </code>
            <code lang="VB">
            Dim events As BASS_MIDI_EVENT() = BassMidi.BASS_MIDI_StreamGetEvents(_stream, 1, BASSMIDIEvent.MIDI_EVENT_NOTE)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetEventsCount(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent)">
            <summary>
            Retrieves the number of events in a MIDI file stream.
            </summary>
            <param name="handle">The MIDI stream to get the events from.</param>
            <param name="track">The track to get the events from... 0 = 1st track.</param>
            <param name="filter">The type of event to retrieve (use MIDI_EVENT_NONE to retrieve all events). See <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for a list of possible event types.</param>
            <returns>If successful, the number of events is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is for real-time events only, so does not have an event sequence.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="track"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)">
            <summary>
            Applies a soundfont configuration to a MIDI stream, or sets the default soundfont configuration.
            </summary>
            <param name="handle">The MIDI stream to apply the soundfonts to... 0 = set default soundfont configuration.</param>
            <param name="fonts">The pointer to an array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT"/> soundfonts to apply.</param>
            <param name="count">The number of elements in the fonts array.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Multiple soundfonts can be stacked, each providing different presets, for example.
            When a preset is present in multiple soundfonts, the earlier soundfont in the array has priority. When a soundfont matching the MIDI file is loaded, that remains loaded when calling this function, and has priority over all other soundfonts.
            When a preset is not available on a non-0 bank in any soundfont, BASSMIDI will try to fall back to bank 0; first the LSB and then the MSB if still unsuccessful.
            <para>Changing the default configuration only affects subsequently created MIDI streams. Existing streams that are using the previous default configuration will continue to use that previous configuration.</para>
            <para>On Windows, the default default configuration will be to use the Creative 4MB (CT4MGM.SF2) or 2MB (CT2MGM.SF2) soundfont when present in the Windows system directory.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>Something in the <paramref name="fonts"/> array is invalid, check the soundfont handles.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // first initialize the fonts
            int font1 = BassMidi.BASS_MIDI_FontInit("afont.sf2");
            int font2 = BassMidi.BASS_MIDI_FontInit("bfont.sf2");
            BASS_MIDI_FONT[] newfonts = { new BASS_MIDI_FONT(font1, -1, 0), new BASS_MIDI_FONT(font2, -1, 0) };
            // now set them
            BassMidi.BASS_MIDI_StreamSetFonts(_stream, newfonts, newfonts.Length);
            </code>
            <code lang="VB">
            ' first initialize the fonts
            Dim font1 As Integer =  BassMidi.BASS_MIDI_FontInit("afont.sf2") 
            Dim font2 As Integer =  BassMidi.BASS_MIDI_FontInit("bfont.sf2") 
            Dim newFonts() As BASS_MIDI_FONT = {New BASS_MIDI_FONT(font1, -1, 0), New BASS_MIDI_FONT(font2, -1, 0)}
            ' now set them
            BassMidi.BASS_MIDI_StreamSetFonts(_stream, newFonts, newFonts.Length)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFontsEx(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX[],System.Int32)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="fonts"></param>
            <param name="count"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX[],System.Int32)">
            <summary>
            Applies a soundfont configuration to a MIDI stream, or sets the default soundfont configuration.
            </summary>
            <param name="handle">The MIDI stream to apply the soundfonts to... 0 = set default soundfont configuration.</param>
            <param name="fonts">The pointer to an array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX"/> soundfonts to apply.</param>
            <param name="count">The number of elements in the fonts array.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Multiple soundfonts can be stacked, each providing different presets, for example.
            When a preset is present in multiple soundfonts, the earlier soundfont in the array has priority. When a soundfont matching the MIDI file is loaded, that remains loaded when calling this function, and has priority over all other soundfonts.
            When a preset is not available on a non-0 bank in any soundfont, BASSMIDI will try to fall back to bank 0; first the LSB and then the MSB if still unsuccessful.
            <para>Changing the default configuration only affects subsequently created MIDI streams. Existing streams that are using the previous default configuration will continue to use that previous configuration.</para>
            <para>On Windows, the default default configuration will be to use the Creative 4MB (CT4MGM.SF2) or 2MB (CT2MGM.SF2) soundfont when present in the Windows system directory.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>Something in the <paramref name="fonts"/> array is invalid, check the soundfont handles.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set a MIDI stream to use preset 20 from one soundfont for program 10 on bank 0, and all available presets from another soundfont:
            <code lang="C#">
            int font1 = BassMidi.BASS_MIDI_FontInit("afont.sf2");
            int font2 = BassMidi.BASS_MIDI_FontInit("bfont.sf2");
            BASS_MIDI_FONTEX[] fonts = new BASS_MIDI_FONTEX[2];
            fonts[0].font = font1;
            fonts[0].spreset = 10; // soundfont preset 20
            fonts[0].sbank = 0; // soundfont bank 0
            fonts[0].dpreset = 10; // destination preset 10
            fonts[0].dbank = 0; // destination bank 0
            fonts[0].dbanklsb = 0; // destination bank LSB 0
            fonts[1].font = font2;
            fonts[1].spreset = -1; // all presets
            fonts[1].sbank = -1; // all banks
            fonts[1].dpreset = -1; // all presets
            fonts[1].dbank = 0; // default banks
            fonts[1].dbanklsb = 0; // destination bank LSB 0
            BASS_MIDI_StreamSetFonts(handle, fonts, 2); // apply it to the stream
            </code>
            <code lang="VB">
            ' first initialize the fonts
            Dim font1 As Integer =  BassMidi.BASS_MIDI_FontInit("afont.sf2") 
            Dim font2 As Integer =  BassMidi.BASS_MIDI_FontInit("bfont.sf2") 
            Dim fonts As BASS_MIDI_FONTEX() = New BASS_MIDI_FONTEX(1) {}
            fonts(0).font = font1
            fonts(0).spreset = 10 ' soundfont preset 20
            fonts(0).sbank = 0 ' soundfont bank 0
            fonts(0).dpreset = 10 ' destination preset 10
            fonts(0).dbank = 0 ' destination bank 0
            fonts(0).dbanklsb = 0 ' destination bank LSB 0
            fonts(1).font = font2
            fonts(1).spreset = -1 ' all presets
            fonts(1).sbank = -1 ' all banks
            fonts(1).dpreset = -1 ' all presets
            fonts(1).dbank = 0 ' default banks
            fonts(1).dbanklsb = 0 ' destination bank LSB 0
            BASS_MIDI_StreamSetFonts(handle, fonts, 2) ' apply it to the stream
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)">
            <summary>
            Retrieves the soundfont configuration of a MIDI stream, or the default soundfont configuration.
            </summary>
            <param name="handle">The MIDI stream to retrieve the soundfont configuration of... 0 = get default soundfont configuration.</param>
            <param name="fonts">An array to retrieve the soundfont configuration.</param>
            <param name="count">The maximum number of elements to retrieve in the fonts array. This and fonts can be 0, to get the number of elements in the soundfont configuration.</param>
            <returns>If successful, the number of soundfonts in the configuration (which can be higher than count) is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>When a soundfont matching the MIDI file is loaded, it will be the first element in the returned configuration.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int fontCount = BassMidi.BASS_MIDI_StreamGetFontsCount(_stream);
            BASS_MIDI_FONT[] fonts = new BASS_MIDI_FONT[fontCount];
            int count = BassMidi.BASS_MIDI_StreamGetFonts(_stream, fonts, fontCount);
            </code>
            <code lang="VB">
            Dim fontCount As Integer = BassMidi.BASS_MIDI_StreamGetFontsCount(_stream)
            Dim fonts(fontCount) As BASS_MIDI_FONT
            Dim count As Integer = BassMidi.BASS_MIDI_StreamGetFonts(_stream, fonts, fontCount)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFonts(System.Int32)">
            <summary>
            Retrieves the soundfont configuration of a MIDI stream, or the default soundfont configuration.
            </summary>
            <param name="handle">The MIDI stream to retrieve the soundfont configuration of... 0 = get default soundfont configuration.</param>
            <returns>An array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT"/> configuration entries if successfull - or <see langword="null"/> on error.</returns>
            <remarks>This overload will always return all used soundfont configuration objects.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_MIDI_FONT[] fonts = BassMidi.BASS_MIDI_StreamGetFonts(_stream);
            </code>
            <code lang="VB">
            Dim fonts As BASS_MIDI_FONT() = BassMidi.BASS_MIDI_StreamGetFonts(_stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFontsEx(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX[],System.Int32)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="fonts"></param>
            <param name="count"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX[],System.Int32)">
            <summary>
            Retrieves the soundfont configuration of a MIDI stream, or the default soundfont configuration.
            </summary>
            <param name="handle">The MIDI stream to retrieve the soundfont configuration of... 0 = get default soundfont configuration.</param>
            <param name="fonts">An array to retrieve the soundfont configuration.</param>
            <param name="count">The maximum number of elements to retrieve in the fonts array. This and fonts can be 0, to get the number of elements in the soundfont configuration.</param>
            <returns>If successful, the number of soundfonts in the configuration (which can be higher than count) is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>When a soundfont matching the MIDI file is loaded, it will be the first element in the returned configuration.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int fontCount = BassMidi.BASS_MIDI_StreamGetFontsCount(_stream);
            BASS_MIDI_FONTEX[] fonts = new BASS_MIDI_FONTEX[fontCount];
            int count = BassMidi.BASS_MIDI_StreamGetFonts(_stream, fonts, fontCount);
            </code>
            <code lang="VB">
            Dim fontCount As Integer = BassMidi.BASS_MIDI_StreamGetFontsCount(_stream)
            Dim fonts(fontCount) As BASS_MIDI_FONTEX
            Dim count As Integer = BassMidi.BASS_MIDI_StreamGetFonts(_stream, fonts, fontCount)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFontsEx(System.Int32)">
            <summary>
            Retrieves the soundfont configuration of a MIDI stream, or the default soundfont configuration.
            </summary>
            <param name="handle">The MIDI stream to retrieve the soundfont configuration of... 0 = get default soundfont configuration.</param>
            <returns>An array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX"/> configuration entries if successfull - or <see langword="null"/> on error.</returns>
            <remarks>This overload will always return all used soundfont configuration objects.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_MIDI_FONTEX[] fonts = BassMidi.BASS_MIDI_StreamGetFontsEx(_stream);
            </code>
            <code lang="VB">
            Dim fonts As BASS_MIDI_FONTEX() = BassMidi.BASS_MIDI_StreamGetFontsEx(_stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFontsEx2(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2[],System.Int32)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="fonts"></param>
            <param name="count"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2[],System.Int32)">
            <summary>
            Retrieves the soundfont configuration of a MIDI stream, or the default soundfont configuration.
            </summary>
            <param name="handle">The MIDI stream to retrieve the soundfont configuration of... 0 = get default soundfont configuration.</param>
            <param name="fonts">An array to retrieve the soundfont configuration.</param>
            <param name="count">The maximum number of elements to retrieve in the fonts array. This and fonts can be 0, to get the number of elements in the soundfont configuration.</param>
            <returns>If successful, the number of soundfonts in the configuration (which can be higher than count) is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>When a soundfont matching the MIDI file is loaded, it will be the first element in the returned configuration.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFontsEx2(System.Int32)">
            <summary>
            Retrieves the soundfont configuration of a MIDI stream, or the default soundfont configuration.
            </summary>
            <param name="handle">The MIDI stream to retrieve the soundfont configuration of... 0 = get default soundfont configuration.</param>
            <returns>An array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2"/> configuration entries if successfull - or <see langword="null"/> on error.</returns>
            <remarks>This overload will always return all used soundfont configuration objects.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFontsCount(System.Int32)">
            <summary>
            Retrieves the number of elements in the soundfont configuration.
            </summary>
            <param name="handle">The MIDI stream to retrieve the soundfont configuration of... 0 = get default soundfont configuration.</param>
            <returns>If successful, the number of soundfonts in the configuration is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetTrackCount(System.Int32)">
            <summary>
            Returns the total number of tracks contained in the MIDI stream.
            </summary>
            <param name="handle">The MIDI stream to retrieve the track count from.</param>
            <returns>The number of tracks contained in the MIDI stream.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamLoadSamples(System.Int32)">
            <summary>
            Preloads the samples required by a MIDI file stream.
            </summary>
            <param name="handle">The MIDI stream handle.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Samples are normally loaded as they are needed while rendering a MIDI stream, which can result in CPU spikes, particularly with packed soundfonts. That generally won't cause any problems, but when smooth/constant performance is critical this function can be used to preload the samples before rendering, so avoiding the need to load them while rendering.</para>
            <para>Preloaded samples can be compacted/unloaded just like any other samples, so it is probably wise to disable the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIDI_COMPACT</see> option when preloading samples, to avoid any chance of the samples subsequently being automatically unloaded.</para>
            <para>This function should not be used while the MIDI stream is being rendered, as that could interrupt the rendering.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is for real-time events only, so it's not possible to know what presets are going to be used. Use <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontLoad(System.Int32,System.Int32,System.Int32)"/> instead.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetChannel(System.Int32,System.Int32)">
            <summary>
            Gets a HSTREAM handle for a MIDI channel (e.g. to set DSP/FX on individual MIDI channels).
            </summary>
            <param name="handle">The midi stream to get a channel from.</param>
            <param name="channel">The MIDI channel... 0 = channel 1. Or one of the following special channels:
            <para>BASS_MIDI_CHAN_CHORUS = -1 : Chorus mix channel. The default chorus processing is replaced by the stream's processing.</para>
            <para>BASS_MIDI_CHAN_REVERB = -2 : Reverb mix channel. The default reverb processing is replaced by the stream's processing.</para>
            <para>BASS_MIDI_CHAN_USERFX = -3 : User effect mix channel.</para>
            </param>
            <returns>If successful, the channel handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>By default, MIDI channels do not have streams assigned to them; a MIDI channel only gets a stream when this function is called, which it then keeps until the MIDI stream is freed. 
            MIDI channel streams can also be freed before then via <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/>. Each MIDI channel stream increases the CPU usage slightly, even if there are no DSP/FX set on them, so for optimal performance they should not be activated when unnecessary</para>
            <para>The MIDI channel streams have a different path to the final mix than the BASSMIDI reverb/chorus processing, which means that the reverb/chorus will not be present in the data received by any DSP/FX set on the streams and nor will the reverb/chorus be applied to the DSP/FX output; 
            the reverb/chorus processing will use the channel's original data.</para>
            <para>The MIDI channel streams can only be used to set DSP/FX on the channels. 
            They cannot be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> to visualise the channels, for example, 
            but that could be achieved via a DSP function instead.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description><paramref name="channel"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Apply some DX8 distortion to channel 1 of a MIDI stream:
            <code lang="C#">
            // get a stream for MIDI channel 1
            int chan1 = BassMidi.BASS_MIDI_StreamGetChannel(midi, 0);
            // set the DX8 distortion effect on it
            int fx = Bass.BASS_ChannelSetFX(chan1, BASSFXType.BASS_FX_DX8_DISTORTION, 0);
            </code>
            <code lang="VB">
            ' get a stream for MIDI channel 1
            Dim chan1 As Integer = BassMidi.BASS_MIDI_StreamGetChannel(midi, 0)
            ' set the DX8 distortion effect on it
            Dim chan1 As Integer = Bass.BASS_ChannelSetFX(chan1, BASSFXType.BASS_FX_DX8_DISTORTION, 0)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFilter(System.Int32,System.Boolean,Un4seen.Bass.AddOn.Midi.MIDIFILTERPROC,System.IntPtr)">
            <summary>
            Sets an event filtering function on a MIDI stream.
            </summary>
            <param name="handle">The MIDI stream handle.</param>
            <param name="seeking">Also filter events when seeking?</param>
            <param name="proc">The callback function... <see langword="null"/> = no filtering.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function allows a MIDI stream to have its events modified during playback via a callback function. 
            The callback function will be called before an event is processed, and it can choose to keep the event as is, or it can modify or drop the event. The filtering can also be applied to events while seeking, so that playback begins in a filtered state after seeking.
            <para>Filtering only applies to a MIDI stream's defined event sequence, not any events that are applied via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> or <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream does not have an event sequence.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetPreset(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT)">
            <summary>
            Retrieves the preset currently in use on a channel of a MIDI stream.
            </summary>
            <param name="handle">The MIDI stream to retrieve the soundfont configuration of... 0 = get default soundfont configuration.</param>
            <param name="chan">The MIDI channel... 0 = channel 1.</param>
            <param name="font">Pointer to a structure to receive the preset information.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function tells what preset from what soundfont is currently being used on a particular MIDI channel.
            That information can be used to get the preset's name from <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetPreset(System.Int32,System.Int32,System.Int32)"/>.
            <para>No preset information will be available for a MIDI channel until a note is played in that channel. 
            The present and bank numbers will not necessarily match the channel's current MIDI_EVENT_PROGRAM and MIDI_EVENT_BANK event values, but rather what the MIDI stream's soundfont configuration maps those event values to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="chan"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No preset is currently in use on the specified MIDI channel.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInitUnicode(System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="file"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInit(System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            Initializes a soundfont from a file (unicode).
            </summary>
            <param name="file">The file name of the sound font (e.g. an .sf2 file).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_MIDI_FONT_LINATTMOD</term><description>Use a linear attack phase in SF2 modulation (pitch/filter) envelopes. Otherwise a convex curve is used. The attack phase is always linear in SFZ envelopes.</description></item>
            <item><term>BASS_MIDI_FONT_LINDECVOL</term><description>Use linear decay and release phases in volume envelopes. Otherwise a concave curve is used. The attack phase is always linear.</description></item>
            <item><term>BASS_MIDI_FONT_MINFX</term><description>Treat the reverb/chorus levels in the soundfont as minimums. The higher of them and the MIDI levels (CC91/93) will be used instead of the sum of both.</description></item>
            <item><term>BASS_MIDI_FONT_MMAP</term><description>Map the file into memory. This flag only applies to SF2 files, not SFZ files (or their samples). It is ignored if the file is too large to be mapped into memory, or if the soundfont is packed as the sample data cannot be played directly from a mapping (it needs to be decoded).</description></item>
            <item><term>BASS_MIDI_FONT_NOFX</term><description>Ignore the reverb/chorus levels in the soundfont and only use the MIDI levels (CC91/93).</description></item>
            <item><term>BASS_MIDI_FONT_NOLIMITS</term><description>Do not limit SF2 generator values to emulate Creative/SoundBlaster hardware.</description></item>
            <item><term>BASS_MIDI_FONT_NORAMPIN</term><description>Never ramp-in the start of a sample in the soundfont. Otherwise a sample will be ramped-in if its data does not begin with a 0 (further away results in a longer ramp). This is only relevant when the volume envelope has no attack phase.</description></item>
            <item><term>BASS_MIDI_FONT_XGDRUMS</term><description>Use bank 127 in the soundfont for XG drum kits. When an XG drum kit is needed, bank 127 in soundfonts that have this flag set will be checked first, before falling back to bank 128 (the standard SF2 drum kit bank) if it is not available there.</description></item>
            </list>
            </param>
            <returns>If successful, the soundfont's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The BASS_UNICODE flag is applied automatically here.
            <para>BASSMIDI uses SF2 and/or SFZ soundfonts to provide the sounds to use in the rendering of MIDI files. Several soundfonts can be found on the internet, including a couple on the BASS website.</para>
            <para>A soundfont needs to be initialized before it can be used to render MIDI streams. Once initialized, a soundfont can be assigned to MIDI streams using the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> function. A single soundfont can be shared by multiple MIDI streams.</para>
            <para>Information on the initialized soundfont can be retrieved using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO)"/>.</para>
            <para>If a soundfont is initialized multiple times, each instance will have its own handle but share the same sample/etc data.</para>
            <para>Soundfonts use PCM sample data as standard, but BASSMIDI can accept any format that is supported by BASS or its add-ons. The <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontPack(System.Int32,System.String,System.String,Un4seen.Bass.BASSFlag)"/> function can be used to compress the sample data in SF2 files. SFZ samples are in separate files and can be compressed using standard encoding tools.</para>
            <para>Using soundfonts that are located somewhere other than the file system is possible via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInitUser(Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,Un4seen.Bass.BASSFlag)"/>.</para>
            <para><b>SF2 support</b></para>
            <para>The SF2 synthesis model is fully supported, as are all SF2 generators. Basic support for the note velocity to filter cutoff (initialFilterFc) and note velocity to volume envelope attack (attackVolEnv) modulators is also included. In each case, multiple modulators in the global/instrument/preset zones is supported but only if they are identical (eg. all linear negative mono). If different types are present on a preset, then the last one (with a non-zero amount) will be used. The SF2 spec's slightly strange default note velocity to filter cutoff modulator is not used.</para>
            <para><b>SFZ support</b></para>
            <para>The following SFZ opcodes are supported: ampeg_attack, ampeg_decay, ampeg_delay, ampeg_hold, ampeg_release, ampeg_sustain, ampeg_vel2attack, ampeg_vel2decay, amplfo_delay/fillfo_delay/pitchlfo_delay, amplfo_depth, amplfo_freq/fillfo_freq/pitchlfo_freq, amp_veltrack, cutoff, default_path, effect1, effect2, end, fileg_attack/pitcheg_attack, fileg_decay/pitcheg_decay, fileg_delay/pitcheg_delay, fileg_depth, fileg_hold/pitcheg_hold, fileg_release/pitcheg_release, fileg_sustain/pitcheg_sustain, fileg_vel2depth, fillfo_depth, fil_veltrack, group, hicc1, hicc64, hikey, hirand, hivel, key, locc1, locc64, lokey, loop_end, loop_mode, loop_start, lorand, lovel, offset, off_by, off_mode, pan, pitcheg_depth, pitchlfo_depth, pitch_keycenter, pitch_keytrack, pitch_veltrack, resonance, sample, seq_length, seq_position, transpose, tune, volume. The fil_type opcode is also supported, but only to confirm that a low pass filter is wanted (the filter will be disabled otherwise). The combined EG and LFO entries in the opcode list reflect that there is a shared EG for pitch/filter and a shared LFO for amplitude/pitch/filter, as is the case in SF2. Information on these (and other) SFZ opcodes can be found at www.sfzformat.com.</para>
            <para>Samples can also be loaded from memory by setting the "sample" opcode to "mem:&lt;address&gt;:&lt;length&gt;", where address and length are both in hexadecimal. The memory should remain valid until the font is freed via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontFree(System.Int32)"/>.</para>
            <para>SFZ files don't have a defined preset or bank number, so they are nominally assigned to preset 0 in bank 0 when loaded, but can be assigned to other presets/banks via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/>.</para>
            <para><b>Platform-specific</b></para>
            <para>The BASS_MIDI_FONT_MMAP option is not available on big-endian systems (eg. PowerPC) as a soundfont's little-endian sample data cannot be played directly from a mapping; its byte order needs to be reversed.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The <paramref name="file"/> could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_MIDI_INCLUDE</term><description>An SFZ #include directive file could not be opened.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // first initialize the fonts
            int font1 = BassMidi.BASS_MIDI_FontInit("afont.sf2");
            int font2 = BassMidi.BASS_MIDI_FontInit("bfont.sf2");
            BASS_MIDI_FONT[] newfonts = new BASS_MIDI_FONT[2];
            newfonts[0] = new BASS_MIDI_FONT(font1, 10, 0);
            newfonts[1] = new BASS_MIDI_FONT(font2, -1, 0);
            // now set them
            BassMidi.BASS_MIDI_StreamSetFonts(_stream, newfonts, 2);
            </code>
            <code lang="VB">
            ' first initialize the fonts
            Dim font1 As Integer = BassMidi.BASS_MIDI_FontInit("afont.sf2")
            Dim font2 As Integer = BassMidi.BASS_MIDI_FontInit("bfont.sf2")
            Dim newfonts(2) As BASS_MIDI_FONT
            newfonts(0) = New BASS_MIDI_FONT(font1, 10, 0)
            newfonts(1) = New BASS_MIDI_FONT(font2, -1, 0)
            BassMidi.BASS_MIDI_StreamSetFonts(_stream, newfonts, 2)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInit(System.String)">
            <summary>
            Initializes a soundfont from a file (unicode).
            </summary>
            <param name="file">The file name of the sound font (e.g. an .sf2 file).</param>
            <returns>If successful, the soundfont's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The BASS_UNICODE flag is applied automatically here.
            <para>BASSMIDI uses SF2 and/or SFZ soundfonts to provide the sounds to use in the rendering of MIDI files. Several soundfonts can be found on the internet, including a couple on the BASS website.</para>
            <para>A soundfont needs to be initialized before it can be used to render MIDI streams. Once initialized, a soundfont can be assigned to MIDI streams using the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> function. A single soundfont can be shared by multiple MIDI streams.</para>
            <para>Information on the initialized soundfont can be retrieved using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO)"/>.</para>
            <para>If a soundfont is initialized multiple times, each instance will have its own handle but share the same sample/etc data.</para>
            <para>Soundfonts use PCM sample data as standard, but BASSMIDI can accept any format that is supported by BASS or its add-ons. The <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontPack(System.Int32,System.String,System.String,Un4seen.Bass.BASSFlag)"/> function can be used to compress the sample data in SF2 files. SFZ samples are in separate files and can be compressed using standard encoding tools.</para>
            <para>Using soundfonts that are located somewhere other than the file system is possible via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInitUser(Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,Un4seen.Bass.BASSFlag)"/>.</para>
            <para><b>SF2 support</b></para>
            <para>The SF2 synthesis model is fully supported, as are all SF2 generators. Basic support for the note velocity to filter cutoff (initialFilterFc) and note velocity to volume envelope attack (attackVolEnv) modulators is also included. In each case, multiple modulators in the global/instrument/preset zones is supported but only if they are identical (eg. all linear negative mono). If different types are present on a preset, then the last one (with a non-zero amount) will be used. The SF2 spec's slightly strange default note velocity to filter cutoff modulator is not used.</para>
            <para><b>SFZ support</b></para>
            <para>The following SFZ opcodes are supported: ampeg_attack, ampeg_decay, ampeg_delay, ampeg_hold, ampeg_release, ampeg_sustain, ampeg_vel2attack, ampeg_vel2decay, amplfo_delay/fillfo_delay/pitchlfo_delay, amplfo_depth, amplfo_freq/fillfo_freq/pitchlfo_freq, amp_veltrack, cutoff, default_path, effect1, effect2, end, fileg_attack/pitcheg_attack, fileg_decay/pitcheg_decay, fileg_delay/pitcheg_delay, fileg_depth, fileg_hold/pitcheg_hold, fileg_release/pitcheg_release, fileg_sustain/pitcheg_sustain, fileg_vel2depth, fillfo_depth, fil_veltrack, group, hicc1, hicc64, hikey, hirand, hivel, key, locc1, locc64, lokey, loop_end, loop_mode, loop_start, lorand, lovel, offset, off_by, off_mode, pan, pitcheg_depth, pitchlfo_depth, pitch_keycenter, pitch_keytrack, pitch_veltrack, resonance, sample, seq_length, seq_position, transpose, tune, volume. The fil_type opcode is also supported, but only to confirm that a low pass filter is wanted (the filter will be disabled otherwise). The combined EG and LFO entries in the opcode list reflect that there is a shared EG for pitch/filter and a shared LFO for amplitude/pitch/filter, as is the case in SF2. Information on these (and other) SFZ opcodes can be found at www.sfzformat.com.</para>
            <para>Samples can also be loaded from memory by setting the "sample" opcode to "mem:&lt;address&gt;:&lt;length&gt;", where address and length are both in hexadecimal. The memory should remain valid until the font is freed via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontFree(System.Int32)"/>.</para>
            <para>SFZ files don't have a defined preset or bank number, so they are nominally assigned to preset 0 in bank 0 when loaded, but can be assigned to other presets/banks via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/>.</para>
            <para><b>Platform-specific</b></para>
            <para>The BASS_MIDI_FONT_MMAP option is not available on big-endian systems (eg. PowerPC) as a soundfont's little-endian sample data cannot be played directly from a mapping; its byte order needs to be reversed.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The <paramref name="file"/> could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // first initialize the fonts
            int font1 = BassMidi.BASS_MIDI_FontInit("afont.sf2");
            int font2 = BassMidi.BASS_MIDI_FontInit("bfont.sf2");
            BASS_MIDI_FONT[] newfonts = new BASS_MIDI_FONT[2];
            newfonts[0] = new BASS_MIDI_FONT(font1, 10, 0);
            newfonts[1] = new BASS_MIDI_FONT(font2, -1, 0);
            // now set them
            BassMidi.BASS_MIDI_StreamSetFonts(_stream, newfonts, 2);
            </code>
            <code lang="VB">
            ' first initialize the fonts
            Dim font1 As Integer = BassMidi.BASS_MIDI_FontInit("afont.sf2")
            Dim font2 As Integer = BassMidi.BASS_MIDI_FontInit("bfont.sf2")
            Dim newfonts(2) As BASS_MIDI_FONT
            newfonts(0) = New BASS_MIDI_FONT(font1, 10, 0)
            newfonts(1) = New BASS_MIDI_FONT(font2, -1, 0)
            BassMidi.BASS_MIDI_StreamSetFonts(_stream, newfonts, 2)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInitUser(Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,Un4seen.Bass.BASSFlag)">
            <summary>
            Initializes a soundfont via user callback functions.
            </summary>
            <param name="procs">The user defined file function (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_MIDI_FONT_LINATTMOD</term><description>Use a linear attack phase in SF2 modulation (pitch/filter) envelopes. Otherwise a convex curve is used. The attack phase is always linear in SFZ envelopes.</description></item>
            <item><term>BASS_MIDI_FONT_LINDECVOL</term><description>Use linear decay and release phases in volume envelopes. Otherwise a concave curve is used. The attack phase is always linear.</description></item>
            <item><term>BASS_MIDI_FONT_NOFX</term><description>Ignore the reverb/chorus levels in the soundfont and only use the MIDI levels (CC91/93).</description></item>
            <item><term>BASS_MIDI_FONT_NOLIMITS</term><description>Do not limit SF2 generator values to emulate Creative/SoundBlaster hardware.</description></item>
            <item><term>BASS_MIDI_FONT_NORAMPIN</term><description>Never ramp-in the start of a sample in the soundfont. Otherwise a sample will be ramped-in if its data does not begin with a 0 (further away results in a longer ramp). This is only relevant when the volume envelope has no attack phase.</description></item>
            <item><term>BASS_MIDI_FONT_XGDRUMS</term><description>Use bank 127 in the soundfont for XG drum kits. When an XG drum kit is needed, bank 127 in soundfonts that have this flag set will be checked first, before falling back to bank 128 (the standard SF2 drum kit bank) if it is not available there.</description></item>
            </list>
            </param>
            <returns>If successful, the soundfont's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The unbuffered file system (STREAMFILE_NOBUFFER) is always used by this function.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_MIDI_INCLUDE</term><description>An SFZ #include directive file could not be opened.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO)">
            <summary>
            Retrieves information on a soundfont.
            </summary>
            <param name="handle">The soundfont to get info on (e.g. as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInit(System.String,Un4seen.Bass.BASSFlag)"/>).</param>
            <param name="info">An instance of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO"/> class to store the information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int font1 = BassMidi.BASS_MIDI_FontInit("afont.sf2");
            BASS_MIDI_FONTINFO fontInfo = new BASS_MIDI_FONTINFO();
            BassMidi.BASS_MIDI_FontGetInfo(font1, fontInfo);
            Console.WriteLine( fontInfo.ToString() );
            </code>
            <code lang="VB">
            Dim font1 As Integer = BassMidi.BASS_MIDI_FontInit("afont.sf2")
            Dim fontInfo As New BASS_MIDI_FONTINFO()
            BassMidi.BASS_MIDI_FontGetInfo(font1, fontInfo)
            Console.WriteLine(fontInfo.ToString())
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetInfo(System.Int32)">
            <summary>
            Retrieves information on a soundfont.
            </summary>
            <param name="handle">The soundfont to get info on (e.g. as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInit(System.String,Un4seen.Bass.BASSFlag)"/>).</param>
            <returns>An instance of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO"/> class on success - else <see langword="null"/>.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontCompact(System.Int32)">
            <summary>
            Compact a soundfont's memory usage.
            </summary>
            <param name="handle">The soundfont to get info on (e.g. as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInit(System.String,Un4seen.Bass.BASSFlag)"/>)... 0 = all soundfonts.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Compacting involves freeing any samples that are currently loaded but unused. The amount of sample data currently loaded can be retrieved using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontFree(System.Int32)">
            <summary>
            Frees a soundfont.
            </summary>
            <param name="handle">The soundfont handle to free (e.g. as returned by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInit(System.String,Un4seen.Bass.BASSFlag)"/>).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>When a soundfont is freed, it is automatically removed from any MIDI streams that are using it.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)">
            <summary>
            Modifies and retrieves a soundfont's flags.
            </summary>
            <param name="handle">The soundfont handle.</param>
            <param name="flags">A combination of these flags:
            <list type="table">
            <item><term>BASS_MIDI_FONT_LINATTMOD</term><description>Use a linear attack phase in SF2 modulation (pitch/filter) envelopes. Otherwise a convex curve is used. The attack phase is always linear in SFZ envelopes.</description></item>
            <item><term>BASS_MIDI_FONT_LINDECVOL</term><description>Use linear decay and release phases in volume envelopes. Otherwise a concave curve is used. The attack phase is always linear.</description></item>
            <item><term>BASS_MIDI_FONT_MINFX</term><description>Treat the reverb/chorus levels in the soundfont as minimums. The higher of them and the MIDI levels (CC91/93) will be used instead of the sum of both.</description></item>
            <item><term>BASS_MIDI_FONT_MMAP</term><description>The file is mapped into memory. This cannot be modified.</description></item>
            <item><term>BASS_MIDI_FONT_NOFX</term><description>Ignore the reverb/chorus levels in the soundfont and only use the MIDI levels (CC91/93).</description></item>
            <item><term>BASS_MIDI_FONT_NOLIMITS</term><description>Do not limit SF2 generator values to emulate Creative/SoundBlaster hardware. This cannot be modified.</description></item>
            <item><term>BASS_MIDI_FONT_NORAMPIN</term><description>Never ramp-in the start of a sample in the soundfont. Otherwise a sample will be ramped-in if its data does not begin with a 0 (further away results in a longer ramp). This is only relevant when the volume envelope has no attack phase.</description></item>
            <item><term>BASS_MIDI_FONT_XGDRUMS</term><description>Use bank 127 in the soundfont for XG drum kits. When an XG drum kit is needed, bank 127 in soundfonts that have this flag set will be checked first, before falling back to bank 128 (the standard SF2 drum kit bank) if it is not available there.</description></item>
            </list>
            </param>
            <param name="mask">The flags (as above) to modify. Flags that are not included in this are left as they are, so it can be set to 0 in order to just retrieve the current flags</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>A soundfont will need to be freed (including any duplicates) and reloaded to modify the BASS_MIDI_FONT_NOLIMITS flag because most of the Creative/SoundBlaster hardware limits are applied when loading a soundfont.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontPackUnicode(System.Int32,System.String,System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="outfile"></param>
            <param name="encoder"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontPack(System.Int32,System.String,System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            Produces a compressed version of a soundfont.
            <para>Unicode version only here (BASS_UNICODE will be used automatically).</para>
            </summary>
            <param name="handle">The soundfont to pack.</param>
            <param name="outfile">Filename for the packed soundfont.</param>
            <param name="encoder">Encoder command-line (e.g. as returned by <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderCommandLine"/>).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_MIDI_PACK_NOHEAD</term><description>Don't send a WAVE header to the encoder. If this flag is used then the sample format (mono 16-bit) must be passed to the encoder some other way, eg. via the command-line.</description></item>
            <item><term>BASS_MIDI_PACK_16BIT</term><description>Reduce 24-bit sample data to 16-bit before encoding.</description></item>
            <item><term>BASS_MIDI_PACK_48KHZ</term><description>Encode the sample data at 48000 Hz, else 44100 Hz. This is applied automatically if 'opus' is present in the encoder command-line. The encoding rate only really makes a difference with lossy codecs.</description></item>
            </list>
            </param>
            <returns>If successful, the <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Standard soundfonts use PCM samples, so they can be quite large, which can be a problem if they're to be distributed. 
            To reduce the size, BASSMIDI can compress the samples using any command-line encoder with STDIN and STDOUT support. 
            Packed soundfonts can be used for rendering by BASSMIDI just like normal soundfonts. 
            They can also be unpacked using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontUnpack(System.Int32,System.String,Un4seen.Bass.BASSFlag)"/>.
            <para>Although any command-line encoder can be used, it is best to use a lossless format like FLAC or WavPack, rather than a lossy one like OGG or MP3. 
            Using a lossless encoder, the packed soundfont will produce exactly the same results as the original soundfont, and will be identical to the original when unpacked. 
            As a compromise between quality and size, the WavPack hybrid/lossy mode also produces good sounding results.</para>
            <para>The encoder must be told (via the command-line) to expect input from STDIN and to send it's output to STDOUT.</para>
            <para>Before using a packed soundfont, the appropriate BASS add-on needs to be loaded via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>. 
            For example, if the samples are FLAC encoded, BASSFLAC would need to be loaded. During rendering, the samples are unpacked as they're needed, which could result in CPU spikes. 
            Where smooth performance is critical, it may be wise to preload the samples using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontLoad(System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamLoadSamples(System.Int32)"/>.</para>
            <para>A soundfont should not be packed while it is being used to render any MIDI streams, as that could delay the rendering. 
            This function only applies to SF2 soundfonts. SFZ samples can be compressed using standard encoding tools.</para>
            <para><b>Platform-specific</b></para>
            <para>This function is not available on iOS or Android.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>This function is not applicable to SFZ soundfonts.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>Couldn't start the encoder. Check that the executable exists.</description></item>
            <item><term>BASS_ERROR_CREATE</term><description>Couldn't create the output file, <paramref name="outfile"/>.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Create a FLAC encoded version of a soundfont:
            <code lang="C#">
            // open original soundfont
            int handle = BassMidi.BASS_MIDI_FontInit( "afile.sf2");
            // produce packed version
            BassMidi.BASS_MIDI_FontPack(handle, "afile.sf2pack", "flac --best -");
            </code>
            <code lang="VB">
            ' open original soundfont
            Dim handle As Integer = BassMidi.BASS_MIDI_FontInit("afile.sf2")
            ' produce packed version
            BassMidi.BASS_MIDI_FontPack(handle, "afile.sf2pack", "flac --best -")
            </code>
            Using the build-in encoder framework:
            <code lang="C#">
            EncoderFLAC flac = new EncoderFLAC(0);
            flac.InputFile = null;	// use STDIN 
            flac.OutputFile = null; // use STDOUT
            // produce packed version
            BassMidi.BASS_MIDI_FontPack(handle, "afile.sf2pack", flac.EncoderCommandLine);
            </code>
            <code lang="VB">
            Dim flac As New EncoderFLAC(0)
            flac.InputFile = Nothing ' use STDIN 
            flac.OutputFile = Nothing ' use STDOUT
            ' produce packed version
            BassMidi.BASS_MIDI_FontPack(handle, "afile.sf2pack", flac.EncoderCommandLine)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontUnpack(System.Int32,System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="outfile"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontUnpack(System.Int32,System.String)">
            <summary>
            Produces a decompressed version of a packed soundfont.
            <para>Unicode version only here (BASS_UNICODE will be used automatically).</para>
            </summary>
            <param name="handle">The soundfont to unpack.</param>
            <param name="outfile">Filename for the unpacked soundfont.</param>
            <returns>If successful, the <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>To unpack a soundfont, the appropriate BASS add-on needs to be loaded (via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>) to decode the samples. 
            For example, if the samples are FLAC encoded, BASSFLAC would need to be loaded. 
            BASS also needs to have been initialized, using <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 
            For just unpacking a soundfont, the "no sound" device could be used.
            <para>A soundfont should not be unpacked while it is being used to render any MIDI streams, as that could delay the rendering.
            <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO)"/> can be used to check if a soundfont is packed.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The soundfont is not packed.</description></item>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called - it needs to be to decode the samples.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The appropriate add-on to decode the samples is not loaded.</description></item>
            <item><term>BASS_ERROR_CREATE</term><description>Couldn't create the output file, <paramref name="outfile"/>.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Unpack a FLAC encoded soundfont:
            <code lang="C#">
            // load FLAC plugin
            Bass.BASS_PluginLoad("bassflac.dll");
            // open soundfont
            int handle = BassMidi.BASS_MIDI_FontInit("afile.sf2pack");
            // produce unpacked version
            BassMidi.BASS_MIDI_FontUnpack(handle, "afile.sf2");
            </code>
            <code lang="VB">
            ' load FLAC plugin
            Bass.BASS_PluginLoad("bassflac.dll")
            ' open soundfont
            Dim handle As Integer = BassMidi.BASS_MIDI_FontInit("afile.sf2pack")
            ' produce unpacked version
            BassMidi.BASS_MIDI_FontUnpack(handle, "afile.sf2")
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontLoad(System.Int32,System.Int32,System.Int32)">
            <summary>
            Preloads presets from a soundfont.
            </summary>
            <param name="handle">The soundfont handle.</param>
            <param name="preset">Preset number to load... -1 = all presets.</param>
            <param name="bank">Bank number to load... -1 = all banks.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Samples are normally loaded as they are needed while rendering a MIDI stream, which can result in CPU spikes, particularly with packed soundfonts. That generally won't cause any problems, but when smooth/constant performance is critical this function can be used to preload the samples before rendering, so avoiding the need to load them while rendering.</para>
            <para>When preloading samples to render a particular MIDI stream, it is more efficient to use <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamLoadSamples(System.Int32)"/> to preload the specific samples that the MIDI stream will use, rather than preloading the entire soundfont.</para>
            <para>Samples that are preloaded by this function are not affected by automatic compacting via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_COMPACT"/> option, but can be compacted/unloaded manually with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontCompact(System.Int32)"/>.</para>
            <para>A soundfont should not be preloaded while it's being used to render any MIDI streams, as that could delay the rendering.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The appropriate add-on to decode the samples is not loaded.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>An SFZ sample has an unknown file format. A BASS add-on may be needed to handle it.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The soundfont does not contain the requested preset.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontLoad(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIFont)">
            <summary>
            Preloads and/or unloads presets from a soundfont.
            </summary>
            <param name="handle">The soundfont handle.</param>
            <param name="preset">Preset number to load... -1 = all presets.</param>
            <param name="bank">Bank number to load... -1 = all banks.</param>
            <param name="length">Maximum amount of data (in sample frames or milliseconds) to load... 0 = all (or none when compacting).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIFont"/>):
            <list type="table">
            <item><term>BASS_MIDI_FONTLOAD_COMPACT</term><description>Compact loaded samples to the <paramref name="length"/> amount.</description></item>
            <item><term>BASS_MIDI_FONTLOAD_KEEPDEC</term><description>Retain the decoder after partially loading (or just parsing) an encoded SFZ sample. This will allow the remainder to be loaded more quickly but will also use more memory (for the decoder state). The difference this makes will vary depending on the codec used. Only SFZ samples are affected; SF2 decoders are always retained.</description></item>
            <item><term>BASS_MIDI_FONTLOAD_NOLOAD</term><description>Do not load samples. If this is combined with BASS_MIDI_FONTLOAD_COMPACT then only compacting will be performed, otherwise any unparsed SFZ sample files will be parsed but no data loaded.</description></item>
            <item><term>BASS_MIDI_FONTLOAD_NOWAIT</term><description>Load the samples asynchronously, else wait for the samples to be loaded before returning. This does not affect compacting or SFZ sample parsing, which are always done before returning.</description></item>
            <item><term>BASS_MIDI_FONTLOAD_TIME</term><description>The <paramref name="length"/> value is in milliseconds, else it is sample frames. Millisecond lengths are based on a sample's default rate. The actual duration of the loaded data may be different if the sample is played at another rate.</description></item>
            </list>
            </param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function combines the functionality of the <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontLoad(System.Int32,System.Int32,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontUnload(System.Int32,System.Int32,System.Int32)"/> functions and extends it with the ability to partially load and/or unload presets, and load asynchronously.</para>
            <para>When a sample is partially preloaded, the remainder will be loaded as needed during playback. The partially loaded part can begin playing before the rest is loaded, so it allows delays to be avoided during playback, while being faster and using less memory than preloading fully. The amount that should be preloaded to avoid any delays will depend on how fast the drive is.</para>
            <para>When partially loading a preset's samples, any samples that already have more data loaded will retain that data unless the BASS_MIDI_FONTLOAD_COMPACT flag is used, in which case they will be reduced to the requested partial amount.</para>
            <para>Samples that are preloaded by this function are not affected by automatic compacting via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_COMPACT"/> option.</para>
            <para>Any samples that are currently being used by a MIDI stream will not be compacted.</para>
            <para><b>Platform-specific:</b> On Android/iOS/Linux/macOS, BASSMIDI may hit the OS's per-process open file limit when asynchronously loading SFZ soundfonts with lots of unique samples. BASSMIDI will temporarily close other sample files when that happens, but it would be more efficient (and safer for other file opening elsewhere in the app) to raise the limit instead, which can be done via the setrlimit (RLIMIT_NOFILE) function. macOS and iOS have a particularly low default limit of 256, while Linux and Android usually default to 1024. SF2 soundfonts have all samples in a single file, so asynchronously loading them is not an issue, but they are never temporarily closed and reopened, so the limit should also be raised if using a lot of SF2 soundfonts.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The appropriate add-on to decode the samples is not loaded.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>An SFZ sample has an unknown file format. A BASS add-on may be needed to handle it.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The soundfont does not contain the requested preset.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontUnload(System.Int32,System.Int32,System.Int32)">
            <summary>
            Unloads presets from a soundfont.
            </summary>
            <param name="handle">The soundfont handle.</param>
            <param name="preset">Preset number to load... -1 = all presets.</param>
            <param name="bank">Bank number to load... -1 = all banks.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>An unloaded preset will be loaded again when needed by a MIDI stream. Any samples that are currently being used by a MIDI stream will not be unloaded.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The soundfont does not contain the specified preset, or the soundfont is memory mapped.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetPresetPtr(System.Int32,System.Int32,System.Int32)">
            <summary>
            Retrieves the name of a preset in a soundfont.
            </summary>
            <param name="handle"></param>
            <param name="preset"></param>
            <param name="bank"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetPreset(System.Int32,System.Int32,System.Int32)">
            <summary>
            
            </summary>
            <param name="handle">The soundfont handle to get the preset name from.</param>
            <param name="preset">Preset number to load... -1 = all presets (the first encountered).</param>
            <param name="bank">Bank number to load... -1 = all banks (the first encountered).</param>
            <returns>If successful, the requested preset name is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            SFZ files do not contain preset names, so their filenames (minus the ".sfz" extension) are used instead when available.
            <para>A list of all presets in a soundfont is available from <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetPresets(System.Int32,System.Int32[])"/>.</para>
            <para>Drum kits are located in bank 128, and possibly bank 127 in the case of XG drum kits.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The soundfont does not contain the requested preset.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetPresets(System.Int32,System.Int32[])">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="presets"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetPresets(System.Int32)">
            <summary>
            Retrieves the presets in a soundfont.
            </summary>
            <param name="handle">The soundfont handle to get the preset name from.</param>
            <returns>If successful, an array of presets is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The presets are delivered with the preset number in the LOWORD and the bank number in the HIWORD, and in numerically ascending order.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetPresetFonts(System.Int32)">
            <summary>
            Retrieves the presets in a soundfont.
            </summary>
            <param name="handle">The soundfont handle to get the preset name from.</param>
            <returns>If successful, an array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT"/> instances is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontSetVolume(System.Int32,System.Single)">
            <summary>
            Sets a soundfont's volume level.
            </summary>
            <param name="handle">The soundfont to set the volume of.</param>
            <param name="volume">The volume level... 0=silent, 1.0=normal/default.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            By default, some soundfonts may be louder than others, which could be a problem when mixing multiple soundfonts. 
            This function can be used to compensate for any differences, by raising the level of the quieter soundfonts or lowering the louder ones.
            <para>Changes take immediate effect in any MIDI streams that are using the soundfont.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetVolume(System.Int32)">
            <summary>
            Retrieves a soundfont's volume level.
            </summary>
            <param name="handle">The soundfont to get the volume of.</param>
            <returns>If successful, the soundfont's volume level is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetDeviceInfoInternal(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO_INTERNAL@)">
            <summary>
            
            </summary>
            <param name="device"></param>
            <param name="info"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetDeviceInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO)">
            <summary>
            Retrieves information on a MIDI input device.
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <param name="info">An instance of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO"/> class to store the information at.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function can be used to enumerate the available MIDI input devices for a setup dialog. 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>MIDI input is not available on Android.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetDeviceInfo(System.Int32)">
            <summary>
            Retrieves information on a MIDI input device.
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <returns>If successful, an instance of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO"/> class is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function can be used to enumerate the available MIDI input devices for a setup dialog. 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>MIDI input is not available on Android.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetGeviceInfos">
            <summary>
            Returns all available MIDI input devices.
            </summary>
            <returns>An array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO"/> elements representing the available MIDI input devices.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetDeviceInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetDeviceInfos">
            <summary>
            Returns the total number of available MIDI input devices.
            </summary>
            <returns>Number of real MIDI input devices available.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetDeviceInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InInit(System.Int32,Un4seen.Bass.AddOn.Midi.MIDIINPROC,System.IntPtr)">
            <summary>
            Initializes a MIDI input device.
            </summary>
            <param name="device">The device to use... 0 = first. <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetDeviceInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO)"/> can be used to enumerate the available devices.</param>
            <param name="proc">Callback delegate to receive MIDI data from the device.</param>
            <param name="user">User instance data to pass to the callback delegate.</param>
            <returns>If the device was successfully initialized, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function must be successfully called before using any MIDI input functions.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>The device has already been initialized. You must call <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InFree(System.Int32)"/> before you can initialize it again.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The device is not available.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>MIDI input is not available on Android.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InFree(System.Int32)">
            <summary>
            Frees a MIDI input device.
            </summary>
            <param name="device">The device to free.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The device has not been initialized.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InStart(System.Int32)">
            <summary>
            Starts a MIDI input device.
            </summary>
            <param name="device">The device to start.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The device has not been initialized.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InStop(System.Int32)">
            <summary>
            Stops a MIDI input device.
            </summary>
            <param name="device">The device to stop.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The device has not been initialized.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_ConvertEvents(System.Byte[],System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode)">
            <summary>
            
            </summary>
            <param name="data"></param>
            <param name="length"></param>
            <param name="events"></param>
            <param name="count"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_ConvertEvents(System.Byte[],Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode)">
            <summary>
            Converts raw MIDI data to <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> structures.
            </summary>
            <param name="data">The raw MIDI data.</param>
            <param name="events">The array to receive the events... <see langword="null"/> = get the number of events without getting the events themselves.</param>
            <param name="count">The maximum number of events to convert.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode"/>):
            <list type="table">
            <item><term>BASS_MIDI_EVENTS_NORSTATUS</term><description>Disable running status, meaning each event must include a status byte.</description></item>
            <item><term>BASS_MIDI_EVENTS_TIME</term><description>The raw MIDI data includes delta-time info.</description></item>
            </list>
            </param>
            <returns>If successful, the number of events processed is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some mystery problem.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_ConvertEvents(System.Byte[],Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode)">
            <summary>
            Converts raw MIDI data to <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> structures.
            </summary>
            <param name="data">The raw MIDI data.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode"/>):
            <list type="table">
            <item><term>BASS_MIDI_EVENTS_NORSTATUS</term><description>Disable running status, meaning each event must include a status byte.</description></item>
            <item><term>BASS_MIDI_EVENTS_TIME</term><description>The raw MIDI data includes delta-time info.</description></item>
            </list>
            </param>
            <returns>If successful, the array of events processed is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some mystery problem.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BassMidi.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bassmidi.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BassMidi.SupportedStreamName">
            <summary>
            Supported file format name of the bassmidi.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
            <example>
            Load BASS and BASSMIDI from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassMidi.LoadMe();
            ...
            // when not used anymore...
            BassMidi.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSMIDI from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassMidi.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassMidi.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BassMidi.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASSMIDIFont">
            <summary>
            The LoadFont flags to be used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontLoad(System.Int32,System.Int32,System.Int32)"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIFont.BASS_MIDI_FONTLOAD_NOWAIT">
            <summary>
            Don't wait for the samples to load
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIFont.BASS_MIDI_FONTLOAD_COMPACT">
            <summary>
            Compact samples
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIFont.BASS_MIDI_FONTLOAD_NOLOAD">
            <summary>
            Don't load (only compact)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIFont.BASS_MIDI_FONTLOAD_TIME">
            <summary>
            Length is in milliseconds
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIFont.BASS_MIDI_FONTLOAD_KEEPDEC">
            <summary>
            keep decoders
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker">
            <summary>
            The Marker type, to be used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_MARKER">
            <summary>
            Marker events (MIDI meta event 6).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_CUE">
            <summary>
            Cue events (MIDI meta event 7).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_LYRIC">
            <summary>
            Lyric events (MIDI meta event 5).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_TEXT">
            <summary>
            Text events (MIDI meta event 1).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_TIMESIG">
            <summary>
            Time signature event (MIDI meta event 88).
            <para>The time signature events are given in the form of "numerator/denominator metronome-pulse 32nd-notes-per-MIDI-quarter-note", eg. "4/4 24 8"</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_KEYSIG">
            <summary>
            Key signature events (MIDI meta event 89).
            <para>That gives the key signature (in BASS_MIDI_MARK.text) in the form of "a b", where "a" is the number of sharps (if positive) or flats (if negative) and "b" signifies major (if 0) or minor (if 1).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_COPY">
            <summary>
            Copyright notice (MIDI meta event 2).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_TRACK">
            <summary>
            Track name events (MIDI meta event 3).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_INST">
            <summary>
            Instrument name events (MIDI meta event 4). 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_TRACKSTART">
            <summary>
            Track start (SMF2).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIMarker.BASS_MIDI_MARK_TICK">
            <summary>
            FLAG: get position in ticks instead of bytes
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent">
            <summary>
            The MIDI event type, to be used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> resp. <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent)"/> or <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateEvents(Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>.
            </summary>
            <remarks>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_NONE">
            <summary>
            No event.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_NOTE">
            <summary>
            Press or release a key, or stop without sustain/decay.
            <para>param : LOBYTE = key number (0-127, 60=middle C), HIBYTE = velocity (0=release, 1-127=press, 255=stop).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_PROGRAM">
            <summary>
            Select the preset/instrument to use. Standard soundfont presets follow the General MIDI standard, and generally also include Roland GS variations in other banks (accessible via the MIDI_EVENT_BANK event).
            <para>param : preset number (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHANPRES">
            <summary>
            Set the channel pressure.
            <para>param : pressure level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_PITCH">
            <summary>
            Set the pitch wheel.
            <para>param : pitch wheel position (0-16383, 8192=normal/middle).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_PITCHRANGE">
            <summary>
            Set pitch wheel range (MIDI RPN 0).
            <para>param : range in semitones.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUMS">
            <summary>
            Set the percussion/drums channel switch. The bank and program are reset to 0 when this changes.
            <para>param : use drums? (0=no, 1=yes).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_FINETUNE">
            <summary>
            Set the fine tuning (MIDI RPN 1).
            <para>param : finetune in cents (0-16383, 0=-100, 8192=normal, 16383=+100).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_COARSETUNE">
            <summary>
            Set the coarse tuning (MIDI RPN 2).
            <para>param : finetune in semitones (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MASTERVOL">
            <summary>
            Set the master volume.
            <para>param : volume level (0-16383, 0=silent, 16363=normal/full).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_BANK">
            <summary>
            Select the bank to use (MIDI controller 0).
            <para>param : bank number (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MODULATION">
            <summary>
            Set the modulation (MIDI controller 1).
            <para>param : modulation level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_VOLUME">
            <summary>
            Set the volume (MIDI controller 7).
            <para>param : volume level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_PAN">
            <summary>
            Set the pan position (MIDI controller 10).
            <para>param : pan position (0-128, 0=left, 64=middle, 127=right, 128=random).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_EXPRESSION">
            <summary>
            Set the expression (MIDI controller 11).
            <para>param : expression level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SUSTAIN">
            <summary>
            Set the sustain switch (MIDI controller 64).
            <para>param : enable sustain? (0-63=no, 64-127=yes).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SOUNDOFF">
            <summary>
            Stop all sounds (MIDI controller 120).
            <para>param : not used.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_RESET">
            <summary>
            Reset controllers (MIDI controller 121), that is modulation=0, expression=127, sustain=0, pitch wheel=8192, channel pressure=0.
            <para>param : not used.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_NOTESOFF">
            <summary>
            Release all keys (MIDI controller 123).
            <para>param : not used.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_PORTAMENTO">
            <summary>
            Set the portamento switch (MIDI controller 65).
            <para>param : enable portamento? (0-63=no, 64-127=yes).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_PORTATIME">
            <summary>
            Set the portamento time (MIDI controller 5).
            <para>param : portamento time (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_PORTANOTE">
            <summary>
            Set the portamento start key - the next note starts at this key (MIDI controller 84).
            <para>param : key number (1-127, 60=middle C).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MODE">
            <summary>
            Set poly/mono mode (MIDI controllers 126 &amp; 127).
            <para>param : mode (0=poly, 1=mono).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_REVERB">
            <summary>
            Set the reverb send level (MIDI controller 91).
            <para>param : reverb level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHORUS">
            <summary>
            Set the chorus send level (MIDI controller 93).
            <para>param : chorus level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CUTOFF">
            <summary>
            Set the low-pass filter cutoff (MIDI controller 74, NRPN 120h).
            <para>param : cutoff level (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_RESONANCE">
            <summary>
            Set the low-pass filter resonance (MIDI controller 71, NRPN 121h).
            <para>param : resonance level (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_RELEASE">
            <summary>
            Set the release time (MIDI controller 72, NRPN 166h).
            <para>param : release time (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_ATTACK">
            <summary>
            Set the attack time (MIDI controller 73, NRPN 163h).
            <para>param : attack time (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DECAY">
            <summary>
            Set the decay time (MIDI controller 75, NRPN 164h).
            <para>param : decay time (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_REVERB_MACRO">
            <summary>
            To be defined.
            <para>param : to be defined.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHORUS_MACRO">
            <summary>
            To be defined.
            <para>param : to be defined.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_REVERB_TIME">
            <summary>
            Set the reverb time.
            <para>param : reverb time in milliseconds.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_REVERB_DELAY">
            <summary>
            Set the reverb delay.
            <para>param : reverb delay in millisecond 10ths.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_REVERB_LOCUTOFF">
            <summary>
            Set the reverb low-pass cutoff.
            <para>param :  reverb low-pass cutoff in hertz (0=off).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_REVERB_HICUTOFF">
            <summary>
            Set the reverb high-pass cutoff.
            <para>param : reverb high-pass cutoff in hertz (0=off).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_REVERB_LEVEL">
            <summary>
            Set the reverb level.
            <para>param : reverb level (0=off, 100=0dB, 200=+6dB).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHORUS_DELAY">
            <summary>
            Set the chorus delay.
            <para>param : chorus delay in millisecond 10ths.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHORUS_DEPTH">
            <summary>
            Set the chorus depth.
            <para>param : chorus depth in millisecond 10ths.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHORUS_RATE">
            <summary>
            Set the chorus rate.
            <para>param : chorus rate in hertz 100ths.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHORUS_FEEDBACK">
            <summary>
            Set the chorus feedback level.
            <para>param : chorus feedback level (0=-100%, 100=off, 200=+100%).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHORUS_LEVEL">
            <summary>
            Set the chorus level.
            <para>param : chorus level (0=off, 100=0dB, 200=+6dB).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHORUS_REVERB">
            <summary>
            Set the chorus send to reverb level.
            <para>param : chorus send to reverb level (0=off, 100=0dB, 200=+6dB).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_USERFX">
            <summary>
            Set the user effect send level (MIDI controller 94). This will have no audible effect unless custom processing is applied to the user effect mix via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetChannel(System.Int32,System.Int32)"/>.
            <para>param : user effect level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_USERFX_LEVEL">
            <summary>
            Set the user effect level.
            <para>param : user effect level (0=off, 100=0dB, 200=+6dB).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_USERFX_REVERB">
            <summary>
            Set the user effect send to reverb level.
            <para>param : user effect send to reverb level (0=off, 100=0dB, 200=+6dB).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_USERFX_CHORUS">
            <summary>
            Set the user effect send to chorus level.
            <para>param : user effect send to chorus level (0=off, 100=0dB, 200=+6dB).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUM_FINETUNE">
            <summary>
            Set the fine tuning of a drum key (MIDI NRPN 19knh).
            <para>param : LOBYTE = key number (0-127), HIBYTE = finetune in cents (0-127, 0=-100, 64=normal, 127=+100).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUM_COARSETUNE">
            <summary>
            Set the coarse tuning of a drum key (MIDI NRPN 18knh).
            <para>param : LOBYTE = key number (0-127), HIBYTE = finetune in semitones (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUM_PAN">
            <summary>
            Set the pan position of a drum key (MIDI NRPN 1Cknh).
            <para>param : LOBYTE = key number (0-127), HIBYTE = pan position (0-127, 0=random, 64=middle).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUM_REVERB">
            <summary>
            Set the reverb send level of a drum key (MIDI NRPN 1Dknh).
            <para>param :  LOBYTE = key number (0-127), HIBYTE = reverb level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUM_CHORUS">
            <summary>
            Set the chorus send level of a drum key (MIDI NRPN 1Eknh).
            <para>param : LOBYTE = key number (0-127), HIBYTE = chorus level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUM_CUTOFF">
            <summary>
            Set the low-pass filter cutoff of a drum key (MIDI NRPN 14knh).
            <para>param : LOBYTE = key number (0-127), HIBYTE = cutoff level (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUM_RESONANCE">
            <summary>
            Set the low-pass filter resonance of a drum key (MIDI NRPN 15knh).
            <para>param : LOBYTE = key number (0-127), HIBYTE = resonance level (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUM_LEVEL">
            <summary>
            Set the drum level NRPN of a drum key (MIDI NRPN 16knh).
            <para>param : LOBYTE = key number (0-127), HIBYTE = level (0-127, 127=full/normal).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DRUM_USERFX">
            <summary>
            Set the user effect send level of a drum key (MIDI NRPN 1Fknh).
            <para>param : LOBYTE = key number (0-127), HIBYTE = user effect level (0-127, 127=normal/full).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SOFT">
            <summary>
            Set the soft pedal/switch (MIDI controller 67).
            <para>param : soft is on? (0-63=no, 64-127=yes).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SYSTEM">
            <summary>
            Set the system mode, resetting everything to the system's defaults.
            MIDI_SYSTEM_DEFAULT is identical to MIDI_SYSTEM_GS, except that channel 10 is melodic if there are not 16 channels. MIDI_EVENT_SYSTEM does not reset things in any additional channels allocated to a MIDI file stream via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CHANS"/> attribute, while MIDI_EVENT_SYSTEMEX does.
            <para>param : system mode (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDISystem"/>).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_TEMPO">
            <summary>
            Set the tempo (MIDI meta event 81). Changing the tempo affects the stream length, and the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> value will no longer be valid.
            <para>param : tempo in microseconds per quarter note.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SCALETUNING">
            <summary>
            Set the tuning of a note in every octave.
            <para>param : LOWORD = tuning change in cents (0-16383, 0=-100, 8192=normal, 16383=+100), HIWORD = note (0-11, 0=C).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CONTROL">
            <summary>
            Control event.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHANPRES_VIBRATO">
            <summary>
            Change Preset Vibrato.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHANPRES_PITCH">
            <summary>
            Change Preset Pitch.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHANPRES_FILTER">
            <summary>
            Change Preset Filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_CHANPRES_VOLUME">
            <summary>
            Change Preset Volume.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MOD_VIBRATO">
            <summary>
            Set the maximum effect of modulation (MIDI controller 1) on vibrato depth (MIDI RPN 5).
            <para>param :  vibrato depth effect in cents (0=none, 128=100, 256=200, etc).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MODRANGE">
            <summary>
            Mod Range.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_BANK_LSB">
            <summary>
            Bank LSB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_KEYPRES">
            <summary>
            Set a key's pressure/aftertouch.
            <para>param : LOBYTE = key number (0-127), HIBYTE = pressure level (0-127).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_KEYPRES_VIBRATO">
            <summary>
            Set the maximum effect of key pressure/aftertouch on vibrato depth.
            <para>param : vibrato depth effect in cents (0=none, 128=100, 256=200, etc).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_KEYPRES_PITCH">
            <summary>
            Set the maximum effect of key pressure/aftertouch on pitch.
            <para>param : pitch effect in semitones (0=-24, 24=none, 48=+24).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_KEYPRES_FILTER">
            <summary>
            Set the maximum effect of key pressure/aftertouch on filter cutoff.
            <para>param : filter cutoff effect in cents (0=-9600, 9600=none, 19200=+9600).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_KEYPRES_VOLUME">
            <summary>
            Set the maximum effect of key pressure/aftertouch on volume.
            <para>param : volume effect percentage (0=-100, 100=none, 200=+100).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SOSTENUTO">
            <summary>
            Set the sostenuto pedal/switch (MIDI controller 66).
            <para>param : sostenuto is on? (0-63=no, 64-127=yes).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MOD_PITCH">
            <summary>
            Set the maximum effect of modulation (MIDI controller 1) on pitch.
            <para>param : pitch effect in semitones (0=-24, 24=none, 48=+24).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MOD_FILTER">
            <summary>
            Set the maximum effect of modulation (MIDI controller 1) on filter cutoff.
            <para>param : filter cutoff effect in cents (0=-9600, 9600=none, 19200=+9600).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MOD_VOLUME">
            <summary>
            Set the maximum effect of modulation (MIDI controller 1) on volume.
            <para>param : volume effect percentage (0=-100, 100=none, 200=+100).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_VIBRATO_RATE">
            <summary>
            Set the vibrato rate (MIDI controller 76, NRPN 108h).
            <para>param : vibrato rate (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_VIBRATO_DEPTH">
            <summary>
            Set the vibrato depth (MIDI controller 77, NRPN 109h).
            <para>param : vibrato depth (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_VIBRATO_DELAY">
            <summary>
            Set the vibrato delay (MIDI controller 78, NRPN 10ah).
            <para>param : vibrato delay (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MASTER_FINETUNE">
            <summary>
            Set the master fine tuning.
            <para>param : finetune in cents (0-16383, 0=-100, 8192=normal, 16383=+100).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MASTER_COARSETUNE">
            <summary>
            Set the master coarse tuning.
            <para>param : finetune in semitones (0-127, 0=-64, 64=normal, 127=+63).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_MIXLEVEL">
            <summary>
            Set the level.
            <para>param : the level (0=silent, 100=0dB, 200=+6dB).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_TRANSPOSE">
            <summary>
            Transpose all notes. Changes take effect from the next note played, and affect melodic channels only (not drum channels).
            <para>param : transposition amount in semitones (0=-100, 100=normal, 200=+100).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SYSTEMEX">
            <summary>
            Set the system mode, resetting everything to the system's defaults.
            MIDI_SYSTEM_DEFAULT is identical to MIDI_SYSTEM_GS, except that channel 10 is melodic if there are not 16 channels. MIDI_EVENT_SYSTEM does not reset things in any additional channels allocated to a MIDI file stream via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CHANS"/> attribute, while MIDI_EVENT_SYSTEMEX does.
            <para>param : system mode (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDISystem"/>).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_END_TRACK">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateEvents(Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> to mark the end of a track (the next event will be in a new track).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SPEED">
            <summary>
            Set a tempo modification. Changing the tempo affects the stream length, and the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> byte value will no longer be valid. The modification does not affect seeking.
            <para>param : speed in 100ths of a percent (100=1%/min, 10000=100%/normal, 20000=200%).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_DEFDRUMS">
            <summary>
            Set the percussion/drums channel switch (same as MIDI_EVENT_DRUMS) and make it the default state (eg. applied by MIDI_EVENT_SYSTEM and MIDI_EVENT_SYSTEMEX).
            <para>param : use drums? (0=no, 1=yes).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_NOTES">
            <summary>
            Flag to check how many keys are pressed.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_VOICES">
            <summary>
            Flag to check how many voices are active.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENTS_NORSTATUS">
            <summary>
            Flag: no running status.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_END">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateEvents(Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> to mark the end of the event array.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASSMIDISystem">
            <summary>
            System mode parameter, to be used with <see cref="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SYSTEM"/>, <see cref="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent.MIDI_EVENT_SYSTEMEX"/>.
            </summary>
            <remarks>
            MIDI_SYSTEM_DEFAULT is identical to MIDI_SYSTEM_GS, except that channel 10 is melodic if there are not 16 channels.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDISystem.MIDI_SYSTEM_DEFAULT">
            <summary>
            System default. 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDISystem.MIDI_SYSTEM_GM1">
            <summary>
            General MIDI Level 1.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDISystem.MIDI_SYSTEM_GM2">
            <summary>
            General MIDI Level 2.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDISystem.MIDI_SYSTEM_XG">
            <summary>
            XG-Format (Yamaha).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDISystem.MIDI_SYSTEM_GS">
            <summary>
            GS-Format (Roland).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode">
            <summary>
            The type of event data to apply, to be used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_STRUCT">
            <summary>
            An array of <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> structures.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_RAW">
            <summary>
            Raw MIDI event data, as would be sent to a MIDI device. 
            Running status is supported. To overcome the 16 channel limit, the event data's channel information can optionally be overridden by adding the new channel number to this parameter, where +1 = the 1st channel.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_SYNC">
            <summary>
            Flag: Trigger <see cref="T:Un4seen.Bass.BASSSync">BASS_SYNC_MIDI_xxx</see> syncs for the processed events (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_NORSTATUS">
            <summary>
            Flag: Disable running status, meaning each event must include a status byte. Only applicable with BASS_MIDI_EVENTS_RAW.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_CANCEL">
            <summary>
            Flag: cancel pending events
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_TIME">
            <summary>
            Flag: delta-time info is present
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_ABSTIME">
            <summary>
            Flag: absolute time info is present
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_ASYNC">
            <summary>
            Flag: process asynchronously
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_FILTER">
            <summary>
            Flag: apply filtering
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode.BASS_MIDI_EVENTS_FLUSH">
            <summary>
            Flag: flush async events
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontGetInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO)"/> to retrieve information on a soundfont.
            </summary>
            <remarks>
            The name, copyright and comment information might not be included in some SF2 files. 
            Only the presets, samload and samtype members are available with SFZ files, with the samtype value reflecting the most recently loaded encoded sample (it is possible for different samples to use different encoding).
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO.name">
            <summary>
            Name of the soundfont.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO.copyright">
            <summary>
            Copyright notice.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO.comment">
            <summary>
            Any comments.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO.presets">
            <summary>
            The number of presets/instruments in the soundfont.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO.samsize">
            <summary>
            The total size (in bytes) of the sample data in the soundfont.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO.samload">
            <summary>
            The amount of sample data currently loaded... -1 = the soundfont is memory mapped.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO.samtype">
            <summary>
            The BASS_CTYPE_STREAM_xxx format of the sample data if it's packed... -1 = unknown format (appropriate BASS add-on not loaded), 0 = not packed.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTINFO.ToString">
            <summary>
            A description of the soundfont info object (name, copyright, comment, size etc.)
            </summary>
            <returns>The string description of the soundfont info object.</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> to set and retrieve soundfont configurations.
            </summary>
            <remarks>
            When using an individual preset from a soundfont, BASSMIDI will first look for the exact preset and bank match, but if that is not present, the first preset from the soundfont will be used. This is useful for single preset soundfonts. Individual presets can be assigned to program numbers beyond the standard 127 limit, up to 65535, which can then be accessed via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/>.
            <para>When using all presets in a soundfont, the bank member is a base number that is added to the soundfont's banks. For example, if bank=1 then the soundfont's bank 0 becomes bank 1, etc. Negative base numbers are allowed.</para>
            <para>For more flexible mapping of soundfont presets to MIDI programs, see the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX"/> structure.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT.font">
            <summary>
            Soundfont handle, previously inititialized with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInit(System.String,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT.preset">
            <summary>
            Preset number... 0-65535, -1 = use all presets in the soundfont. This determines what MIDI_EVENT_PROGRAM event value(s) the soundfont is used for.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT.bank">
            <summary>
            Base bank number, or the bank number of the individual preset. This determines what MIDI_EVENT_BANK event value(s) the soundfont is used for.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT.#ctor(System.Int32,System.Int32,System.Int32)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="Font">The soundfont handle to use.</param>
            <param name="Preset">The preset number to use (-1=use all presets).</param>
            <param name="Bank">The bank number to use.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT.ToString">
            <summary>
            A description of the soundfont configuration object (font, preset, bank)
            </summary>
            <returns>The description string of the soundfont configuration object.</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> to set and retrieve soundfont configurations.
            </summary>
            <remarks>This is an extended version of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT"/> structure that allows more flexible mapping of soundfont presets to MIDI programs, including access to the bank LSB (eg. MIDI controller 32).
            <para>When using an individual preset from a soundfont, BASSMIDI will first look for the exact spreset and sbank match, but if that is not present, the first preset from the soundfont will be used. This is useful for single preset soundfonts. Individual presets can be assigned to program numbers beyond the standard 127 limit, up to 65535, which can then be accessed via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/>.</para>
            <para>When using all presets from all banks in a soundfont, the <i>dbank</i> member is a base number that is added to the soundfont's banks. For example, if dbank = 1 then the soundfont's bank 0 becomes bank 1, etc. Negative base numbers are allowed, to lower a soundfont's bank numbers.</para>
            <para>The bank LSB raises the maximum number of melodic banks from 128 to 16384 (128 x 128), but the SF2 soundfont format only supports 128 banks, so a soundfont that is set to be used on all banks (<i>dpreset</i> and <i>dbank</i> are -1) will still only apply to the single bank LSB specified by <i>dbanklsb</i>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX.font">
            <summary>
            Soundfont handle, previously inititialized with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInit(System.String,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX.spreset">
            <summary>
            Soundfont preset number... 0-127, -1 = use all presets.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX.sbank">
            <summary>
            Soundfont bank number... 0-128, -1 = use all banks.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX.dpreset">
            <summary>
            Destination preset/program number... 0-65535, -1 = all presets. This determines what MIDI_EVENT_PROGRAM event value(s) the soundfont is used for.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX.dbank">
            <summary>
            Destination bank number, or a base bank number when using all presets from all banks. This determines what MIDI_EVENT_BANK event value(s) the soundfont is used for.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX.dbanklsb">
            <summary>
            Destination bank number LSB. This is the MIDI_EVENT_BANK_LSB event value that the soundfont is used for.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX.#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="Font">The soundfont handle to use.</param>
            <param name="SPreset">Soundfont preset number... -1 = use all presets.</param>
            <param name="SBank">Soundfont bank number... -1 = use all banks.</param>
            <param name="DPreset">Destination preset/program number... -1 = all presets. This determines what MIDI_EVENT_PROGRAM event value(s) the soundfont is used for.</param>
            <param name="DBank">Destination bank number, or a base bank number when using all presets from all banks. This determines what MIDI_EVENT_BANK event value(s) the soundfont is used for.</param>
            <param name="DBanklsb">Destination bank number LSB. This is the MIDI_EVENT_BANK_LSB event value that the soundfont is used for.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX.ToString">
            <summary>
            A description of the soundfont configuration object (font, preset, bank)
            </summary>
            <returns>The description string of the soundfont configuration object.</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> to set and retrieve soundfont configurations.
            </summary>
            <remarks>This is an extended version of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT"/> structure that allows more flexible mapping of soundfont presets to MIDI programs, including access to the bank LSB (eg. MIDI controller 32).
            <para>When using an individual preset from a soundfont, BASSMIDI will first look for the exact spreset and sbank match, but if that is not present, the first preset from the soundfont will be used. This is useful for single preset soundfonts. Individual presets can be assigned to program numbers beyond the standard 127 limit, up to 65535, which can then be accessed via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/>.</para>
            <para>When using all presets from all banks in a soundfont, the <i>dbank</i> member is a base number that is added to the soundfont's banks. For example, if dbank = 1 then the soundfont's bank 0 becomes bank 1, etc. Negative base numbers are allowed, to lower a soundfont's bank numbers.</para>
            <para>The bank LSB raises the maximum number of melodic banks from 128 to 16384 (128 x 128), but the SF2 soundfont format only supports 128 banks, so a soundfont that is set to be used on all banks (<i>dpreset</i> and <i>dbank</i> are -1) will still only apply to the single bank LSB specified by <i>dbanklsb</i>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.font">
            <summary>
            Soundfont handle, previously inititialized with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontInit(System.String,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.spreset">
            <summary>
            Soundfont preset number... 0-127, -1 = use all presets.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.sbank">
            <summary>
            Soundfont bank number... 0-128, -1 = use all banks.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.dpreset">
            <summary>
            Destination preset/program number... 0-65535, -1 = all presets. This determines what MIDI_EVENT_PROGRAM event value(s) the soundfont is used for.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.dbank">
            <summary>
            Destination bank number, or a base bank number when using all presets from all banks. This determines what MIDI_EVENT_BANK event value(s) the soundfont is used for.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.dbanklsb">
            <summary>
            Destination bank number LSB. This is the MIDI_EVENT_BANK_LSB event value that the soundfont is used for.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.minchan">
            <summary>
            Minimum MIDI channel number... 0 = channel 1. This and numchan determine which MIDI channels the soundfont is used in.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.numchan">
            <summary>
            Number of MIDI channels from minchan... 0 = unlimited. 
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="Font">The soundfont handle to use.</param>
            <param name="SPreset">Soundfont preset number... -1 = use all presets.</param>
            <param name="SBank">Soundfont bank number... -1 = use all banks.</param>
            <param name="DPreset">Destination preset/program number... -1 = all presets. This determines what MIDI_EVENT_PROGRAM event value(s) the soundfont is used for.</param>
            <param name="DBank">Destination bank number, or a base bank number when using all presets from all banks. This determines what MIDI_EVENT_BANK event value(s) the soundfont is used for.</param>
            <param name="DBanklsb">Destination bank number LSB. This is the MIDI_EVENT_BANK_LSB event value that the soundfont is used for.</param>
            <param name="MinChan">Minimum MIDI channel number... 0 = channel 1. This and numchan determine which MIDI channels the soundfont is used in.</param>
            <param name="NumChan">Number of MIDI channels from minchan... 0 = unlimited.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONTEX2.ToString">
            <summary>
            A description of the soundfont configuration object (font, preset, bank)
            </summary>
            <returns>The description string of the soundfont configuration object.</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/>, <see cref="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_LYRIC"/>, <see cref="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_CUE"/> and <see cref="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_MARKER"/> to retrieve markers.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK.track">
            <summary>
            The MIDI track (number) containing marker (0=first).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK.pos">
            <summary>
            The position (in bytes) of the marker.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK.text">
            <summary>
            The marker, cue, lyric, keysig, timesig text.
            </summary>
            <remarks>If the lyric text begins with a '/' (slash) character, a new line should be started. 
            If it begins with a '\' (backslash) character, the display should be cleared.
            <para>For a key signature event (MIDI meta event 89). The marker text is in the form of "a b", where a is the number of sharps (if positive) or flats (if negative), and b signifies major (if 0) or minor (if 1).</para>
            <para>For a time signature events (MIDI meta event 88). The marker text is in the form of "a/b c d", where a is the numerator, b is the denominator, c is the metronome pulse, and d is the number of 32nd notes per MIDI quarter-note</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK.#ctor">
            <summary>
            Default Constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK.#ctor(System.Int32,System.Int32,System.String)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="Track">The track (number) containing marker.</param>
            <param name="Pos">The position (in bytes) of the marker.</param>
            <param name="Text">The marker text.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK.ToString">
            <summary>
            A description of the marker object (the text).
            </summary>
            <returns>The marker description text.</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> to apply events 
            and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetEvents(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[])"/> to retrieve events, 
            and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateEvents(Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> to play event sequences.
            </summary>
            <remarks>
            The tick and pos members are ignored by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/>. pos is also ignored by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateEvents(Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT.eventtype">
            <summary>
            The event type (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT.param">
            <summary>
            The event parameter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT.chan">
            <summary>
            The MIDI channel of the event... 0 = channel 1.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT.tick">
            <summary>
            The position of the event, in ticks.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT.pos">
            <summary>
            The position of the event, in bytes.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT.#ctor(Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            Constructor already setting the members.
            </summary>
            <param name="EventType">The event type.</param>
            <param name="Param">The event parameter.</param>
            <param name="Chan">The MIDI channel of the event... 0 = channel 1.</param>
            <param name="Tick">The position of the event, in ticks.</param>
            <param name="Pos">The position of the event, in bytes.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT.ToString">
            <summary>
            A description of the MIDI event object (event, param, chan, tick)
            </summary>
            <returns>The description string of the MIDI event object.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT.FromIntPtr(System.IntPtr)">
            <summary>
            Converts an IntPtr as received in an <see cref="T:Un4seen.Bass.AddOn.Midi.MIDIFILTERPROC"/> to a <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/>.
            </summary>
            <param name="eventPtr">The IntPtr to convert.</param>
            <returns>The underlying <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> struct.</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetDeviceInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO)"/> to retrieve information on a MIDI input device.
            </summary>
            <remarks>
            <para>On Windows, <i>id</i> consists of a manufacturer identifier in the LOWORD and a product identifier in the HIWORD. This will not uniquely identify a particular device, ie. multiple devices may have the same value.
            A list of identifiers is available from Microsoft, <a href="http://msdn.microsoft.com/en-us/library/dd757146.aspx">here</a>.
            On OSX, <i>id</i> is the device's "kMIDIPropertyUniqueID" property value, which is unique to the device.
            On Linux, id contains the device's ALSA client ID in the LOWORD and port ID in the HIWORD.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO.name">
            <summary>
            The name/description of the device.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO.id">
            <summary>
            An identification number.
            </summary>
            <remarks>
            On Windows, <i>id</i> consists of a manufacturer identifier in the LOWORD and a product identifier in the HIWORD. This will not uniquely identify a particular device, ie. multiple devices may have the same value.
            A list of identifiers is available from Microsoft, <a href="http://msdn.microsoft.com/en-us/library/dd757146.aspx">here</a>.
            On OSX, <i>id</i> is the device's "kMIDIPropertyUniqueID" property value, which is unique to the device.
            On Linux, id contains the device's ALSA client ID in the LOWORD and port ID in the HIWORD.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO.flags">
            <summary>
            The device's current status. A combination of these flags (<see cref="T:Un4seen.Bass.BASSDeviceInfo"/>):
            <list type="table">
            <item><term>BASS_DEVICE_ENABLED</term><description>The device is enabled. It will not be possible to initialize the device if this flag is not present.</description></item>
            <item><term>BASS_DEVICE_INIT</term><description>The device is initialized, ie. <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InInit(System.Int32,Un4seen.Bass.AddOn.Midi.MIDIINPROC,System.IntPtr)"/> has been called.</description></item>
            </list>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO.ToString">
            <summary>
            A description of the decive info object (name).
            </summary>
            <returns>A description of the decive info object (name).</returns>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO.IsEnabled">
            <summary>
            The device is enabled and can be used.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO.IsInitialized">
            <summary>
            The device is already initialized.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.MIDIINPROC">
            <summary>
            User defined callback delegate to receive MIDI data (to be used with <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InInit(System.Int32,Un4seen.Bass.AddOn.Midi.MIDIINPROC,System.IntPtr)"/>).
            </summary>
            <param name="device">The MIDI input device that the data is from.</param>
            <param name="time">Timestamp, in seconds since <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InStart(System.Int32)"/> was called.</param>
            <param name="buffer">Pointer to the MIDI data.</param>
            <param name="length">The amount of data in bytes.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InInit(System.Int32,Un4seen.Bass.AddOn.Midi.MIDIINPROC,System.IntPtr)"/> was called.</param>
            <example>
            <code lang="C#">
            private MIDIINPROC _midiProc;
            private int _midiStream;
            ...
            // create a MIDI input callback delegate
            _midiProc = new MIDIINPROC(MyMidiInProc);
            BassMidi.BASS_MIDI_InInit(0, _midiProc, IntPtr.Zero);
            ...
            // create a MIDI stream to play the MIDI data
            _midiStream = BassMidi.BASS_MIDI_StreamCreate(16, BASSFlag.BASS_DEFAULT, 44100);
            ...
            private void MyMidiInProc(int device, double time, IntPtr buffer, int length, IntPtr user)
            {
            	// forward the data to the MIDI stream
            	BassMidi.BASS_MIDI_StreamEvents(_midiStream, BASSMIDIEventMode.BASS_MIDI_EVENTS_NONE, 0, buffer, length);
            }
            </code>
            <code lang="VB">
            Private _midiProc As MIDIINPROC
            Private _midiStream As Integer
            ...
            ' create a MIDI input callback delegate
            _midiProc = New MIDIINPROC(AddressOf MyMidiInProc)
            BassMidi.BASS_MIDI_InInit(0, _midiProc, IntPtr.Zero);
            ...
            ' create a MIDI input callback delegate
            _midiStream = BassMidi.BASS_MIDI_StreamCreate(16, BASSFlag.BASS_DEFAULT, 44100)
            ...
            Private Procedure MyMidiInProc(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr)
            	' forward the data to the MIDI stream
            	BassMidi.BASS_MIDI_StreamEvents(_midiStream, BASSMIDIEventMode.BASS_MIDI_EVENTS_NONE, 0, buffer, length)
            End Procedure
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Midi.MIDIFILTERPROC">
            <summary>
            User defined callback function to filter events.
            </summary>
            <param name="handle">The MIDI stream handle.</param>
            <param name="track">The track that the event is from... 0 = 1st track.</param>
            <param name="eventPtr">Pointer to the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT"/> structure.</param>
            <param name="seeking"><see langword="true"/> = the event is being processed while seeking, <see langword="false"/> = the event is being played.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFilter(System.Int32,System.Boolean,Un4seen.Bass.AddOn.Midi.MIDIFILTERPROC,System.IntPtr)"/> was called.</param>
            <returns>Return <see langword="true"/> to process the event, and <see langword="false"/> to drop the event.</returns>
            <remarks>
            The event's type (eventtype), parameter (param), and channel (chan) can be modified, but not its position (tick or pos). 
            It is also possible to apply additional events at the same time via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/>, but not <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/>.
            <para>MIDI_EVENT_NOTE, MIDI_EVENT_NOTESOFF, and MIDI_EVENT_SOUNDOFF events are ignored while seeking so they will not be received by a filtering function then. 
            MIDI_EVENT_TEMPO events can be changed while seeking but doing so when seeking in bytes (BASS_POS_BYTE) will result in reaching a different position. 
            Seeking in ticks (BASS_POS_MIDI_TICK) is unaffected by tempo changes. The MIDI_EVENT_SPEED event can be used to modify the tempo without affecting seeking.</para>
            </remarks>
            <example>
            A filtering function that drops all notes with a velocity lower than 10:
            <code lang="C#">
            private void MidiFilterProc(int handle, int track, IntPtr eventPtr, bool seeking, IntPtr user)
            {
                var midievent = BASS_MIDI_EVENT.FromIntPtr(eventPtr);
            
            	if (midievent.eventtype == BASSMIDIEvent.MIDI_EVENT_NOTE)
            	{
            	    // got a note
            	    int vel = Utils.HighWord32(midievent.param); // extract the velocity
            	    if (vel &lt; 10 &amp;&amp; vel &gt; 0)
            	        return false; // drop the note if velocity is below 10 and not 0 (note off)
            	}
            	return true; // process the event
            }
            </code>
            
            A filtering function that changes bank 2 to bank 1;
            <code lang="C#">
            private void MidiFilterProc(int handle, int track, IntPtr eventPtr, bool seeking, IntPtr user)
            {
                var midievent = BASS_MIDI_EVENT.FromIntPtr(eventPtr);
            
            	if (midievent.eventtype == BASSMIDIEvent.MIDI_EVENT_BANK &amp;&amp; midievent.param == 2)
            	{
            	    // got a bank 2 request
            	    midievent.param = 1; // change it to bank 1
            	}
            	return true; // process the event
            }
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Mix.BassMix">
            <summary>
            BASS.NET API wrapper for BASSMIX.DLL
            <para>Requires: bassmix.dll - Mixing and resample channels (MIX) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            <para>A fairly common question is how to mix and/or resample channels. To make that task simple, here's the add-on that'll do it.</para>
            </summary>
            <remarks>
            <para>BASSMIX is an extension to the BASS audio library, enabling the mixing and resampling of streams and channels.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_GetVersion">
            <summary>
            Retrieves the version number of the BASSmix.DLL that is loaded.
            </summary>
            <returns>The BASSmix version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASSmix supports all the BASSmix functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.Mix.BassMix.BASSMIXVERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            Checking the major version only:
            <code lang="C#">
            if ( Utils.HighWord(BassMix.BASS_Mixer_GetVersion()) != BassMix.BASSMIXVERSION )
            {
              MessageBox.Show(this, "Wrong BassMix Version!");
            }
            </code>
            <code lang="VB">
            If Utils.HighWord(BassMix.BASS_Mixer_GetVersion()) &lt;&gt; BassFx.BASSMIXVERSION Then
              MessageBox.Show(Me, "Wrong BassMix Version!")
            End If
            </code>
            Checking for full version "2.4.1.3":
            <code>
            if (BassMix.BASS_Mixer_GetVersion() &lt; Utils.MakeLong(0x0103, 0x0204))
            {
              MessageBox.Show(this, "Wrong BassMix Version!");
            }
            </code>
            <code lang="VB">
            If BassMix.BASS_Mixer_GetVersion() &lt; Utils.MakeLong(&amp;H103, &amp;H204) Then
              MessageBox.Show(Me, "Wrong BassMix Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASSmix.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASSmix version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASSmix supports all the BASSmix functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            <code lang="C#">
            Version expectedVersion = new Version(2, 4);
            if (BassMix.BASS_Mixer_GetVersion(2) &lt; expectedVersion)
            {
              MessageBox.Show( this, "Wrong BassMix Version!" );
            }
            </code>
            <code lang="VB">
            Dim expectedVersion As New Version(2, 4)
            If BassMix.BASS_Mixer_GetVersion(2) &lt; expectedVersion Then
              MessageBox.Show(Me, "Wrong BassMix Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a mixer stream.
            </summary>
            <param name="freq">The sample rate of the mixer output (e.g. 44100).</param>
            <param name="chans">The number of channels... 1 = mono, 2 = stereo, 4 = quadraphonic, 6 = 5.1, 8 = 7.1. More than stereo requires WDM drivers (or the BASS_STREAM_DECODE flag) in Windows, and the SPEAKER flags are ignored.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Produce 8-bit output. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the stream is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Produce 32-bit floating-point output. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See Floating-point channels for more info.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono (chans=1). The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_MIXER_END</term><description>End the stream when there are no active (including stalled) source channels, else it's never-ending.</description></item>
            <item><term>BASS_MIXER_NONSTOP</term><description>Don't stop producing output when there are no active source channels, else it will be stalled until there are active sources.</description></item>
            <item><term>BASS_MIXER_NOSPEAKER</term><description>Ignore speaker arrangement. This flag tells BASSmix to not make any special consideration for speaker arrangements when mixing multi-channel content or 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) output.</description></item>
            <item><term>BASS_MIXER_POSEX</term><description>Keep a record of the source positions, making it possible to account for output latency when retrieving a source position. How far back the position record goes is determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIXER_POSEX"/> config option. If this flag is not used and neither is the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> flag, then the mixer will automatically have a position record of equal length to the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> setting.</description></item>
            <item><term>BASS_MIXER_QUEUE</term><description>Play the sources one at a time, in the order that they were added.</description></item>
            <item><term>BASS_MIXER_RESUME</term><description>When stalled, resume the mixer immediately upon a new or unpaused source, else it will be resumed at the next update cycle.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description>Speaker assignment flags.</description></item>
            </list>
            </param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Source channels are added into a mixer using the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/> functions, and removed using the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelRemove(System.Int32)"/> function.
             Sources can be added and removed at any time, so a mixer does not have a predetermined length and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> is not applicable. Likewise, seeking is not possible, except to position 0, as described below.</para>
            <para>If the mixer output is being played (it is not a decoding channel), then there will be some delay in the effect of adding/removing source channels or changing their attributes being heard. This latency can be reduced by making use of the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> and <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATEPERIOD"/> config options.
            The playback buffer can be flushed by calling <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> (restart = TRUE) or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> (pos = 0). That can also be done to restart a mixer that has ended.</para>
            <para>Seeking in a mix via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> directly is not possible, but seeking can be implemented by setting the position of each source to where it would be at the seek position, and then flushing the mixer's playback buffer (see above) if required.</para>
            <para>Unless the BASS_MIXER_END flag is specified, a mixer stream will never end. When there are no sources (or the sources have ended/stalled), it'll produce no output until there's an active source. 
            That's unless the BASS_MIXER_NONSTOP flag is used, in which case it will produce silent output while there are no active sources. The BASS_MIXER_END and BASS_MIXER_NONSTOP flags can be toggled at any time, using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</para>
            <para>A queued mixer, with the BASS_MIXER_QUEUE flag set, will play its sources one after another in the order that they were added, without a gap unless a delay is specified with <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>. After a source has been played, it will be removed from the mixer. Queueing can be enabled or disabled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>. If it is disabled that way then all currently queued sources will start immediately, and if it is enabled then any current sources will continue to play normally and newly queued sources will start when the current ones have all ended. 
            A BASS_SYNC_MIXER_QUEUE sync can be set to be notified whenever a source is dequeued.</para>
            <para>Besides mixing channels, a mixer stream can be used as a resampler. In that case the freq parameter would be set the new sample rate, and the source channel's attributes would be left at their defaults. 
            A mixer stream can also be used to downmix, upmix and generally rearrange channels, using the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetMatrix(System.Int32,System.Single[0:,0:])">matrix mixing</see> features.</para>
            <para>By default, a mixer is single-threaded, meaning it will process its sources one at a time. When there are multiple sources and multiple CPU cores available, it may be advantageous to enable multiple threads via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_THREADS"/> setting.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding streams (BASS_STREAM_DECODE) are allowed when using the "no sound" device.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported (ie. no WDM drivers).</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The device/drivers do not support the requested speaker(s), or you're attempting to assign a stereo stream to a mono speaker.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficent memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Couldn't initialize 3D support for the stream.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Create a new mixer stream at 44kHz, stereo using floats - out of two source streams:
            <code lang="C#">
            // this will be the final mixer output stream being played
            int mixer = BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_SAMPLE_FLOAT );
            // now we need some channels to plug them in...create two decoding sources
            int streamA = Bass.BASS_StreamCreateFile("testA.mp3", 0, 0, 
                               BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            int streamB = Bass.BASS_StreamCreateFile("testB.mp3", 0, 0, 
                               BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            // finally we plug them into the mixer (no downmix, since we assume the sources to be stereo)
            bool okA = BassMix.BASS_Mixer_StreamAddChannel(mixer, streamA, BASSFlag.BASS_DEFAULT);
            bool okB = BassMix.BASS_Mixer_StreamAddChannel(mixer, streamB, BASSFlag.BASS_DEFAULT);
            // and play it...
            Bass.BASS_ChannelPlay(mixer, false);
            </code>
            <code lang="VB">
            ' this will be the final mixer output stream being played
            Dim mixer As Integer = BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_SAMPLE_FLOAT)
            ' now we need some channels to plug them in...create two decoding sources
            Dim streamA As Integer = Bass.BASS_StreamCreateFile("testA.mp3", 0, 0, 
                                          BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            Dim streamB As Integer = Bass.BASS_StreamCreateFile("testB.mp3", 0, 0, 
                                          BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            ' finally we plug them into the mixer (no downmix, since we assume the sources to be stereo)
            Dim okA As Boolean = BassMix.BASS_Mixer_StreamAddChannel(mixer, streamA, BASSFlag.BASS_DEFAULT)
            Dim okB As Boolean = BassMix.BASS_Mixer_StreamAddChannel(mixer, streamB, BASSFlag.BASS_DEFAULT)
            ' and play it...
            Bass.BASS_ChannelPlay(mixer, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Plugs a channel into a mixer.
            </summary>
            <param name="handle">The mixer handle (created with <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>).</param>
            <param name="channel">The handle of the channel to plug into the mixer... a HMUSIC, HSTREAM or HRECORD (e.g. created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_MIXER_CHAN_BUFFER</term><description>Buffer the sample data, for use by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)"/>. This increases memory requirements, so should not be enabled needlessly. The size of the buffer can be controlled via the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIXER_BUFFER</see> config option.</description></item>
            <item><term>BASS_MIXER_CHAN_DOWNMIX</term><description>Downmix to stereo, or mono if the mixer output is mono.</description></item>
            <item><term>BASS_MIXER_CHAN_LIMIT</term><description>Limit the mixer processing to the amount of data available from this source, while the source is active (not ended). If the source stalls, then the mixer will too, rather than continuing to mix other sources, as it would normally do. This flag can only be applied to one source per mixer, so it will automatically be removed from any other source of the same mixer.</description></item>
            <item><term>BASS_MIXER_CHAN_MATRIX</term><description>Creates a channel matrix, allowing the source channels to be sent to any of the mixer output channels, at any levels. The matrix can be retrieved and modified via the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetMatrix(System.Int32,System.Single[0:,0:])"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetMatrix(System.Int32,System.Single[0:,0:])"/> functions. The matrix will initially contain a one-to-one mapping, eg. left out = left in, right out = right in, etc... </description></item>
            <item><term>BASS_MIXER_CHAN_NORAMPIN</term><description>Don't ramp-in the start, including after seeking (<see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>). This is useful for gap-less playback, where a source channel is intended to seamlessly follow another. This does not affect volume and pan changes, which are always ramped.</description></item>
            <item><term>BASS_MIXER_CHAN_PAUSE</term><description>Don't process the source channel (add it in a paused mode). Use <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/> in order to toggle processing of the source channel.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the source channel when it ends. This allows you to add a channel to a mixer and forget about it, as it will automatically be freed when it has reached the end, or when the source is removed from the mixer or when the mixer is freed.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description>Speaker assignment flags.
            <para>If matrix mixing is enabled then the matrix will be initialized to place the source on the requested speaker(s), with downmixing also applied if the BASS_MIXER_CHAN_DOWNMIX flag is specified. The <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> BASS_DEVICE_NOSPEAKER flag has effect here.</para>
            </description></item>
            </list>
            </param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Internally, a mixer will use the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> function to get data from its source channels.
            That means that the source channels must be decoding channels (not using a <see cref="T:Un4seen.Bass.RECORDPROC"/> in the case of a recording channel).
            Plugging a channel into more than one mixer at a time is not possible because the mixers would be taking data away from each other.
            An advantage of this is that there is no need for a mixer's handle to be provided with the channel functions.
            It is actually possible to plug a channel into multiple mixers via the use of <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32[])">splitter streams</see>.</para>
            <para>Channels are removed with the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelRemove(System.Int32)"/> function. Channels are also automatically unplugged when they are freed.</para>
            <para>When mixing a channel, the mixer makes use of the channel's attributes (freq/volume/pan), as set with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSlideAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single,System.Int32)"/>. 
            The BASS_CONFIG_CURVE_VOL and BASS_CONFIG_CURVE_PAN config option settings are also used (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>).</para>
            <para>If a multi-channel stream has more channels than the mixer output, the extra channels will be discarded. For example, if a 5.1 stream is plugged into a stereo mixer, only the front-left/right channels will be retained. That is unless matrix mixing is used.</para>
            <para>The mixer processing is performed in floating-point, so it makes sense (for both quality and efficiency reasons) for the source channels to be floating-point too, though they do not have to be.
            It is also more efficient if the source channels have the same sample rate as the mixer output because no sample rate conversion is required then.
            When sample rate conversion is required, windowed sinc interpolation is used and the source's <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_SRC"/> attribute determines how many points/samples are used in that, as follows:
            0 (or below) = 4 points, 1 = 8 points, 2 = 16 points, 3 = 32 points, 4 = 64 points, 5 = 128 points, 6 (or above) = 256 points. 8 points are used if the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_SRC"/> attribute is unavailable (old BASS version).
            A higher number of points results in better sound quality (less aliasing and smaller transition band in the low-pass filter), but also higher CPU usage.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>At least one of <paramref name="handle"/> and <paramref name="channel"/> is not valid.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description><paramref name="channel"/> is not a decoding channel.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description><paramref name="channel"/> is already plugged into a mixer. It must be unplugged first.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The mixer does not support the requested speaker(s), or you're attempting to assign a stereo stream to a mono speaker.</description></item>
            </list>
            </para>
            <para><b>Platform-specific:</b></para>
            <para>The sample rate conversion processing is limited to 128 points on iOS and Android. The mixer processing is also performed in fixed-point rather than floating-point on Android.</para>
            </remarks>
            <example>
            Create a new mixer stream at 44kHz, stereo using floats - out of two source streams:
            <code lang="C#">
            // this will be the final mixer output stream being played
            int mixer = BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_SAMPLE_FLOAT );
            // now we need some channels to plug them in...create two decoding sources
            int streamA = Bass.BASS_StreamCreateFile("testA.mp3", 0, 0, 
                               BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            int streamB = Bass.BASS_StreamCreateFile("testB.mp3", 0, 0, 
                               BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            // finally we plug them into the mixer (no downmix, since we assume the sources to be stereo)
            bool okA = BassMix.BASS_Mixer_StreamAddChannel(mixer, streamA, BASSFlag.BASS_DEFAULT);
            bool okB = BassMix.BASS_Mixer_StreamAddChannel(mixer, streamB, BASSFlag.BASS_DEFAULT);
            // and play it...
            Bass.BASS_ChannelPlay(mixer, false);
            </code>
            <code lang="VB">
            ' this will be the final mixer output stream being played
            Dim mixer As Integer = BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_SAMPLE_FLOAT)
            ' now we need some channels to plug them in...create two decoding sources
            Dim streamA As Integer = Bass.BASS_StreamCreateFile("testA.mp3", 0, 0, 
                                          BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            Dim streamB As Integer = Bass.BASS_StreamCreateFile("testB.mp3", 0, 0, 
                                          BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            ' finally we plug them into the mixer (no downmix, since we assume the sources to be stereo)
            Dim okA As Boolean = BassMix.BASS_Mixer_StreamAddChannel(mixer, streamA, BASSFlag.BASS_DEFAULT)
            Dim okB As Boolean = BassMix.BASS_Mixer_StreamAddChannel(mixer, streamB, BASSFlag.BASS_DEFAULT)
            ' and play it...
            Bass.BASS_ChannelPlay(mixer, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)">
            <summary>
            Plugs a channel into a mixer, optionally delaying the start and limiting the length.
            </summary>
            <param name="handle">The mixer handle.</param>
            <param name="channel">The handle of the channel to plug into the mixer... a HMUSIC, HSTREAM or HRECORD.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_MIXER_CHAN_ABSOLUTE</term><description><paramref name="start"/> is an absolute position in the mixer output rather than relative to the mixer's current position. If the position has already passed then the source will start immediately.</description></item>
            <item><term>BASS_MIXER_CHAN_BUFFER</term><description>Buffer the sample data, for use by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)"/>. This increases memory requirements, so should not be enabled needlessly. The size of the buffer can be controlled via the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIXER_BUFFER</see> config option.</description></item>
            <item><term>BASS_MIXER_CHAN_DOWNMIX</term><description>Downmix to stereo, or mono if the mixer output is mono.</description></item>
            <item><term>BASS_MIXER_CHAN_LIMIT</term><description>Limit the mixer processing to the amount of data available from this source, while the source is active (not ended). If the source stalls, then the mixer will too, rather than continuing to mix other sources, as it would normally do. This flag can only be applied to one source per mixer, so it will automatically be removed from any other source of the same mixer.</description></item>
            <item><term>BASS_MIXER_CHAN_MATRIX</term><description>Creates a channel matrix, allowing the source channels to be sent to any of the mixer output channels, at any levels. The matrix can be retrieved and modified via the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetMatrix(System.Int32,System.Single[0:,0:])"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetMatrix(System.Int32,System.Single[0:,0:])"/> functions. The matrix will initially contain a one-to-one mapping, eg. left out = left in, right out = right in, etc... </description></item>
            <item><term>BASS_MIXER_CHAN_NORAMPIN</term><description>Don't ramp-in the start, including after seeking (<see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>). This is useful for gap-less playback, where a source channel is intended to seamlessly follow another. This does not affect volume and pan changes, which are always ramped.</description></item>
            <item><term>BASS_MIXER_CHAN_PAUSE</term><description>Don't process the source channel (add it in a paused mode). Use <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/> in order to toggle processing of the source channel.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the source channel when it ends. This allows you to add a channel to a mixer and forget about it, as it will automatically be freed when it has reached the end, or when the source is removed from the mixer or when the mixer is freed.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description>Speaker assignment flags.
            <para>If matrix mixing is enabled then the matrix will be initialized to place the source on the requested speaker(s), with downmixing also applied if the BASS_MIXER_CHAN_DOWNMIX flag is specified. The <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> BASS_DEVICE_NOSPEAKER flag has effect here.</para>
            </description></item>
            </list>
            </param>
            <param name="start">Delay (in bytes) before the channel is mixed in.</param>
            <param name="length">The maximum amount of data (in bytes) to mix... 0 = no limit. Once this end point is reached, the channel will be removed from the mixer.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function is identical to <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>, but with the additional ability to specify a delay and duration for the channel.
            <para>The <paramref name="start"/> and <paramref name="length"/> parameters relate to the mixer output. So when calculating these values, use the mixer stream's sample format rather than the source channel's. The start parameter is automatically rounded-down to the nearest sample boundary, while the length parameter is rounded-up to the nearest sample boundary. 
            If the mixer is restarted with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> (restart = TRUE) or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> (pos = 0), the start delay will not be reset at the same time; the delay will be whatever was remaining before the mixer restarted. This is true even if the BASS_MIXER_CHAN_ABSOLUTE flag is set.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>At least one of <paramref name="handle"/> and <paramref name="channel"/> is not valid.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description><paramref name="channel"/> is not a decoding channel.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description><paramref name="channel"/> is already plugged into a mixer. It must be unplugged first.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The mixer does not support the requested speaker(s), or you're attempting to assign a stereo stream to a mono speaker.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Add a channel to a mixer, delaying the start by 1 second and limiting the duration to 2 seconds:
            <code lang="C#">
            long start = Bass.BASS_ChannelSeconds2Bytes(mixer, 1.0); // delay
            long length = Bass.BASS_ChannelSeconds2Bytes(mixer, 2.0); // duration
            // add the channel
            BassMix.BASS_Mixer_StreamAddChannelEx(mixer, channel, 0, start, length);
            </code>
            <code lang="VB">
            Dim start As Long = Bass.BASS_ChannelSeconds2Bytes(mixer, 1.0) ' delay
            Dim length As Long = Bass.BASS_ChannelSeconds2Bytes(mixer, 2.0) ' duration
            ' add the channel
            BassMix.BASS_Mixer_StreamAddChannelEx(mixer, channel, 0, start, length)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamGetChannels(System.Int32,System.Int32[],System.Int32)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="splits"></param>
            <param name="count"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamGetChannels(System.Int32)">
            <summary>
            Retrieves a mixer's source channels.
            </summary>
            <param name="handle">The mixer handle.</param>
            <returns>The array of mixer's source handles (<see langword="null"/> on error, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            To determine whether a particular channel is plugged in a mixer, it is simpler to use <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetMixer(System.Int32)"/> instead of this function.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid mixer handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamGetChannelCount(System.Int32)">
            <summary>
            Gets the number of a mixer's source channels.
            </summary>
            <param name="handle">The mixer handle.</param>
            <returns>The number of source handles (-1 on error, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid mixer handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Retrieves the immediate sample data (or an FFT representation of it) of a mixer source channel.
            This overload uses an IntPtr to reference the buffer data.
            </summary>
            <param name="handle">The handle of the mixer source channel (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="buffer">Location to write the data as an <see cref="T:System.IntPtr"/> (can be <see cref="F:System.IntPtr.Zero"/> when handle is a recording channel (HRECORD), to discard the requested amount of data from the recording buffer).
            <para>Use "Marshal.AllocCoTaskMem" to allocate a memory buffer, use "Marshal.Copy" to copy the buffer data from unmanaged BASS to your managed code and use "Marshal.FreeCoTaskMem" to free the memory buffer when not needed anymore.</para>
            <para>Or make use of a "GCHandle" to receive data to a pinned managed object.</para>
            </param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_FLOAT</term><description>Return floating-point sample data.</description></item>
            <item><term>BASS_DATA_FFT256</term><description>256 sample FFT (returns 128 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT512</term><description>512 sample FFT (returns 256 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT1024</term><description>1024 sample FFT (returns 512 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT2048</term><description>2048 sample FFT (returns 1024 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT4096</term><description>4096 sample FFT (returns 2048 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT8192</term><description>8192 sample FFT (returns 4096 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT_INDIVIDUAL</term><description>Use this flag to request separate FFT data for each channel. The size of the data returned (as listed above) is multiplied by the number channels.</description></item>
            <item><term>BASS_DATA_FFT_NOWINDOW</term><description>This flag can be used to prevent a hanning window being applied to the sample data when performing an FFT.</description></item>
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting FFT data, the number of bytes read from the channel (to perform the FFT) is returned.</para>
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, but it gets the data from the channel's buffer instead of decoding it from the channel, 
            which means that the mixer doesn't miss out on any data. In order to do this, the source channel must have buffering enabled, via the BASS_MIXER_CHAN_BUFFER flag.</para>
            <para>If the mixer is being played by BASS, the returned data will be in sync with what is currently being heard from the mixer. 
            If another output system is being used, the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY"/> option can be used to tell the mixer what the latency is so that it can be taken account of, 
            otherwise the channel's most recent data will be returned. The <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIXER_BUFFER</see> config option determines how far back data will be available from, 
            so it should be set high enough to cover any latency.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel does not have buffering (BASS_MIXER_CHAN_BUFFER) enabled.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.Single[],System.Int32)">
            <summary>
            Retrieves the immediate sample data (or an FFT representation of it) of a mixer source channel.
            This overload uses a managed float[] to reference the buffer data as 32-bit!
            SHOULD ONLY BE USED, if the stream was created with BASS_SAMPLE_FLOAT!
            </summary>
            <param name="handle">The handle of the mixer source channel (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="buffer">The array (float[]) to receive the data, use BASS_SAMPLE_FLOAT when creating the channel stream!</param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_FLOAT</term><description>Return floating-point sample data.</description></item>
            <item><term>BASS_DATA_FFT256</term><description>256 sample FFT (returns 128 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT512</term><description>512 sample FFT (returns 256 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT1024</term><description>1024 sample FFT (returns 512 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT2048</term><description>2048 sample FFT (returns 1024 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT4096</term><description>4096 sample FFT (returns 2048 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT8192</term><description>8192 sample FFT (returns 4096 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT_INDIVIDUAL</term><description>Use this flag to request separate FFT data for each channel. The size of the data returned (as listed above) is multiplied by the number channels.</description></item>
            <item><term>BASS_DATA_FFT_NOWINDOW</term><description>This flag can be used to prevent a hanning window being applied to the sample data when performing an FFT.</description></item>
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting FFT data, the number of bytes read from the channel (to perform the FFT) is returned.</para>
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, but it gets the data from the channel's buffer instead of decoding it from the channel, 
            which means that the mixer doesn't miss out on any data. In order to do this, the source channel must have buffering enabled, via the BASS_MIXER_CHAN_BUFFER flag.</para>
            <para>If the mixer is being played by BASS, the returned data will be in sync with what is currently being heard from the mixer. 
            If another output system is being used, the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY"/> option can be used to tell the mixer what the latency is so that it can be taken account of, 
            otherwise the channel's most recent data will be returned. The <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIXER_BUFFER</see> config option determines how far back data will be available from, 
            so it should be set high enough to cover any latency.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel does not have buffering (BASS_MIXER_CHAN_BUFFER) enabled.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.Int16[],System.Int32)">
            <summary>
            Retrieves the immediate sample data of a mixer source channel.
            This overload uses a managed short[] to reference the buffer data as 16-bit values - each element will represent one channel in this case!
            SHOULD ONLY BE USED, if the stream was created WITHOUT BASS_SAMPLE_FLOAT or BASS_SAMPLE_8BITS!
            </summary>
            <param name="handle">The handle of the mixer source channel (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="buffer">The array (short[]) to receive the data, e.g. when creating the channel stream with default setting, meaning 16-bit samples!</param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, but it gets the data from the channel's buffer instead of decoding it from the channel, 
            which means that the mixer doesn't miss out on any data. In order to do this, the source channel must have buffering enabled, via the BASS_MIXER_CHAN_BUFFER flag.</para>
            <para>If the mixer is being played by BASS, the returned data will be in sync with what is currently being heard from the mixer. 
            If another output system is being used, the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY"/> option can be used to tell the mixer what the latency is so that it can be taken account of, 
            otherwise the channel's most recent data will be returned. The <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIXER_BUFFER</see> config option determines how far back data will be available from, 
            so it should be set high enough to cover any latency.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel does not have buffering (BASS_MIXER_CHAN_BUFFER) enabled.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.Int32[],System.Int32)">
            <summary>
            Retrieves the immediate sample data of a mixer source channel.
            This overload uses a managed int[] to reference the buffer data (Note: an int is 32-bit meaning if we expect to receive 16-bit data stereo a single int value will contain 2 x 16-bit, so a full stereo pair of data)!
            SHOULD ONLY BE USED, if the stream was created WITHOUT BASS_SAMPLE_FLOAT or BASS_SAMPLE_8BITS!
            </summary>
            <param name="handle">The handle of the mixer source channel (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="buffer">The array (int[]) to receive the data, e.g. when creating the channel stream with default setting, meaning 16-bit samples, an int value contains 2 channels (left and right)!</param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, but it gets the data from the channel's buffer instead of decoding it from the channel, 
            which means that the mixer doesn't miss out on any data. In order to do this, the source channel must have buffering enabled, via the BASS_MIXER_CHAN_BUFFER flag.</para>
            <para>If the mixer is being played by BASS, the returned data will be in sync with what is currently being heard from the mixer. 
            If another output system is being used, the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY"/> option can be used to tell the mixer what the latency is so that it can be taken account of, 
            otherwise the channel's most recent data will be returned. The <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIXER_BUFFER</see> config option determines how far back data will be available from, 
            so it should be set high enough to cover any latency.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel does not have buffering (BASS_MIXER_CHAN_BUFFER) enabled.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.Byte[],System.Int32)">
            <summary>
            Retrieves the immediate sample data of a mixer source channel.
            This overload uses a managed byte[] to reference the buffer data!
            SHOULD ONLY BE USED, if the stream was created with BASS_SAMPLE_8BITS!
            </summary>
            <param name="handle">The handle of the mixer source channel (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="buffer">The array (byte[]) to receive the data, e.g. when creating the channel with BASS_SAMPLE_8BITS!</param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, but it gets the data from the channel's buffer instead of decoding it from the channel, 
            which means that the mixer doesn't miss out on any data. In order to do this, the source channel must have buffering enabled, via the BASS_MIXER_CHAN_BUFFER flag.</para>
            <para>If the mixer is being played by BASS, the returned data will be in sync with what is currently being heard from the mixer. 
            If another output system is being used, the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY"/> option can be used to tell the mixer what the latency is so that it can be taken account of, 
            otherwise the channel's most recent data will be returned. The <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIXER_BUFFER</see> config option determines how far back data will be available from, 
            so it should be set high enough to cover any latency.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel does not have buffering (BASS_MIXER_CHAN_BUFFER) enabled.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)">
            <summary>
            Retrieves the level (peak amplitude) of a mixer source channel.
            </summary>
            <param name="handle">The handle of the mixer source channel (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.
            <para>If successful, the level of the left channel is returned in the low word (low 16-bits, use <see cref="M:Un4seen.Bass.Utils.LowWord32(System.Int32)"/>), and the level of the right channel is returned in the high word (high 16-bits, use <see cref="M:Un4seen.Bass.Utils.HighWord32(System.Int32)"/>). If the channel is mono, then the low word is duplicated in the high word. 
            The level ranges linearly from 0 (silent) to 32768 (max). 0 will be returned when a channel is stalled.</para>
            </returns>
            <remarks>
            <para>This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but it gets the level from the channel's buffer instead of decoding data from the channel, which means that the mixer doesn't miss out on any data. 
            In order to do this, the source channel must have buffering enabled, via the BASS_MIXER_CHAN_BUFFER flag.</para>
            <para>If the mixer is being played by BASS, the returned level will be in sync with what is currently being heard from the mixer. 
            If another output system is being used, the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY"/> option can be used to tell the mixer what the latency is so that it can be taken account of, 
            otherwise the channel's most recent data will be used to get the level. The <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_MIXER_BUFFER</see> config option determines how far back the level will be available from, 
            so it should be set high enough to cover any latency.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel does not have buffering (BASS_MIXER_CHAN_BUFFER) enabled.</description></item>
            <item><term>BASS_ERROR_NOPLAY</term><description>The mixer is not playing.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the left and right levels of a stereo channel:
            <code lang="C#">
            BassMix.BASS_Mixer_StreamAddChannel(mixer, channel, BASSFlag.BASS_MIXER_CHAN_BUFFER);
            int level = BassMix.BASS_Mixer_ChannelGetLevel(channel);
            int left = Utils.LowWord32(level); // the left level
            int right = Utils.HighWord32(level); // the right level
            </code>
            <code lang="VB">
            BassMix.BASS_Mixer_StreamAddChannel(mixer, channel, BASSFlag.BASS_MIXER_CHAN_BUFFER)
            Dim level As Integer = BassMix.BASS_Mixer_ChannelGetLevel(channel)
            Dim left As Integer = Utils.LowWord32(level) ' the left level
            Dim right As Integer = Utils.HighWord32(level) ' the right level
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32,System.Single[],System.Single,Un4seen.Bass.BASSLevel)">
            <summary>
            Retrieves the level (peak amplitude) of a mixer source channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="levels">The array in which the levels are to be returned.</param>
            <param name="length">The amount of data to inspect to calculate the level, in seconds. The maximum is 1 second. 
            Less data than requested may be used if the full amount is not available, eg. if the source's buffer (determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIXER_BUFFER"/> config option) is shorter.</param>
            <param name="flags">What levels to retrieve. One of the following (see <see cref="T:Un4seen.Bass.BASSLevel"/>):
            <list type="table">
            <item><term>BASS_LEVEL_ALL</term><description>Retrieves a separate level for each channel.</description></item>
            <item><term>BASS_LEVEL_MONO</term><description>Retrieve a single mono level.</description></item>
            <item><term>BASS_LEVEL_STEREO</term><description>Get a stereo level. The left level will be from the even channels, and the right level will be from the odd channels. If there are an odd number of channels then the left and right levels will both include all channels.</description></item>
            <item><term>BASS_LEVEL_RMS</term><description>Flag: Get the RMS level. Otherwise the peak level.</description></item>
            <item><term>BASS_LEVEL_VOLPAN</term><description>Apply the current <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL"/> and <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_PAN"/> values and volume and pan envelopes to the level reading. Due to buffering, these values might not be the same as they were when the currently heard data was mixed.</description></item>
            </list>
            </param>
            <returns>On success <see langword="true"/> is returned - else <see langword="false"/>, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.
            <para>If successful, the requested levels are returned in the <paramref name="levels"/> array.</para>
            </returns>
            <remarks>
            This function is like the standard <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)"/>, but it gets the level from the channel's buffer instead of decoding data from the channel, 
            which means that the mixer does not miss out on any data. In order to do this, the source channel must have buffering enabled via the <see cref="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_BUFFER"/> flag.
            <para>This function measures the level of the channel's sample data, not its level in the mixer output. 
            It includes the effect of any DSP/FX set on the channel, but not the effect of the channel's <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL"/> or <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_PAN"/> attributes or matrix mixing or any envelope set via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelope(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE[],System.Int32)"/>.</para>
            <para>If the mixer is being played by BASS, the returned level will be in sync with what is currently being heard from the mixer. 
            If another output system is being used, the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY"/> option can be used to tell the mixer what the latency is so that it can be taken account of, otherwise the channel's most recent data will be used to get the level. 
            The <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIXER_BUFFER"/> config option determines how far back the level will be available from, so it should be set high enough to cover any latency.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel does not have buffering (BASS_MIXER_CHAN_BUFFER) enabled.</description></item>
            <item><term>BASS_ERROR_NOPLAY</term><description>The mixer is not playing.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32,System.Single,Un4seen.Bass.BASSLevel)">
            <summary>
            Retrieves the level (peak amplitude) of a mixer source channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="length">The amount of data to inspect to calculate the level, in seconds. The maximum is 1 second. 
            Less data than requested may be used if the full amount is not available, eg. if the source's buffer (determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIXER_BUFFER"/> config option) is shorter.</param>
            <param name="flags">What levels to retrieve. One of the following (see <see cref="T:Un4seen.Bass.BASSLevel"/>):
            <list type="table">
            <item><term>BASS_LEVEL_ALL</term><description>Retrieves a separate level for each channel.</description></item>
            <item><term>BASS_LEVEL_MONO</term><description>Retrieve a single mono level.</description></item>
            <item><term>BASS_LEVEL_STEREO</term><description>Get a stereo level. The left level will be from the even channels, and the right level will be from the odd channels. If there are an odd number of channels then the left and right levels will both include all channels.</description></item>
            <item><term>BASS_LEVEL_RMS</term><description>Flag: Get the RMS level. Otherwise the peak level.</description></item>
            <item><term>BASS_LEVEL_VOLPAN</term><description>Apply the current BASS_ATTRIB_VOL and BASS_ATTRIB_PAN values to the level reading.</description></item>
            </list>
            </param>
            <returns>On success the array of levels is returned - else <see langword="null"/>, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.
            </returns>
            <remarks>
            This function is like the standard <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)"/>, but it gets the level from the channel's buffer instead of decoding data from the channel, 
            which means that the mixer does not miss out on any data. In order to do this, the source channel must have buffering enabled via the <see cref="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_BUFFER"/> flag.
            <para>This function measures the level of the channel's sample data, not its level in the mixer output. 
            It includes the effect of any DSP/FX set on the channel, but not the effect of the channel's <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL"/> or <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_PAN"/> attributes or matrix mixing or any envelope set via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelope(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE[],System.Int32)"/>.</para>
            <para>If the mixer is being played by BASS, the returned level will be in sync with what is currently being heard from the mixer. 
            If another output system is being used, the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY"/> option can be used to tell the mixer what the latency is so that it can be taken account of, otherwise the channel's most recent data will be used to get the level. 
            The <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIXER_BUFFER"/> config option determines how far back the level will be available from, so it should be set high enough to cover any latency.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel does not have buffering (BASS_MIXER_CHAN_BUFFER) enabled.</description></item>
            <item><term>BASS_ERROR_NOPLAY</term><description>The mixer is not playing.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)">
            <summary>
            Modifies and/or retrieves a channel's mixer flags.
            </summary>
            <param name="handle">The handle of the mixer source channel to modify (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_MIXER_CHAN_BUFFER</term><description>Buffer the sample data, for use by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)"/>.</description></item>
            <item><term>BASS_MIXER_CHAN_NORAMPIN</term><description>Don't ramp-in the start, including after seeking (<see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>). This is useful for gap-less playback, where a source channel is intended to seamlessly follow another. This does not affect volume and pan changes, which are always ramped.</description></item>
            <item><term>BASS_MIXER_CHAN_PAUSE</term><description>Don't process the source channel (paused mode).</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the source channel when it ends. This allows you to add a channel to a mixer and forget about it, as it will automatically be freed when it has reached the end, or when the source is removed from the mixer or when the mixer is freed.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description>Speaker assignment flags.</description></item>
            </list>
            </param>
            <param name="mask">The flags (as above) to modify. Flags that are not included in this are left as they are, so it can be set to 0 (<see cref="F:Un4seen.Bass.BASSFlag.BASS_DEFAULT"/>) in order to just retrieve the current flags. 
            To modify the speaker flags, any of the BASS_SPEAKER_xxx flags can be used in the mask (no need to include all of them).</param>
            <returns>If successful, the channel's updated flags are returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function only deals with the channel's mixer related flags. The channel's standard flags, for example looping (BASS_SAMPLE_LOOP), are unaffected - use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/> to modify them.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The mixer does not support the requested speaker(s), or the channel has matrix mixing enabled.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // Disable ramping-in of a channel:
            BassMix.BASS_Mixer_ChannelFlags(channel, BASSFlag.BASS_MIXER_CHAN_NORAMPIN, BASSFlag.BASS_MIXER_CHAN_NORAMPIN);
            
            // Enable ramping-in of a channel:
            BassMix.BASS_Mixer_ChannelFlags(channel, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_MIXER_CHAN_NORAMPIN);
            </code>
            <code lang="VB">
            ' Disable ramping-in of a channel:
            BassMix.BASS_Mixer_ChannelFlags(channel, BASSFlag.BASS_MIXER_CHAN_NORAMPIN, BASSFlag.BASS_MIXER_CHAN_NORAMPIN)
            
            ' Enable ramping-in of a channel:
            BassMix.BASS_Mixer_ChannelFlags(channel, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_MIXER_CHAN_NORAMPIN)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelPause(System.Int32)">
            <summary>
            Pauses a mixer source channel (don't process the source).
            </summary>
            <param name="handle">The handle of the mixer source channel to pause (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Use this method to pause a mixer source channel currently playing (which stops the mixer from processing that source). 
            Use <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelPlay(System.Int32)"/> to resume a paused mixer source channel.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The mixer does not support the requested speaker(s), or the channel has matrix mixing enabled.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelPlay(System.Int32)">
            <summary>
            Starts (or resumes) playback of a mixer source channel (process the source).
            </summary>
            <param name="handle">The handle of the mixer source channel to play (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>If the mixer source channel is already playing this method has no effect - else it removes the <see cref="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_PAUSE"/> flag from the mixer source channel.
            Use <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelPause(System.Int32)"/> to pause a mixer source channel.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The mixer does not support the requested speaker(s), or the channel has matrix mixing enabled.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelIsActive(System.Int32)">
            <summary>
            Checks if a mixer source channel is active.
            </summary>
            <param name="handle">The handle of the mixer source channel to check (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <returns>The return value is one of the folowing (see <see cref="T:Un4seen.Bass.BASSActive"/>):
            <list type="table">
            <item><term>BASS_ACTIVE_STOPPED</term><description>The source is not active, or handle is not a valid mixer source channel.</description></item>
            <item><term>BASS_ACTIVE_PLAYING</term><description>The source is playing.</description></item>
            <item><term>BASS_ACTIVE_PAUSED</term><description>The source is paused.</description></item>
            <item><term>BASS_ACTIVE_STALLED</term><description>The source is paused.</description></item>
            <item><term>BASS_ACTIVE_WAITING</term><description>The channel is waiting to start because it was delayed by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>.</description></item>
            <item><term>BASS_ACTIVE_QUEUED</term><description>The channel is waiting in a queue.</description></item>
            </list>
            </returns>
            <remarks>
            <para>This function gives the status of a source channel as the mixer currently sees it, which may be ahead of what is heard if the mixer is playing due to buffering. The source channel's status is unaffected by the mixer's status, eg. whether it is playing or stopped.</para>
            <para>A BASS_SYNC_STALL sync can be set via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be notified when a channel stalls/resumes.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelRemove(System.Int32)">
            <summary>
            Unplugs a channel from a mixer.
            </summary>
            <param name="handle">The handle of the mixer source channel to unplug (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            If this function is called from within a mixtime sync callback and the source has the BASS_STREAM_AUTOFREE flag set on it, then the source will be freed asynchronously (in another thread) to avoid delaying the mixer's other processing.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetMixer(System.Int32)">
            <summary>
            Retrieves the mixer that a channel is plugged into.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/> beforehand).</param>
            <returns>If successful, the mixer stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)">
            <summary>
            Sets the playback position of a mixer source channel.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="pos">The position, in bytes. With MOD musics, the <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/>(order,row) method can be used to set the position in orders and rows instead of bytes.</param>
            <param name="mode">
            <list type="table">
            <item><term>BASS_POS_BYTE</term><description>The position is in bytes, which will be rounded down to the nearest sample boundary.</description></item>
            <item><term>BASS_POS_MUSIC_ORDER</term><description>The position is in orders and rows... use <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/>. (HMUSIC only).</description></item>
            <item><term>BASS_POS_OGG</term><description>The position is a bitstream number in an OGG file... 0 = first.</description></item>
            <item><term>BASS_POS_DECODETO</term><description>Flag: Decode/render up to the position rather than seeking to it. This is useful for streams that are unseekable or that have inexact seeking, but it is generally slower than normal seeking and the requested position cannot be behind the current decoding position. This flag can only be used with the BASS_POS_BYTE mode.</description></item>
            <item><term>BASS_POS_INEXACT</term><description>Flag: Allow inexact seeking. For speed, seeking may stop at the beginning of a block rather than partially processing the block to reach the requested position.</description></item>
            <item><term>BASS_POS_RELATIVE</term><description>Flag: The requested position is relative to the current position. pos is treated as signed in this case and can be negative. Unless the BASS_POS_MIXER_RESET flag is also used, this is relative to the current decoding/processing position, which will be ahead of the currently heard position if the mixer output is buffered.</description></item>
            <item><term>BASS_MUSIC_POSRESET</term><description>Flag: Stop all notes. This flag is applied automatically if it has been set on the channel, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>. (HMUSIC).</description></item>
            <item><term>BASS_MUSIC_POSRESETEX</term><description>Flag: Stop all notes and reset bpm/etc. This flag is applied automatically if it has been set on the channel, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>. (HMUSIC).</description></item>
            <item><term>BASS_MIXER_CHAN_NORAMPIN</term><description>Flag: Don't ramp-in the start after seeking. This flag is applied automatically if it has been set on the channel, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_POS_MIXER_RESET</term><description>Flag: Flush the mixer's playback buffer, so that the new position is heard immediately in the mixer output. This generally should not be used when the mixer is playing multiple sources, as it will cause a skip in the sound of the other sources. This flag has no effect if the mixer has the BASS_STREAM_DECODE flag set, as the mixer does not have a playback buffer then.</description></item>
            </list>
            <i>Other modes and flags may be supported by add-ons, see the documentation.</i>
            </param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function works exactly like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, except that it also resets things for the channel in the mixer,
            well as supporting the BASS_MIXER_CHAN_NORAMPIN and BASS_POS_MIXER_RESET flag. See <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> for details.
            <para>For custom looping purposes (eg. in a mixtime SYNCPROC), the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> function should be used instead of this.</para>
            <para>The playback buffer of the mixer can be flushed by using pos = 0.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTFILE</term><description>The stream is not a file stream.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description>The requested position is illegal.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The download has not yet reached the requested position.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Sets the position of a source stream to 35seconds:
            <code lang="C#">
            BassMix.BASS_Mixer_ChannelSetPosition(streamA, Bass.BASS_ChannelSeconds2Bytes(streamA, 35.0));
            </code>
            <code lang="VB">
            BassMix.BASS_Mixer_ChannelSetPosition(streamA, Bass.BASS_ChannelSeconds2Bytes(streamA, 35.0));
            </code>
            Reset the playback buffer of the mixer:
            <code lang="C#">
            BassMix.BASS_Mixer_ChannelSetPosition(mixer, 0L);
            </code>
            <code lang="VB">
            BassMix.BASS_Mixer_ChannelSetPosition(mixer, 0L)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetPosition(System.Int32,System.Int64)">
            <summary>
            Sets the playback position in bytes of a mixer source channel (using <see cref="F:Un4seen.Bass.BASSMode.BASS_POS_BYTE"/>).
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="pos">The position, in bytes. With MOD musics, the <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/>(order,row) method can be used to set the position in orders and rows instead of bytes.
            <para>The playback buffer of the mixer can be flushed by using pos = 0.</para>
            </param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function works exactly like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, except that it also resets things for the channel in the mixer. See <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> for details.
            <para>For custom looping purposes (eg. in a mixtime SYNCPROC), the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> function should be used instead of this</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTFILE</term><description>The stream is not a file stream.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description>The requested position is illegal.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The download has not yet reached the requested position.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Sets the position of a source stream to 35seconds:
            <code lang="C#">
            BassMix.BASS_Mixer_ChannelSetPosition(streamA, Bass.BASS_ChannelSeconds2Bytes(streamA, 35.0));
            </code>
            <code lang="VB">
            BassMix.BASS_Mixer_ChannelSetPosition(streamA, Bass.BASS_ChannelSeconds2Bytes(streamA, 35.0));
            </code>
            Reset the playback buffer of the mixer:
            <code lang="C#">
            BassMix.BASS_Mixer_ChannelSetPosition(mixer, 0L);
            </code>
            <code lang="VB">
            BassMix.BASS_Mixer_ChannelSetPosition(mixer, 0L)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)">
            <summary>
            Retrieves the playback position of a mixer source channel.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="mode">
            <list type="table">
            <item><term>BASS_POS_BYTE</term><description>Get the position in bytes.</description></item>
            <item><term>BASS_POS_MUSIC_ORDER</term><description>Get the position in orders and rows... LoWord = order, HiWord = row * scaler (<see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_PSCALER"/>). (HMUSIC only).</description></item>
            </list>
            <i>Other modes and flags may be supported by add-ons, see the documentation.</i>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            If successful, the position is returned.</returns>
            <remarks>
            This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, but it compensates for the mixer's buffering to return the source channel position that is currently being heard.
            So when used with a decoding channel (eg. a mixer source channel), this method will return the current decoding position.
            But if the mixer output is being played, then there is a playback buffer involved. This function compensates for that, to return the position that is currently being heard. 
            If the mixer is not being played by BASS, it is possible to account for any other output system latency with the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY"/> option or the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPositionEx(System.Int32,Un4seen.Bass.BASSMode,System.Int32)"/> function.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested position is not available.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPositionEx(System.Int32,Un4seen.Bass.BASSMode,System.Int32)">
            <summary>
            Retrieves the playback position of a mixer source channel, optionally accounting for some latency.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="mode">How to retrieve the position. One of the following:
            <list type="table">
            <item><term>BASS_POS_BYTE</term><description>Get the position in bytes.</description></item>
            <item><term>BASS_POS_MUSIC_ORDER</term><description>Get the position in orders and rows... LoWord = order, HiWord = row * scaler (<see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_PSCALER"/>). (HMUSIC only).</description></item>
            </list>
            <i>Other modes and flags may be supported by add-ons, see the documentation.</i>
            </param>
            <param name="delay">How far back (in bytes) in the mixer output to get the source channel's position from.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            If successful, the channel's position is returned.</returns>
            <remarks>
            <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> compensates for the mixer's playback buffering to give the position that is currently being heard, but if the mixer is feeding some other output system, it will not know how to compensate for that.
            This function fills that gap by allowing the latency to be specified in the call. This functionality requires the mixer to keep a record of its sources' position going back some time, and that is enabled via the <see cref="F:Un4seen.Bass.BASSFlag.BASS_MIXER_POSEX"/> flag when a mixer is created, with the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIXER_POSEX"/> config option determining how far back the position record goes.
            If the mixer is not a decoding channel (not using the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> flag), then it will automatically have a position record at least equal to its playback buffer length.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested position mode is not available, or delay goes beyond where the mixer has record of the source channel's position.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPosition(System.Int32)">
            <summary>
            Retrieves the playback position in bytes of a mixer source channel.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            If successful, the position is returned.</returns>
            <remarks>
            This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, but it compensates for the mixer's buffering to return the source channel position that is currently being heard.
            So when used with a decoding channel (eg. a mixer source channel), this method will return the current decoding position.
            But if the mixer output is being played, then there is a playback buffer involved. This function compensates for that, to return the position that is currently being heard. 
            If the mixer itself is a decoding channel, then this function is identical to using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested position is not available.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetMatrix(System.Int32,System.Single[0:,0:])">
            <summary>
            Sets a channel's mixing matrix, if it has one.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="matrix">The 2-dimensional array (float[,]) of the mixing matrix.</param>
            <returns>If successful, a <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Normally when mixing channels, the source channels are sent to the output in the same order - the left input is sent to the left output, and so on. Sometimes something a bit more complex than that is required. For example, if the source has more channels than the output, you may want to "downmix" the source so that all channels are present in the output. Equally, if the source has fewer channels than the output, you may want to "upmix" it so that all output channels have sound. Or you may just want to rearrange the channels. Matrix mixing allows all of these.</para>
            <para>A matrix mixer is created on a per-source basis (you can mix'n'match normal and matrix mixing), by using the <see cref="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_MATRIX"/> and/or <see cref="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_DOWNMIX"/> flag when calling <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>. 
            The matrix itself is a 2-dimensional array of floating-point mixing levels, with the source channels on one axis, and the output channels on the other. Some simple examples are shown below.</para>
            <para>The Matrix layout:
            <list type="table">
            <item><term>Horizontal</term><description>The Input channels (e.g. 1,0 = left-on,right-off).</description></item>
            <item><term>Vertical</term><description>The Output channels (e.g. 1,0 = left-on,right-off).</description></item>
            </list>
            <code lang="C#">
                   ---------> (Input)           ---------> (Input)
                  |    L  R                    |    L  R
                  | L  1  0                    |LF  1  0
                  | R  0  1                    |RF  0  1
                  v                            |LR  1  0
            (Output)                           |RR  0  1
                                               v
                                          (Output)
            </code>
            </para>
            <para>When streaming multi-channel sample data, the channel order of each sample is as follows:
            <list type="table">
            <item><term>3 channels</term><description>left-front, right-front, center.</description></item>
            <item><term>4 channels</term><description>left-front, right-front, left-rear/side, right-rear/side.</description></item>
            <item><term>6 channels(5.1)</term><description>left-front, right-front, center, LFE, left-rear/side, right-rear/side.</description></item>
            <item><term>8 channels(7.1)</term><description>left-front, right-front, center, LFE, left-rear/side, right-rear/side, left-rear center, right-rear center.</description></item>
            </list></para>
            <para>When using matrix mixing, the source channel's volume attribute still has effect, but the pan attribute doesn't. Whenever necessary, panning changes can be achieved by modifying the matrix.</para>
            <para>Do NOT use .Net jagged arrays, but only two-dimensional C-style arrays - as shown in the examples below!</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel is not using matrix mixing.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            The following example shows how to use Matrix mixing (stereo to quad matrix):
            <code lang="C#">
            // the source stream
            int streamA = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_STREAM_DECODE);
            // create a 4-channel mixer stream
            BASS_CHANNELINFO i = Bass.BASS_ChannelGetInfo(streamA);
            int mixer = BassMix.BASS_Mixer_StreamCreate(i.freq, 4, BASSFlag.BASS_DEFAULT );
            // add the source stream to the mixer with the matrix option
            BassMix.BASS_Mixer_StreamAddChannel(mixer, streamA, BASSFlag.BASS_MIXER_CHAN_MATRIX);
            // define a mixing matrix for the source stream
            float[,] matrix = { // stereo to quad matrix
            			{1, 0}, // left in = left front out
            			{0, 1}, // right in = right front out
            			{1, 0}, // left in = left rear out
            			{0, 1}  // right in = right rear out
            	       };
            // apply the matrix
            BassMix.BASS_Mixer_ChannelSetMatrix(streamA, matrix);
            // and play it
            Bass.BASS_ChannelPlay(mixer, false);
            </code>
            <code lang="VB">
            ' the source stream
            Dim streamA As Integer = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_STREAM_DECODE)
            ' create a 4-channel mixer stream
            Dim i As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(streamA)
            Dim mixer As Integer = BassMix.BASS_Mixer_StreamCreate(i.freq, 4, BASSFlag.BASS_DEFAULT)
            ' add the source stream to the mixer with the matrix option
            BassMix.BASS_Mixer_StreamAddChannel(mixer, streamA, BASSFlag.BASS_MIXER_CHAN_MATRIX)
            ' define a mixing matrix for the source stream
            Dim matrix(,) As Single = { ' stereo to quad matrix
                                {1, 0}, ' left in = left front out
                                {0, 1}, ' right in = right front out
                                {1, 0}, ' left in = left rear out
                                {0, 1}  ' right in = right rear out
                               }
            BassMix.BASS_Mixer_ChannelSetMatrix(streamA, matrix)
            ' and play it
            Bass.BASS_ChannelPlay(mixer, False)
            </code>
            Here are some more matrix examples...
            <code lang="null">
            // In = stereo, Out = stereo
            float[,] matrix = { 
            		{1, 0}, // left out = left in
            		{0, 1}, // right out = right in
            	};
            
            // In = stereo, Out = swapped stereo
            float[,] matrix = { 
            		{0, 1}, // left out = right in
            		{1, 0}, // right out = left in
            	};
            
            // In = stereo, Out = mono
            float[,] matrix = { 
            		{0.5f, 0.5f} // mono out = half left + right in
            	};
            
            // In = stereo, Out = quadraphonic (4 channels)
            float[,] matrix = { // stereo to quad matrix
            			{1, 0}, // left-front out = left in
            			{0, 1}, // right-front out = right in
            			{1, 0}, // left rear out = left in
            			{0, 1}  // right rear out = right in
            	};
            
            // In = mono, Out = quadraphonic (4 channels)
            float[,] matrix = { // mono to quad matrix
              		       {1}, // left-front out = mono in
            			   {1}, // right-front out = mono in
            			   {1}, // left rear out = mono in
            			   {1}  // right rear out = mono in
            	};
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetMatrixEx(System.Int32,System.Single[0:,0:],System.Single)">
            <summary>
            Fades to a channel's mixing matrix, if it has one.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="matrix">The 2-dimensional array (float[,]) of the new mixing matrix.</param>
            <param name="time">A period (in seconds) for the channel's current matrix to smoothly transition to the specified (new) matrix.</param>
            <returns>If successful, a <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            The function is identical to <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetMatrix(System.Int32,System.Single[0:,0:])"/> but with the option of transitioning over time to the specified matrix.
            If this function or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetMatrix(System.Int32,System.Single[0:,0:])"/> is called while a previous matrix transition is still in progress, then that transition will be stopped.
            If <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetMatrix(System.Int32,System.Single[0:,0:])"/> is called mid-transition, it will give the mid-transition matrix values.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel is not using matrix mixing.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetMatrix(System.Int32,System.Single[0:,0:])">
            <summary>
            Retrieves a channel's mixing matrix, if it has one.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="matrix">The 2-dimentional array (float[,]) where to write the matrix.</param>
            <returns>If successful, a <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>For more details see <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetMatrix(System.Int32,System.Single[0:,0:])"/>. The array must be big enough to get the matrix.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The channel is not using matrix mixing.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the matrix of a stereo channel plugged into a quad mixer:
            <code lang="C#">
            // you must initialize the array size correctly before getting the matrix!
            float[,] matrixGet = new float[4,2];
            BassMix.BASS_Mixer_ChannelGetMatrix(streamA, matrixGet);
            </code>
            <code lang="VB">
            ' you must initialize the array size correctly before getting the matrix!
            Dim matrixGet(4, 2) As Single
            BassMix.BASS_Mixer_ChannelGetMatrix(streamA, matrixGet)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetEnvelopePos(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,System.Single@)">
            <summary>
            Retrieves the current position and value of an envelope on a channel.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="type">The envelope to get the position/value of. One of the following (see <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope"/>):
            <list type="table">
            <item><term>BASS_MIXER_ENV_FREQ</term><description>Sample rate.</description></item>
            <item><term>BASS_MIXER_ENV_VOL</term><description>Volume.</description></item>
            <item><term>BASS_MIXER_ENV_PAN</term><description>Panning/balance.</description></item>
            </list>
            </param>
            <param name="value">A reference to a variable to receive the envelope value at the current position.</param>
            <returns>If successful, the current position of the envelope is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The envelope's current position is not necessarily what is currently being heard, due to buffering.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There is no envelope of the requested type on the channel.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            float val = 0f;
            int pos = BassMix.BASS_Mixer_ChannelGetEnvelope(source, 
                              BASSMIXEnvelope.BASS_MIXER_ENV_VOL, ref val);
            Console.WriteLine("Pos={0}, Val={1}", pos, val);
            </code>
            <code lang="VB">
            Dim val As Single = 0F
            Dim pos As Integer = BassMix.BASS_Mixer_ChannelGetEnvelope(source, 
                                         BASSMIXEnvelope.BASS_MIXER_ENV_VOL, val)
            Console.WriteLine("Pos={0}, Val={1}", pos, val)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetEnvelopePos(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,System.Object)">
            <summary>
            Retrieves the current position and value of an envelope on a channel.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="type">The envelope to get the position/value of. One of the following (see <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope"/>):
            <list type="table">
            <item><term>BASS_MIXER_ENV_FREQ</term><description>Sample rate.</description></item>
            <item><term>BASS_MIXER_ENV_VOL</term><description>Volume.</description></item>
            <item><term>BASS_MIXER_ENV_PAN</term><description>Panning/balance.</description></item>
            </list>
            </param>
            <param name="value">A reference to an object to receive the envelope value at the current position (<see langword="null"/> = don't retrieve it).</param>
            <returns>If successful, the current position of the envelope is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The envelope's current position is not necessarily what is currently being heard, due to buffering.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There is no envelope of the requested type on the channel.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int pos = BassMix.BASS_Mixer_ChannelGetEnvelope(source, 
                              BASSMIXEnvelope.BASS_MIXER_ENV_VOL, null);
            Console.WriteLine("Pos={0}", val);
            </code>
            <code lang="VB">
            Dim pos As Integer = BassMix.BASS_Mixer_ChannelGetEnvelope(source, 
                                         BASSMIXEnvelope.BASS_MIXER_ENV_VOL, Nothing)
            Console.WriteLine("Pos={0}", pos)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelopePos(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,System.Int64)">
            <summary>
            Sets the current position of an envelope on a channel.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="type">The envelope to set the position/value of. One of the following (see <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope"/>):
            <list type="table">
            <item><term>BASS_MIXER_ENV_FREQ</term><description>Sample rate.</description></item>
            <item><term>BASS_MIXER_ENV_VOL</term><description>Volume.</description></item>
            <item><term>BASS_MIXER_ENV_PAN</term><description>Panning/balance.</description></item>
            </list>
            </param>
            <param name="pos">The new envelope position, in bytes. If this is beyond the end of the envelope it will be capped or looped, depending on whether the envelope has looping enabled.</param>
            <returns>If successful, the current position of the envelope is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            During playback, the effect of changes are not heard instantaneously, due to buffering. To reduce the delay, use the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_BUFFER</see> config option config option to reduce the buffer length.
            <para>Note: Envelopes deal in mixer positions, not sources!
            So when you are changing the source position (e.g. via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> the envelope's positions doesn't change with it.
            You might use this method to align the envelope position accorting to the new source position (see example below).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There is no envelope of the requested type on the channel.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Align the envelope position when seeking on the source:
            <code lang="C#">
            // set a volume envelope on a source mixer channel (do this just once)
            BASS_MIXER_NODE[] nodes = 
              {
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 3d), 1f),
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 5d), 0f),
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 7d), 0f),
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 9d), 1f)
              };
            BassMix.BASS_Mixer_ChannelSetEnvelope(source, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, nodes);
            ...
            
            // change the source position and align the envelope position to it
            // pause mixer
            Bass.BASS_ChannelLock(mixer, true);
            BassMix.BASS_Mixer_ChannelSetPosition(source, newPos);
            // convert source pos to mixer pos 
            long envPos = Bass.BASS_ChannelSeconds2Bytes(mixer, Bass.BASS_ChannelBytes2Seconds(source, newPos));
            BassMix.BASS_Mixer_ChannelSetEnvelopePos(source, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, envPos);
            // resume mixer 
            Bass.BASS_ChannelLock(mixer, false);
            ...
            </code>
            <code lang="VB">
            Dim nodes As BASS_MIXER_NODE() =  
              {
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 3.0), 1F), 
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 5.0), 0F), 
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 7.0), 0F), 
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 9.0), 1F)
              }
            BassMix.BASS_Mixer_ChannelSetEnvelope(source, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, nodes)
            ...
            
            ' change the source position and align the envelope position to it
            ' pause mixer
            Bass.BASS_ChannelLock(mixer, True)
            BassMix.BASS_Mixer_ChannelSetPosition([source], newPos)
            ' convert source pos to mixer pos 
            Dim envPos As Long = Bass.BASS_ChannelSeconds2Bytes(mixer, Bass.BASS_ChannelBytes2Seconds([source], newPos))
            BassMix.BASS_Mixer_ChannelSetEnvelopePos([source], BASSMIXEnvelope.BASS_MIXER_ENV_VOL, envPos)
            ' resume mixer 
            Bass.BASS_ChannelLock(mixer, False)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelope(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE[],System.Int32)">
            <summary>
            Sets an envelope to modify the sample rate, volume or pan of a channel over a period of time.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="type">The envelope to get the position/value of. One of the following (see <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope"/>):
            <list type="table">
            <item><term>BASS_MIXER_ENV_FREQ</term><description>Sample rate.</description></item>
            <item><term>BASS_MIXER_ENV_VOL</term><description>Volume.</description></item>
            <item><term>BASS_MIXER_ENV_PAN</term><description>Panning/balance.</description></item>
            <item><term>BASS_MIXER_ENV_LOOP</term><description>Loop the envelope. This is a flag and can be used in combination with any of the above.</description></item>
            <item><term>BASS_MIXER_ENV_REMOVE</term><description>Remove the source from the mixer at the end of the envelope. This is a flag and can be used in combination with any of the above.</description></item>
            </list>
            </param>
            <param name="nodes">The array of envelope nodes, which should have sequential positions.</param>
            <param name="count">The number of elements in the nodes array... 0 = no envelope.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Envelopes are applied on top of the channel's attributes, as set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. 
            In the case of <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">BASS_MIXER_ENV_FREQ</see> and <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">BASS_MIXER_ENV_VOL</see>, 
            the final sample rate and volume is a product of the channel attribute and the envelope. 
            While in the <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">BASS_MIXER_ENV_PAN</see> case, the final panning is a sum of the channel attribute and envelope.</para>
            <para><see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetEnvelopePos(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,System.Single@)"/> can be used to get the current envelope position, 
            and a <see cref="T:Un4seen.Bass.BASSSync">BASS_SYNC_MIXER_ENVELOPE</see> sync can be set via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be informed of when an envelope ends. 
            The function can be called again from such a sync, in order to set a new envelope to follow the old one.</para>
            <para>Any previous envelope of the same type is replaced by the new envelope. A copy is made of the nodes array, so it does not need to persist beyond this function call.</para>
            <para>Note: Envelopes deal in mixer positions, not sources!
            You might use <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelopePos(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,System.Int64)"/> to adjust the envelope to a source channel position.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_MIXER_ENV_PAN envelope is not available when matrix mixing is enabled.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set an envelope to bounce the pan position between left and right every 4 seconds:
            <code lang="C#">
            BASS_MIXER_NODE[] nodes = 
              {
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 0d), 0f),
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 1d), -1f),
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 3d), 1f),
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 4d), 0f)
              };
            BassMix.BASS_Mixer_ChannelSetEnvelope(_channel, BASSMIXEnvelope.BASS_MIXER_ENV_PAN | BASSMIXEnvelope.BASS_MIXER_ENV_LOOP, nodes, 4);
            </code>
            <code lang="VB">
            Dim nodes As BASS_MIXER_NODE() =  
              {
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 0.0), 0F), 
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 1.0), -1F), 
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 3.0), 1F), 
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 4.0), 0F)
              }
            BassMix.BASS_Mixer_ChannelSetEnvelope(_channel, BASSMIXEnvelope.BASS_MIXER_ENV_PAN | BASSMIXEnvelope.BASS_MIXER_ENV_LOOP, nodes, 4)
            </code>
            Remove any still available envelope nodes:
            <code lang="C#">
            BassMix.BASS_Mixer_ChannelSetEnvelope(_channel, BASSMIXEnvelope.BASS_MIXER_ENV_PAN, null, 0);
            </code>
            <code lang="VB">
            BassMix.BASS_Mixer_ChannelSetEnvelope(_channel, BASSMIXEnvelope.BASS_MIXER_ENV_PAN, Nothing, 0)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelope(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE[])">
            <summary>
            Sets an envelope to modify the sample rate, volume or pan of a channel over a period of time.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="type">The envelope to get the position/value of. One of the following (see <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope"/>):
            <list type="table">
            <item><term>BASS_MIXER_ENV_FREQ</term><description>Sample rate.</description></item>
            <item><term>BASS_MIXER_ENV_VOL</term><description>Volume.</description></item>
            <item><term>BASS_MIXER_ENV_PAN</term><description>Panning/balance.</description></item>
            <item><term>BASS_MIXER_ENV_LOOP</term><description>Loop the envelope. This is a flag and can be used in combination with any of the above.</description></item>
            <item><term>BASS_MIXER_ENV_REMOVE</term><description>Remove the source from the mixer at the end of the envelope. This is a flag and can be used in combination with any of the above.</description></item>
            </list>
            </param>
            <param name="nodes">The array of envelope nodes, which should have sequential positions (<see langword="null"/> = no envelope).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Envelopes are applied on top of the channel's attributes, as set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. 
            In the case of <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">BASS_MIXER_ENV_FREQ</see> and <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">BASS_MIXER_ENV_VOL</see>, 
            the final sample rate and volume is a product of the channel attribute and the envelope. 
            While in the <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">BASS_MIXER_ENV_PAN</see> case, the final panning is a sum of the channel attribute and envelope.</para>
            <para><see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetEnvelopePos(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,System.Single@)"/> can be used to get the current envelope position, 
            and a <see cref="T:Un4seen.Bass.BASSSync">BASS_SYNC_MIXER_ENVELOPE</see> sync can be set via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be informed of when an envelope ends. 
            The function can be called again from such a sync, in order to set a new envelope to follow the old one.</para>
            <para>Any previous envelope of the same type is replaced by the new envelope. A copy is made of the nodes array, so it does not need to persist beyond this function call.</para>
            <para>Note: Envelopes deal in mixer positions, not sources!
            You might use <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelopePos(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,System.Int64)"/> to adjust the envelope to a source channel position.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="type"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_MIXER_ENV_PAN envelope is not available when matrix mixing is enabled.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Volume curve envelope starting after 3 seconds, ending after 9 seconds:
            <code lang="C#">
            BASS_MIXER_NODE[] nodes = 
              {
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 3d), 1f),
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 5d), 0.3f),
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 7d), 0.5f),
                new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 9d), 1f)
              };
            BassMix.BASS_Mixer_ChannelSetEnvelope(_channel, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, nodes);
            </code>
            <code lang="VB">
            Dim nodes As BASS_MIXER_NODE() =  
              {
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 3.0), 1F), 
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 5.0), 0.3F), 
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 7.0), 0.5F), 
                New BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 9.0), 1F)
              }
            BassMix.BASS_Mixer_ChannelSetEnvelope(_channel, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, nodes)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)">
            <summary>
            Sets up a synchronizer on a mixer source channel.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="type">The type of sync (see <see cref="T:Un4seen.Bass.BASSSync"/> for details). This can be one of the standard sync types, as available via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, or one of the mixer specific sync types listed below plus one of the following flags:
            <list type="table">
            <item><term>BASS_SYNC_ONETIME</term><description>Call the sync only once, and then remove it from the channel.</description></item>
            <item><term>BASS_SYNC_MIXTIME</term><description>Call the sync function when the sync occurs during decoding/mixing, instead of delaying the call until the sync is actually heard. This is automatically applied with decoding channels, as they can not be played/heard.</description></item>
            </list>
            </param>
            <param name="param">The sync parameters, depends on the sync type (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> or <see cref="T:Un4seen.Bass.BASSSync"/> for details).</param>
            <param name="proc">The callback function which should be invoked with the sync.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If succesful, then the new synchronizer's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Sync types, with param and <see cref="T:Un4seen.Bass.SYNCPROC"/> data definitions:
            <list type="table">
            <item><term>BASS_SYNC_MIXER_ENVELOPE</term><description>Sync when an envelope ends. This is not triggered by looping envelopes.
            <para>param : envelope type to sync on, 0 = all types.</para>
            <para>data : envelope type.</para>
            </description></item>
            <item><term>BASS_SYNC_MIXER_ENVELOPE_NODE</term><description>Sync when an envelope reaches a new node.
            <para>param : envelope type to sync on, 0 = all types. data : LOWORD = envelope type, HIWORD = node number.</para>
            <para>data : LOWORD = envelope type, HIWORD = node number.</para>
            </description></item>
            <item><term>BASS_SYNC_STALL</term><description>This is like the standard BASS_SYNC_STALL sync, except it can be either mixtime or not.
            <para>param : not used.</para>
            <para>data : 0 = stalled, 1 = resumed.</para>
            </description></item>
            </list>
            <para>When used on a decoding channel (eg. a mixer source channel), syncs set with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> are automatically "mixtime", 
            which means that they will be triggered as soon as the sync event is encountered during decoding. 
            But if the mixer output is being played, then there is a playback buffer involved, which will delay the hearing of the sync event. 
            This function compensates for that, delaying the triggering of the sync until the event is actually heard. 
            If the mixer itself is a decoding channel, or the BASS_SYNC_MIXTIME flag is used, then there is effectively no real difference between this function and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>.
            One sync type that is slightly different is the BASS_SYNC_STALL sync, which can be either mixtime or not.</para>
            <para>Sync types that would automatically be mixtime when using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> are not so when using this function. 
            The BASS_SYNC_MIXTIME flag should be specified in those cases, or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> used instead.</para>
            <para>If the mixer itself is a decoding channel, or the BASS_SYNC_MIXTIME flag is used, then there is effectively no real difference between this function and BASS_ChannelSetSync, except for the mixer specific sync types listed above.</para>
            <para>When a source is removed from a mixer, any syncs that have been set on it via this function are automatically removed. 
            If the channel is subsequently plugged back into a mixer, the previous syncs will not still be set on it. Syncs set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> are unaffected.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description>An illegal <paramref name="type"/> was specified.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>An illegal <paramref name="param"/> was specified.</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="T:Un4seen.Bass.SYNCPROC"/> for an example on how to use synchronizers.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.AddOn.Mix.SYNCPROCEX,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="type"></param>
            <param name="param"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSyncEx(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.AddOn.Mix.SYNCPROCEX,System.IntPtr)">
            <summary>
            Sets up an extended synchronizer on a mixer source channel.
            </summary>
            <param name="handle">The mixer source channel handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>) beforehand).</param>
            <param name="type">The type of sync (see <see cref="T:Un4seen.Bass.BASSSync"/> for details). This can be one of the standard sync types, as available via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, or one of the mixer specific sync types listed below plus one of the following flags:
            <list type="table">
            <item><term>BASS_SYNC_ONETIME</term><description>Call the sync only once, and then remove it from the channel.</description></item>
            <item><term>BASS_SYNC_MIXTIME</term><description>Call the sync function when the sync occurs during decoding/mixing, instead of delaying the call until the sync is actually heard. This is automatically applied with decoding channels, as they can not be played/heard.</description></item>
            </list>
            </param>
            <param name="param">The sync parameters, depends on the sync type (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> or <see cref="T:Un4seen.Bass.BASSSync"/> for details).</param>
            <param name="proc">The callback function which should be invoked with the sync.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If succesful, then the new synchronizer's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Sync types, with param and <see cref="T:Un4seen.Bass.SYNCPROC"/> data definitions:
            <list type="table">
            <item><term>BASS_SYNC_MIXER_ENVELOPE</term><description>Sync when an envelope ends. This is not triggered by looping envelopes.
            <para>param : envelope type to sync on, 0 = all types.</para>
            <para>data : envelope type.</para>
            </description></item>
            <item><term>BASS_SYNC_MIXER_ENVELOPE_NODE</term><description>Sync when an envelope reaches a new node.
            <para>param : envelope type to sync on, 0 = all types. data : LOWORD = envelope type, HIWORD = node number.</para>
            <para>data : LOWORD = envelope type, HIWORD = node number.</para>
            </description></item>
            <item><term>BASS_SYNC_STALL</term><description>This is like the standard BASS_SYNC_STALL sync, except it can be either mixtime or not.
            <para>param : not used.</para>
            <para>data : 0 = stalled, 1 = resumed.</para>
            </description></item>
            </list>
            <para>The main difference between this method and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> is, that this method invokes the <see cref="T:Un4seen.Bass.AddOn.Mix.SYNCPROCEX"/> callback.
            This callback contains an extra 'offeset' parameter, which defines the position of the sync occurrence within the current update cycle of the source converted to the mixer stream position.
            This offset might be used to calculate more accurate non-mixtime sync triggers (as with non-mixtime sync's a variable delay is to be expected, as the accuracy depends on the sync thread waking in time, and there is no guarantee when that will happen) - 
            as well as mixtime syncs are only accurate to the current update period, as they are triggered within such.
            So a mixtime sync is being triggered ahead of the actual mixer position being heard. The 'offset' parameter might be used to compensate for that.</para>
            <para>When used on a decoding channel (eg. a mixer source channel), syncs set with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> are automatically "mixtime", 
            which means that they will be triggered as soon as the sync event is encountered during decoding. 
            But if the mixer output is being played, then there is a playback buffer involved, which will delay the hearing of the sync event. 
            This function compensates for that, delaying the triggering of the sync until the event is actually heard. 
            If the mixer itself is a decoding channel, or the BASS_SYNC_MIXTIME flag is used, then there is effectively no real difference between this function and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>.
            One sync type that is slightly different is the BASS_SYNC_STALL sync, which can be either mixtime or not.</para>
            <para>Sync types that would automatically be mixtime when using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> are not so when using this function. 
            The BASS_SYNC_MIXTIME flag should be specified in those cases, or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> used instead.</para>
            <para>If the mixer itself is a decoding channel, or the BASS_SYNC_MIXTIME flag is used, then there is effectively no real difference between this function and BASS_ChannelSetSync, except for the mixer specific sync types listed above.</para>
            <para>When a source is removed from a mixer, any syncs that have been set on it via this function are automatically removed. 
            If the channel is subsequently plugged back into a mixer, the previous syncs will not still be set on it. Syncs set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> are unaffected.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The channel is not plugged into a mixer.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description>An illegal <paramref name="type"/> was specified.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>An illegal <paramref name="param"/> was specified.</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="T:Un4seen.Bass.AddOn.Mix.SYNCPROCEX"/> for an example on how to use the extended synchronizer.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelRemoveSync(System.Int32,System.Int32)">
            <summary>
            Removes a synchronizer from a mixer source channel.
            </summary>
            <param name="handle">The mixer source channel handle (as returned by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannel(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>).</param>
            <param name="sync">Handle of the synchronizer to remove (return value of a previous <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> call).</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function can only remove syncs that were set via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, not those that were set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>At least one of <paramref name="handle"/> and <paramref name="sync"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32[])">
            <summary>
            Creates a splitter stream (adds a reader channel to a decoding source channel).
            </summary>
            <param name="channel">The handle of the decoding source channel to split... a HMUSIC, HSTREAM or HRECORD (e.g. created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>).</param>
            <param name="flags">The channel falgs to be used to create the reader channel, any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Split the sample data, without playing it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPLIT_POS</term><description>The splitter's length and position is based on the splitter's (rather than the source's) channel count.</description></item>
            <item><term>BASS_SPLIT_SLAVE</term><description>Only get data from the splitter buffer, not directly from the source.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>. These flags have no effect when the stream is more than stereo.</description></item>
            </list>
            </param>
            <param name="mapping">The target (readers) channel mapping definition, which is an array of source channel index values (0=1st channel, 1=2nd channel, 2=3rd channel, 3=4th channel etc.) ending with a final -1 element (use <see langword="null"/> to create a 1:1 reader).</param>
            <returns>If successful, the new reader stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            A "splitter" basically does the opposite of a mixer: it splits a single source into multiple streams rather then mixing multiple sources into a single stream. Like mixer sources, splitter sources must be decoding channels.
            <para>The splitter stream will have the same sample rate and resolution as its source, but it can have a different number of channels, as dictated by the mapping parameter. 
            Even when the number of channels is different (and so the amount of data produced is different), <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> will give the source length, and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> will give the source position that is currently being output by the splitter stream, unless the BASS_SPLIT_POS flag is used. The BASS_SPLIT_POS flag can be toggled at any time via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</para>
            <para>All splitter streams with the same source share a buffer to access its sample data. 
            The length of the buffer is determined by the <see cref="T:Un4seen.Bass.BASSConfig">BASS_CONFIG_SPLIT_BUFFER</see> config option; the splitter streams should not be allowed to drift apart beyond that, otherwise those left behind will suffer buffer overflows. 
            A splitter stream's buffer state can be reset via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamReset(System.Int32)"/>; that can also be used to reset a splitter stream that has ended, so that it can be played again.</para>
            <para>If the BASS_SPLIT_SLAVE flag is used, the splitter stream will only receive data from the buffer and will not request more data from the source, so it can only receive data that has already been received by another splitter stream with the same source. The BASS_SPLIT_SLAVE flag can be toggled at any time via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</para>
            <para>When <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> is used on a splitter stream, its source will be set to the requested position and the splitter stream's buffer state will be reset so that it immediately receives data from the new position. 
            The position change will affect all of the source's splitter streams, but the others will not have their buffer state reset; they will continue to receive any buffered data before reaching the data from the new position. 
            <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamReset(System.Int32)"/> can be used to reset the buffer state.</para>
            <para>The source can be a "dummy" stream (STREAMPROC_DUMMY). In that case, the BASS_SPLIT_SLAVE flag is set automatically because the splitters can only receive data as it is processed rather than request it.</para>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/> with a splitter channel to remove it from the source.
            When a source is freed, all of its splitter streams are automatically freed.</para>
            <para>The <paramref name="mapping"/> array defines the channel number to be created for the reader as well as which source channels should be used for each.
            This enables you to create a reader stream which extract certain source channels (e.g. create a mono reader based on a stereo source), remaps the channel order (e.g. swap left and right in the reader) or even contains more channels than the source (e.g. create a 5.1 reader based on a stereo source).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="channel"/> is not valid.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description>The <paramref name="channel"/> is not a decoding channel.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="mapping"/> contains an invalid channel index.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding streams (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported (ie. no WDM drivers).</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The device/drivers do not support the requested speaker(s), or you're attempting to assign a stereo stream to a mono speaker.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficent memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Couldn't initialize 3D support for the stream.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            </remarks>
            <example>
            Create two 1:1 clones:
            <code lang="C#">
            int source = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE);
            int reader1 = BassMix.BASS_Split_StreamCreate(source, BASSFlag.BASS_SAMPLE_FLOAT, null);
            int reader2 = BassMix.BASS_Split_StreamCreate(source, BASSFlag.BASS_SAMPLE_FLOAT, null);
            ...
            </code>
            <code lang="VB">
            Dim source As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE)
            Dim reader1 As Integer = BassMix.BASS_Split_StreamCreate(source, BASSFlag.BASS_SAMPLE_FLOAT, Nothing)
            Dim reader2 As Integer = BassMix.BASS_Split_StreamCreate(source, BASSFlag.BASS_SAMPLE_FLOAT, Nothing)
            ...
            </code>
            Here are some more channel mapping examples...
            <code lang="null">
            // create a mono reader containing only the right channel based on a stereo source
            int[] mapping = {1,-1};
            
            // create a stereo reader which swaps the left and right channel of the stereo source
            int[] mapping = {1,0,-1};
            
            // create a quad-channel reader based on a stereo source
            int[] mapping = {0,1,0,1,-1};
            
            // create a sterao reader based on a mono source
            int[] mapping = {0,0,-1};
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamGetSource(System.Int32)">
            <summary>
            Retrieves the source of a splitter stream.
            </summary>
            <param name="handle">The splitter stream handle (which was add via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32[])"/> beforehand).</param>
            <returns>If successful, the source stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="handle"/> is not a splitter stream.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamReset(System.Int32)">
            <summary>
            Resets a splitter stream or all splitter streams of a source.
            </summary>
            <param name="handle">The splitter (as obtained by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32[])"/>) or the source channel handle.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function resets the splitter stream's buffer state, so that the next sample data it receives will be from the source's current position. 
            If the stream has ended, that is reset too, so that it can be played again. Unless called from within a mixtime sync callback, the stream's output buffer (if it has one) is also flushed.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="handle"/> is neither a splitter stream or source.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamResetEx(System.Int32,System.Int32)">
            <summary>
            Resets a splitter stream and sets its position in the source buffer.
            </summary>
            <param name="handle">The splitter (as obtained by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32[])"/>) or the source channel handle.</param>
            <param name="offset">How far back (in bytes) to position the splitter in the source buffer. This is based on the source's sample format, which may have a different channel count to the splitter.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function is the same as <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamReset(System.Int32)"/> except that it also provides the ability to position the splitter stream within the buffer that is shared by all of the splitter streams of the same source.
            A splitter stream's buffer position determines what data it will next receive. For example, if its position is half a second back, it will receive half a second of buffered data before receiving new data from the source.
            Calling this function with offset = 0 will result in the next data that the splitter stream receives being new data from the source, and is identical to using <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamReset(System.Int32)"/>.
            <para><paramref name="offset"/> is automatically limited to the amount of data that the source buffer contains, which is in turn limited to the buffer size, determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_SPLIT_BUFFER"/> config option.
            The amount of source data buffered, as well as a splitter stream's position within it, is available from <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamGetAvailable(System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="handle"/> is neither a splitter stream or source.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamGetSplits(System.Int32,System.Int32[],System.Int32)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="splits"></param>
            <param name="count"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamGetSplits(System.Int32)">
            <summary>
            Retrieves the channel's splitters.
            </summary>
            <param name="handle">The handle to check.</param>
            <returns>The array of splitter handles (<see langword="null"/> on error, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code).</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamGetAvailable(System.Int32)">
            <summary>
            Retrieves the amount of buffered data available to a splitter stream, or the amount of data in a splitter source buffer.
            </summary>
            <param name="handle">The splitter (as obtained by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32[])"/>) or the source channel handle.</param>
            <returns>If successful, then the amount of buffered data (in bytes) is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            With a splitter source, this function reports how much data is in the buffer that is shared by all of its splitter streams. With a splitter stream, this function reports how much data is ahead of it in the buffer, before it will receive any new data from the source.
            A splitter stream can be repositioned within the buffer via the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamResetEx(System.Int32,System.Int32)"/> function.
            <para>The amount of data that can be buffered is limited by the buffer size, which is determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_SPLIT_BUFFER"/> config option.</para>
            <para>The returned buffered byte count is always based on the source's sample format, even with splitter streams that were created with a different channel count.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="handle"/> is neither a splitter stream or source.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Create two 1:1 clones:
            <code lang="C#">
            // create a new splitter
            int newsplit = BassMix.BASS_Split_StreamCreate(source, ...);
            // get the amount of data an existing splitter has buffered
            int offset = BassMix.BASS_Split_StreamGetAvailable(oldsplit);
            // add the amount in its playback buffer
            offset += BASS_ChannelGetData(oldsplit, null, BASSData.BASS_DATA_AVAILABLE);
            // reset the new splitter to that far back in the source buffer
            BassMix.BASS_Split_StreamResetEx(newsplit, offset);
            // start playing it
            Bass.BASS_ChannelPlay(newsplit, false);
            </code>
            <code lang="VB">
            ' create a new splitter
            Dim newsplit As Integer = BassMix.BASS_Split_StreamCreate(source, 0)
            ' get the amount of data an existing splitter has buffered
            Dim offset As Integer = BassMix.BASS_Split_StreamGetAvailable(oldsplit)
            ' add the amount in its playback buffer
            offset += BASS_ChannelGetData(oldsplit, Nothing, BASSData.BASS_DATA_AVAILABLE)
            ' reset the new splitter to that far back in the source buffer
            BassMix.BASS_Split_StreamResetEx(newsplit, offset)
            ' start playing it
            Bass.BASS_ChannelPlay(newsplit, False)
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mix.BassMix.BASSMIXVERSION">
            <summary>
            Current BASSmix version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSmix from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassMix.LoadMe();
            ...
            // when not used anymore...
            BassMix.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSmix from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassMix.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassMix.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BassMix.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">
            <summary>
            Mixer envelope attribute types, used with <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelope(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE[],System.Int32)"/>, <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetEnvelopePos(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,System.Single@)"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelopePos(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,System.Int64)"/> to set/retrieve an envelope on a mixer source channel.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope.BASS_MIXER_ENV_FREQ">
            <summary>
            Sample rate.
            <para>Envelopes are applied on top of the channel's attributes, as set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. 
            The final sample rate is the product of the channel attribute and the envelope.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope.BASS_MIXER_ENV_VOL">
            <summary>
            Volume.
            <para>Envelopes are applied on top of the channel's attributes, as set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. 
            The final volume is the product of the channel attribute and the envelope.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope.BASS_MIXER_ENV_PAN">
            <summary>
            Panning/Balance.
            <para>Envelopes are applied on top of the channel's attributes, as set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. 
            The final panning is a sum of the channel attribute and envelope.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope.BASS_MIXER_ENV_LOOP">
            <summary>
            Flag: Loop the envelope.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope.BASS_MIXER_ENV_REMOVE">
            <summary>
            Flag: Remove at end
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetEnvelope(System.Int32,Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope,Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE[],System.Int32)"/> to set an envelope on a mixer source channel.
            </summary>
            <remarks>
            <para>Envelopes are applied on top of the channel's attributes, as set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. 
            In the case of <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">BASS_MIXER_ENV_FREQ</see> and <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">BASS_MIXER_ENV_VOL</see>, 
            the final sample rate and volume is a product of the channel attribute and the envelope. 
            While in the <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope">BASS_MIXER_ENV_PAN</see> case, the final panning is a sum of the channel attribute and envelope.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE.pos">
            <summary>
            The postion of the node in bytes. This is based on the mixer's sample format, not the source channel's format!
            </summary>
            <remarks>Note: Envelopes deal with mixer positions, not sources!</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE.val">
            <summary>
            The envelope value at the position.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE.#ctor(System.Int64,System.Single)">
            <summary>
            Constructor to initialize the members.
            </summary>
            <param name="Pos">The postion of the node in bytes. This is based on the mixer's sample format, not the source channel's format.</param>
            <param name="Val">The envelope value at the position.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mix.BASS_MIXER_NODE.ToString">
            <summary>
            A description of the mixer envelope node (position, value).
            </summary>
            <returns>A description of the mixer envelope node (position, value).</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Mix.SYNCPROCEX">
            <summary>
            User defined extended mixer synchronizer callback function (see <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSyncEx(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.AddOn.Mix.SYNCPROCEX,System.IntPtr)"/> for details).
            </summary>
            <param name="handle">The sync handle that has occured (as returned by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelSetSyncEx(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.AddOn.Mix.SYNCPROCEX,System.IntPtr)"/>).</param>
            <param name="channel">The channel that the sync occured on (the mixer source channel).</param>
            <param name="data">Additional data associated with the sync's occurance.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> was called.</param>
            <param name="offset">The offset in bytes containing the position of the sync occurrence within the update cycle converted to the mixer stream.</param>
            <remarks>
            <para>A sync callback function should be very quick as other syncs can't be processed until it has finished. Attribute slides (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelSlideAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single,System.Int32)"/>) are also performed by the sync thread, so are also affected if a sync callback takes a long time.</para>
            <para>If the sync is a "mixtime" sync (BASS_SYNC_MIXTIME), then depending on the sync type, the callback will be executed in the update thread.
            The <paramref name="offset"/> specifies the position of the sync within the update buffer converted to the mixer stream position.
            Note that the <paramref name="offset"/> is based on the mixer's sample format, so you'll need to convert that to the source's format if using the sync to trigger things on the source.</para>
            <para>The usual restrictions on which BASS functions can be called that apply to stream callbacks (<see cref="T:Un4seen.Bass.STREAMPROC"/>) also apply here. 
            It is also unsafe to call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> on the same channel from a mixtime sync callback. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> can be used in a mixtime sync to implement custom looping, eg. set a BASS_SYNC_POS sync at the loop end position and seek to the loop start position in the callback.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Mpc.BassMpc">
            <summary>
            BASS.NET API wrapper for BASS_MPC.DLL
            <para>Requires: bass_mpc.dll - MusePack Audio Codec (MPC) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_MPC is an extension to the BASS audio library, enabling the playback of MusePack files.</para>
            <para>MusePack is an audio compression format with a strong emphasis on high quality. It's not lossless, but it is designed for transparency, so that you won't be able to hear differences between the original lossless file and the much smaller MPC. It is based on the MPEG 1 Layer II algorithms, but has rapidly developed and vastly improved and is now at an advanced stage in which it contains heavily optimized and patentless code.</para>
            <para>The MusePack format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> /User functions.</para>
            <para>More information can be found on <a href="http://www.musepack.net">www.musepack.net</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a MusePack Audio file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a MusePack Audio memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a MusePack Audio file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file function (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from a MPC file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.
            <para>Seeking is only possible once the entire file has been downloaded.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mpc.BassMpc.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bass_mpc.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Mpc.BassMpc.SupportedStreamName">
            <summary>
            Supported file format name of the bass_mpc.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Mpc.BassMpc.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Mpc.BassMpc.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Mpc.BassMpc.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Ofr.BassOfr">
            <summary>
            BASS.NET API wrapper for BASS_OFR.DLL
            <para>Requires: bass_ofr.dll and OptimFROG.dll - OptimFROG and OptimFROG DualStream Audio Codec (OFR) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_OFR is an extension to the BASS audio library, enabling the playback of OptimFROG and OptimFROG DualStream files.</para>
            <para>OptimFROG is a lossless audio compression program. Its main goal is to reduce the size of audio files, while permitting bit identical restoration of all input.
            OptimFROG DualStream is aimed at filling the big gap between perceptual coding and lossless coding. The goal is to offer real transparent audio coding at half or less the bitrate generally used by lossless coding,
            and also to permit progressive consistent increase of the quality level, until lossless coding is reached.</para>
            <para>The OptimFROG format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Ofr.BassOfr.BASS_OFR_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> /User functions.</para>
            <para>More information can be found on <a href="http://www.losslessaudio.org">www.losslessaudio.org</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ofr.BassOfr.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ofr.BassOfr.BASS_OFR_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ofr.BassOfr.BASS_OFR_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a OptimFROG or OptimFROG DualStream file.
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ofr.BassOfr.BASS_OFR_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ofr.BassOfr.BASS_OFR_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a OptimFROG or OptimFROG DualStream memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ofr.BassOfr.BASS_OFR_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a OptimFROG or OptimFROG DualStream file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Ofr.BassOfr.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bass_ofr.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Ofr.BassOfr.SupportedStreamName">
            <summary>
            Supported file format name of the bass_ofr.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ofr.BassOfr.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ofr.BassOfr.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Ofr.BassOfr.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Ofr.BassOfr.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Ofr.BassOfr.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Opus.BassOpus">
            <summary>
            BASS.NET API wrapper for BASSOPUS.DLL
            <para>Requires: bassopus.dll - Opus Interactive Audio Codec (OPUS) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSOPUS is an extension to the BASS audio library, enabling the playing of Opus (Opus Interactive Audio Codec) encoded files.</para>
            <para>The OPUS format is used in very much the same way as any of the built-in BASS stream formats - simply call the OPUS stream creation function instead of the BASS built-in functions. The BASS plugin system (see <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>) is also supported.</para>
            <para>More information can be found on <a href="http://www.opus-codec.org/">opus-codec.org</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.BASS_OPUS_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.BASS_OPUS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a OPUS file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.BASS_OPUS_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.BASS_OPUS_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a OPUS memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.BASS_OPUS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a OPUS file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.BASS_OPUS_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.BASS_OPUS_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.BASS_OPUS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from a OPUS file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Opus.BassOpus.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bassopus.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Opus.BassOpus.SupportedStreamName">
            <summary>
            Supported file format name of the bassopus.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Opus.BassOpus.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Opus.BassOpus.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Opus.BassOpus.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Spx.BassSpx">
            <summary>
            BASS.NET API wrapper for BASS_SPX.DLL
            <para>Requires: bass_spx.dll - Speex Audio Codec (SPX) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_SPX is an extension to the BASS audio library, enabling the playback of Speex files.</para>
            <para>Speex is an open source and patent-free audio compression format designed for speech. The Speex Project aims to lower the barrier of entry for voice applications by providing a free alternative to expensive proprietary speech codecs. 
            Moreover, Speex is well-adapted to Internet applications and provides useful features that are not present in most other codecs.</para>
            <para>The Speex format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/URL/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Spx.BassSpx.BASS_SPX_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> /URL/User functions.</para>
            <para>More information can be found on <a href="http://www.speex.org">www.speex.org</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.BASS_SPX_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.BASS_SPX_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a Speex Audio file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.BASS_SPX_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.BASS_SPX_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a Speex Audio memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.BASS_SPX_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a Speex Audio file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.BASS_SPX_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.BASS_SPX_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.BASS_SPX_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from a Speex Audio file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Spx.BassSpx.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bass_spx.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Spx.BassSpx.SupportedStreamName">
            <summary>
            Supported file format name of the bass_spx.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Spx.BassSpx.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Spx.BassSpx.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Spx.BassSpx.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Tags.BassTags">
            <summary>
            Internal Tag support of the BASS.NET API .
            <para>Requires: bass.dll - for better Tag reading support.</para>
            </summary>
            <remarks>
            <para>The BASS audio library has limited support for reading tags, associated with a stream. 
            This class extends that functionality, allowing you to extract specific TAG information from a stream or file. 
            The extracted tag values are formatted into a general <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> class structure.</para>
            <para>Supported tags are ID3v1, ID3v2, WMA, OGG, RIFF, BWF, MOD, MP4, MF and APE and are evaluated as followed:</para>
            <para>MP3, MP2, MP1: first ID3v2, then ID3v1, then APE, then BWF.</para>
            <para>OGG: first OGG, then APE.</para>
            <para>WMA: only WMA.</para>
            <para>MP4, AAC: first MP4, then ID3v2, then APE, then OGG</para>
            <para>WAV: RIFF_INFO, then BWF, then ID3v2</para>
            <para>all others: first APE, then OGG, then ID3v2, then ID3v1.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.BassTags.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.BassTags.ReadPictureTAGs">
            <summary>
            Gets or Sets, if picture tags should be read.
            </summary>
            <remarks>Set this value to <see langword="false"/> to not read any picture tags with e.g. the <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> methods.
            The default is <see langword="true"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.BassTags.EvalNativeTAGs">
            <summary>
            Gets or Sets, if native tags should be stored.
            </summary>
            <remarks>Set this value to <see langword="false"/> to not store any native tags with e.g. the <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> methods.
            The default is <see langword="true"/>.
            Note: This option does NOT apply to Riff BEXT and CART tags (see <see cref="F:Un4seen.Bass.AddOn.Tags.BassTags.EvalNativeTAGsBEXT"/> and <see cref="F:Un4seen.Bass.AddOn.Tags.BassTags.EvalNativeTAGsCART"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.BassTags.EvalNativeTAGsBEXT">
            <summary>
            Gets or Sets, if native Riff BEXT tags should be stored.
            </summary>
            <remarks>Set this value to <see langword="false"/> to not store native Riff BEXT tags with e.g. the <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> methods.
            The default is <see langword="true"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.BassTags.EvalNativeTAGsCART">
            <summary>
            Gets or Sets, if native Riff CART tags should be stored.
            </summary>
            <remarks>Set this value to <see langword="false"/> to not store native Riff CART tags with e.g. the <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> methods.
            The default is <see langword="true"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)">
            <summary>
            Retrieves the requested tags/headers from a file, if they are available.
            </summary>
            <param name="file">The fully qualified name of the file stream to get the TAG information from.</param>
            <returns>Returns a new <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance if successful. If TAGs could be retrieved successfully <see langword="null"/> is returned.</returns>
            <remarks>
            <para>Note: This method uses the BASS plug-in system and such supports all formats which are supported by BASS or any of its add-ons.
            So make sure to load all needed add-ons via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.</para>
            <para>This method first evaluates the file name extension. If using with a ".wma" or ".wmv" file and you are using the WMA DRM version, the WMA tags are received immediately.
            For all other file types an internal stream handle is created by using the plug-in system and calling <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>. If successful, the TAG_INFO is returned via <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> (see overload list).
            All members of the <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> structure will be updated. However, some files and tag structures might not support all members.
            This overload 
            </para>
            </remarks>
            <exception cref="T:System.NotSupportedException">Invalid/Unsupported tag version detected.</exception>
            <exception cref="T:System.FormatException">Invalid syncsafe integer found in tag data.</exception>
            <example>
            Getting TAGs from a file directly:
            <code lang="C#">
            TAG_INFO tagInfo = BassTags.BASS_TAG_GetFromFile(fileName);
            if ( tagInfo != null )
            {
              // display the tags...
            }
            </code>
            <code lang="VB">
            Dim tagInfo As TAG_INFO = BassTags.BASS_TAG_GetFromFile(fileName)
            If Not (tagInfo Is Nothing) Then
              ' display the tags...
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String,System.Boolean,System.Boolean)">
            <summary>
            Retrieves the requested tags/headers from a file, if they are available.
            </summary>
            <param name="file">The fully qualified name of the file stream to get the TAG information from.</param>
            <param name="setDefaultTitle">If <see langword="true"/> the <see cref="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.title"/> property will be set to a default value (filename without extension).</param>
            <param name="prescan">If <see langword="true"/> the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_PRESCAN"/> flag is used to return an exact <see cref="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.title"/> value - else the duration might just be good approximation, but the method will perform faster.</param>
            <returns>Returns a new <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance if successful. If <paramref name="file"/> could not be found <see langword="null"/> is returned.</returns>
            <remarks>
            <para>Note: This method uses the BASS plug-in system and such supports all formats which are supported by BASS or any of its add-ons.
            So make sure to load all needed add-ons via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.</para>
            <para>This method first evaluates the file name extension. If using with a ".wma" or ".wmv" file and you are using the WMA DRM version, the WMA tags are received immediately.
            For all other file types an internal stream handle is created by using the plug-in system and calling <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>. If successful, the TAG_INFO is returned via <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> (see overload list).
            All members of the <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> structure will be updated. However, some files and tag structures might not support all members.
            </para>
            </remarks>
            <exception cref="T:System.NotSupportedException">Invalid/Unsupported tag version detected.</exception>
            <exception cref="T:System.FormatException">Invalid syncsafe integer found in tag data.</exception>
            <example>
            Getting TAGs from a file directly:
            <code lang="C#">
            TAG_INFO tagInfo = BassTags.BASS_TAG_GetFromFile(fileName, true, true);
            if ( tagInfo != null )
            {
              // display the tags...
            }
            </code>
            <code lang="VB">
            Dim tagInfo As TAG_INFO = BassTags.BASS_TAG_GetFromFile(fileName, True, True)
            If Not (tagInfo Is Nothing) Then
              ' display the tags...
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String,System.Boolean,Un4seen.Bass.AddOn.Tags.TAG_INFO)">
            <summary>
            Retrieves the requested tags/headers from a file, if they are available.
            </summary>
            <param name="file">The fully qualified name of the file stream to get the TAG information from.</param>
            <param name="prescan">If <see langword="true"/> the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_PRESCAN"/> flag is used to return an exact <see cref="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.title"/> value - else the duration might just be good approximation, but the method will perform faster.</param>
            <param name="tags">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> class where to put the data.</param>
            <returns>If TAGs could be retrieved successfully <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            <para>Note: This method uses the BASS plug-in system and such supports all formats which are supported by BASS or any of its add-ons.
            So make sure to load all needed add-ons via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.</para>
            <para>This method first evaluates the file name extension. If using with a ".wma" or ".wmv" file and you are using the WMA DRM version, the WMA tags are received immediately.
            For all other file types an internal stream handle is created by using the plug-in system and calling <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>. If successful, the TAG_INFO is returned via <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> (see overload list).
            Only those members of the <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> structure will be updated which have been found in the file. However, some files and tag structures might not support all members.
            </para>
            </remarks>
            <exception cref="T:System.NotSupportedException">Invalid/Unsupported tag version detected.</exception>
            <exception cref="T:System.FormatException">Invalid syncsafe integer found in tag data.</exception>
            <example>
            Getting TAGs from a file directly:
            <code lang="C#">
            TAG_INFO tagInfo = BassTags.BASS_TAG_GetFromFile(fileName, true, true);
            if ( tagInfo != null )
            {
              // display the tags...
            }
            </code>
            <code lang="VB">
            Dim tagInfo As TAG_INFO = BassTags.BASS_TAG_GetFromFile(fileName, True, True)
            If Not (tagInfo Is Nothing) Then
              ' display the tags...
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.Int32,Un4seen.Bass.AddOn.Tags.TAG_INFO)">
            <summary>
            Retrieves the requested tags/headers from a stream channel, if they are available.
            </summary>
            <param name="stream">The stream channel to get the TAG information from.</param>
            <param name="tags">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> class where to put the data.</param>
            <returns>If TAGs could be retrieved successfully <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            <para>This method first evaluates the BASS_CTYPE_xxx for the stream, by calling the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> function internally.
            Based on the retrieved <see cref="T:Un4seen.Bass.BASSChannelType"/> a call to the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> function is made in order to retrieve the pointer to the tags/header data - if available.
            Finally this tag pointer is evaluated and the related tag/header data is evaluated.</para>
            <para>This method is able to retrieve the following TAGs:
            <list type="table">
            <item><term>MP3, MP2, MP1</term><description>BASS_TAG_ID3V2 first, then BASS_TAG_ID3, then BASS_TAG_APE, then BASS_TAG_RIFF_BEXT.</description></item>
            <item><term>OGG, FLAC, OPUS</term><description>BASS_TAG_OGG first, then BASS_TAG_APE</description></item>
            <item><term>WAV, BWF</term><description>BASS_TAG_RIFF_INFO first, then BASS_TAG_RIFF_BEXT.</description></item>
            <item><term>MF</term><description>BASS_TAG_MF.</description></item>
            <item><term>WMA</term><description>BASS_TAG_WMA</description></item>
            <item><term>MP4, AAC, ALAC</term><description>BASS_TAG_MP4 first, then BASS_TAG_ID3V2, then BASS_TAG_APE</description></item>
            <item><term>APE, MPC, OFR, WV</term><description>BASS_TAG_APE first, then BASS_TAG_ID3V2, then BASS_TAG_ID3</description></item>
            <item><term>WINAMP</term><description>BASS_TAG_ID3V2 first, then BASS_TAG_APE</description></item>
            <item><term>SPX, AC3</term><description>not available</description></item>
            <item><term>MOD</term><description>MOD music name and message are evaluated only.</description></item>
            </list>
            All members of the <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> structure will be updated. However, some files and tag structures might not support all members.
            </para>
            <para>The following TAGs are combined in the following order (if multiple TAGs are found):
            <list type="table">
            <item><term>BASS_TAG_ID3V2</term><description>BASS_TAG_ID3 + BASS_TAG_APE + BASS_TAG_ID3V2</description></item>
            <item><term>BASS_TAG_ID3</term><description>BASS_TAG_APE + BASS_TAG_ID3</description></item>
            <item><term>BASS_TAG_WMA</term><description>BASS_TAG_WMA</description></item>
            <item><term>BASS_TAG_OGG</term><description>BASS_TAG_APE + BASS_TAG_OGG</description></item>
            <item><term>BASS_TAG_APE</term><description>BASS_TAG_ID3 + BASS_TAG_APE</description></item>
            <item><term>BASS_TAG_MP4</term><description>BASS_TAG_APE + BASS_TAG_ID3V2 + BASS_TAG_MP4</description></item>
            <item><term>BASS_TAG_RIFF_INFO</term><description>BASS_TAG_RIFF_BEXT + BASS_TAG_RIFF_CART + BASS_TAG_ID3V2 + BASS_TAG_RIFF_INFO</description></item>
            </list>
            </para>
            </remarks>
            <exception cref="T:System.NotSupportedException">Invalid/Unsupported tag version detected.</exception>
            <exception cref="T:System.FormatException">Invalid syncsafe integer found in tag data.</exception>
            <example>
            <code lang="C#">
            // create a stream
            int stream = Bass.BASS_StreamCreateFile(fileName, 0, 0, BASSFlag.BASS_DEFAULT);
            // update the tags
            TAG_INFO tagInfo = new TAG_INFO(fileName);
            if ( BassTags.BASS_TAG_GetFromFile( stream, tagInfo) )
            {
              // display the tags...
            }
            </code>
            <code lang="VB">
            ' create a stream
            Dim stream As Integer = Bass.BASS_StreamCreateFile(fileName, 0, 0, BASSFlag.BASS_DEFAULT)
            Dim tagInfo As New TAG_INFO(fileName)
            If BassTags.BASS_TAG_GetFromFile(stream, tagInfo) Then
              ' display the tags...
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromURL(System.Int32,Un4seen.Bass.AddOn.Tags.TAG_INFO)">
            <summary>
            Retrieves the requested tags/headers from a URL stream, if they are available.
            </summary>
            <param name="stream">The stream to get the TAG information from.</param>
            <param name="tags">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> class where to put the data.</param>
            <returns>If TAGs could be retrieved successfully <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            <para>This method first tries to get streaming header information via BASS_TAG_ICY and BASS_TAG_HTTP.
            Then it tries the following tags in that order: BASS_TAG_META, BASS_TAG_OGG, BASS_TAG_APE and BASS_TAG_WMA.</para>
            <para>This method is able to retrieve the following TAGs:
            <list type="table">
            <item><term>Shoutcast streaming</term><description>BASS_TAG_ICY and BASS_TAG_META</description></item>
            <item><term>Icecast streaming</term><description>BASS_TAG_HTTP and BASS_TAG_OGG</description></item>
            <item><term>WMA streaming</term><description>Use <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> instead, since WMA URL stream are created with the file method.</description></item>
            <item><term>APE streaming</term><description>BASS_TAG_HTTP and BASS_TAG_APE</description></item>
            </list>
            </para>
            The following members of the <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> structure will be updated:
            <list type="table">
            <item><term>title</term><description>With the detected new stream title, if found.
            <para>Note: The 'streamtitle' might be composed within the meta data, e.g. Shoutcast combines the artist name and the real track name together. Shoutcast titles will be split at the first occurence of a " - " seperator.</para></description></item>
            <item><term>artist</term><description>With the detected new artist, if found.
            <para>Note: For Shoutcast stream this will be set as the 'streamtile' will splitted.</para></description></item>
            <item><term>album</term><description>With the detected name of the stream, if found (eg. icy-name).</description></item>
            <item><term>genre</term><description>With the detected genre of the stream, if found (eg. icy-genre).</description></item>
            <item><term>comment</term><description>With the detected new stream url, if found (eg. icy-url).</description></item>
            <item><term>year</term><description>With the detected bitrate, if found (only used with shoutcast streams, eg. icy-br).</description></item>
            </list>
            </remarks>
            <example>
            <code lang="C#">
            // create a stream
            int stream = BASS_StreamCreateURL(url, 0, BASSFlag.BASS_STREAM_STATUS, null, 0);
            // update the tags
            TAG_INFO tagInfo = new TAG_INFO(url);
            if ( BassTags.BASS_TAG_GetFromURL( stream, tagInfo) )
            {
              // display the tags...
            }
            </code>
            <code lang="VB">
            ' create a stream
            Dim stream As Integer = BASS_StreamCreateURL(url, 0, BASSFlag.BASS_STREAM_STATUS, Nothing, 0)
            ' update the tags
            Dim tagInfo As New TAG_INFO(url)
            If BassTags.BASS_TAG_GetFromURL(stream, tagInfo) Then
              ' display the tags...
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetIntPtr(System.Int32,Un4seen.Bass.BASS_CHANNELINFO,Un4seen.Bass.BASSTag@)">
            <summary>
            Gets an IntPtr to the memory block containing the meta tag data.
            </summary>
            <param name="stream">The stream to get the tags from.</param>
            <param name="info">The <see cref="T:Un4seen.Bass.BASS_CHANNELINFO"/> structure containing the CTYPE, which will be used to find the tags.</param>
            <param name="tagType">Returns the detected <see cref="T:Un4seen.Bass.BASSTag"/> type.</param>
            <returns>An <see cref="T:System.IntPtr"/> to the tag memory block, or <see cref="F:System.IntPtr.Zero"/> if no tags could be found.</returns>
            <remarks>
            This method supports the following tags, which are evaluated in the following order:
            <list type="table">
            <item><term>MP3, MP2, MP1</term><description>BASS_TAG_ID3V2 first, then BASS_TAG_ID3, then BASS_TAG_RIFF_BEXT</description></item>
            <item><term>OGG</term><description>BASS_TAG_OGG first, then BASS_TAG_APE</description></item>
            <item><term>WMA</term><description>BASS_TAG_WMA</description></item>
            <item><term>MP4, AAC, ALAC</term><description>BASS_TAG_MP4 first, then BASS_TAG_ID3V2, then BASS_TAG_APE, then BASS_TAG_OGG</description></item>
            <item><term>APE, FLAC, MPC, OFR, WV</term><description>BASS_TAG_APE first, then BASS_TAG_OGG, then BASS_TAG_ID3V2, then BASS_TAG_ID3</description></item>
            <item><term>WINAMP</term><description>BASS_TAG_ID3V2 first, then BASS_TAG_APE, then BASS_TAG_OGG</description></item>
            <item><term>WAV, SPX, AC3</term><description>not available</description></item>
            </list>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.BassTags.ReadID3v1(System.IntPtr,Un4seen.Bass.AddOn.Tags.TAG_INFO)">
            <summary>
            Reads an ID3v1 tag structure.
            </summary>
            <param name="p">The pointer to the ID3v1 structure.</param>
            <param name="tags">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance to read the tag values into.</param>
            <returns>If TAGs could be retrieved successfully <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.BassTags.ReadID3v2(System.IntPtr,Un4seen.Bass.AddOn.Tags.TAG_INFO)">
            <summary>
            Reads an ID3v2 tag structure.
            </summary>
            <param name="p">The pointer to the ID3v2 structure.</param>
            <param name="tags">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance to read the tag values into.</param>
            <returns>If TAGs could be retrieved successfully <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.BassTags.ID3v1Genre">
            <summary>
            Contains a list of ID3v1 audio generes.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Tags.TAG_INFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> to retrieve information on the current tags of a stream.
            </summary>
            <remarks>
            The following mapping is used with the diferent tag formats to read the content:
            <list type="table">
            <listheader><term>Name</term><description>Mapping</description></listheader>
            <item><term>title</term><description>
            <para>ID3v2: TIT2, TT2</para>
            <para>OGG: TITLE</para>
            <para>APE: Title</para>
            <para>MP4: ©nam</para>
            <para>ASF: WM/Title</para>
            <para>RIFF: INAM</para>
            <para>Alternatives: --</para>
            </description></item>
            <item><term>artist</term><description>
            <para>ID3v2: TPE1, TP1</para>
            <para>OGG: ARTIST</para>
            <para>APE: Artist</para>
            <para>MP4: ©ART</para>
            <para>ASF: WM/Author</para>
            <para>RIFF: IART</para>
            <para>Alternatives: ISTR, AUTHOR</para>
            </description></item>
            <item><term>album</term><description>
            <para>ID3v2: TALB, TAL</para>
            <para>OGG: ALBUM</para>
            <para>APE: Album</para>
            <para>MP4: ©alb</para>
            <para>ASF: WM/AlbumTitle</para>
            <para>RIFF: IPRD</para>
            <para>Alternatives: --</para>
            </description></item>
            <item><term>albumartist</term><description>
            <para>ID3v2: TPE2, TP2</para>
            <para>OGG: ALBUMARTIST</para>
            <para>APE: Album Artist</para>
            <para>MP4: aART</para>
            <para>ASF: WM/AlbumArtist</para>
            <para>RIFF: ISBJ</para>
            <para>Alternatives: H2_ALBUMARTIST, ENSEMBLE, ORCHESTRA, BAND, PERFORMER, iaar</para>
            </description></item>
            <item><term>track</term><description>
            <para>ID3v2: TRCK, TRK</para>
            <para>OGG: TRACKNUMBER</para>
            <para>APE: Track</para>
            <para>MP4: trkn</para>
            <para>ASF: WM/TrackNumber</para>
            <para>RIFF: IPRT, ITRK</para>
            <para>Alternatives: TRACKNUM</para>
            </description></item>
            <item><term>disc</term><description>
            <para>ID3v2: TPOS, TPA</para>
            <para>OGG: DISCNUMBER</para>
            <para>APE: Disc</para>
            <para>MP4: disk</para>
            <para>ASF: WM/PartOfSet</para>
            <para>RIFF: IFRM</para>
            <para>Alternatives: DISCNUM</para>
            </description></item>
            <item><term>year</term><description>
            <para>ID3v2: TYER, TYE</para>
            <para>OGG: DATE</para>
            <para>APE: Year</para>
            <para>MP4: ©day</para>
            <para>ASF: WM/Year</para>
            <para>RIFF: ICRD</para>
            <para>Alternatives: TDRC, RELEASEDATE, RELEASE DATE</para>
            </description></item>
            <item><term>genre</term><description>
            <para>ID3v2: TCON, TCO</para>
            <para>OGG: GENRE</para>
            <para>APE: Genre</para>
            <para>MP4: ©gen</para>
            <para>ASF: WM/Genre</para>
            <para>RIFF: IGNR</para>
            <para>Alternatives: --</para>
            </description></item>
            <item><term>copyright</term><description>
            <para>ID3v2: TCOP, TCR</para>
            <para>OGG: COPYRIGHT</para>
            <para>APE: Copyright</para>
            <para>MP4: cprt</para>
            <para>ASF: Copyright</para>
            <para>RIFF: ICOP</para>
            <para>Alternatives: PROVIDER, WM/Provider</para>
            </description></item>
            <item><term>encodedby</term><description>
            <para>ID3v2: TENC, TEN</para>
            <para>OGG: ENCODEDBY</para>
            <para>APE: EncodedBy</para>
            <para>MP4: ©too</para>
            <para>ASF: WM/EncodedBy</para>
            <para>RIFF: ISFT</para>
            <para>Alternatives: VERSION, ENCODED BY, ENCODED-BY, ENCODER, SOFTWARE, TOOL</para>
            </description></item>
            <item><term>publisher</term><description>
            <para>ID3v2: TPUB, TPB</para>
            <para>OGG: LABEL</para>
            <para>APE: Label</para>
            <para>MP4: ----:com.apple.iTunes:LABEL</para>
            <para>ASF: WM/Publisher</para>
            <para>RIFF: ICMS</para>
            <para>Alternatives: PUBLISHER, ORIGINALSOURCE, VENDOR</para>
            </description></item>
            <item><term>composer</term><description>
            <para>ID3v2: TCOM, TCM</para>
            <para>OGG: COMPOSER</para>
            <para>APE: Composer</para>
            <para>MP4: ©wrt</para>
            <para>ASF: WM/Composer</para>
            <para>RIFF: IENG</para>
            <para>Alternatives: ORGANIZATION, WRITER, IMUS</para>
            </description></item>
            <item><term>conductor</term><description>
            <para>ID3v2: TPE3, TP3</para>
            <para>OGG: CONDUCTOR</para>
            <para>APE: Conductor</para>
            <para>MP4: ----:com.apple.iTunes:CONDUCTOR</para>
            <para>ASF: WM/Conductor</para>
            <para>RIFF: ITCH</para>
            <para>Alternatives: --</para>
            </description></item>
            <item><term>lyricist</term><description>
            <para>ID3v2: TEXT, TXT</para>
            <para>OGG: LYRICIST</para>
            <para>APE: Lyricist</para>
            <para>MP4: ----:com.apple.iTunes:LYRICIST</para>
            <para>ASF: WM/Writer</para>
            <para>RIFF: IWRI</para>
            <para>Alternatives: TEXTER, SONGWRITER</para>
            </description></item>
            <item><term>remixer</term><description>
            <para>ID3v2: TPE4, TP4</para>
            <para>OGG: REMIXER</para>
            <para>APE: MixArtist</para>
            <para>MP4: ----:com.apple.iTunes:REMIXER</para>
            <para>ASF: WM/ModifiedBy</para>
            <para>RIFF: IEDT</para>
            <para>Alternatives: ModifiedBy</para>
            </description></item>
            <item><term>producer</term><description>
            <para>ID3v2: TIPL, IPL</para>
            <para>OGG: PRODUCER</para>
            <para>APE: Producer</para>
            <para>MP4: ----:com.apple.iTunes:PRODUCER</para>
            <para>ASF: WM/Producer</para>
            <para>RIFF: IPRO</para>
            <para>Alternatives: --</para>
            </description></item>
            <item><term>comment</term><description>
            <para>ID3v2: COMM, COM</para>
            <para>OGG: COMMENT</para>
            <para>APE: Comment</para>
            <para>MP4: ©cmt</para>
            <para>ASF: WM/Description</para>
            <para>RIFF: ICMT</para>
            <para>Alternatives: DESCRIPTION</para>
            </description></item>
            <item><term>grouping</term><description>
            <para>ID3v2: TIT1, TT1</para>
            <para>OGG: GROUPING</para>
            <para>APE: Grouping</para>
            <para>MP4: ©grp</para>
            <para>ASF: WM/ContentGroupDescription</para>
            <para>RIFF: ISRF</para>
            <para>Alternatives: GROUP</para>
            </description></item>
            <item><term>mood</term><description>
            <para>ID3v2: TMOO</para>
            <para>OGG: MOOD</para>
            <para>APE: Mood</para>
            <para>MP4: ----:com.apple.iTunes:MOOD</para>
            <para>ASF: WM/Mood</para>
            <para>RIFF: IKEY</para>
            <para>Alternatives: --</para>
            </description></item>
            <item><term>rating</term><description>
            <para>ID3v2: POPM</para>
            <para>OGG: RATING</para>
            <para>APE: Rating</para>
            <para>MP4: rtng</para>
            <para>ASF: WM/SharedUserRating</para>
            <para>RIFF: ISHP</para>
            <para>Alternatives: TXXX:RATING, IRTD</para>
            </description></item>
            <item><term>isrc</term><description>
            <para>ID3v2: TSCR</para>
            <para>OGG: ISRC</para>
            <para>APE: ISRC</para>
            <para>MP4: ----:com.apple.iTunes:ISRC</para>
            <para>ASF: WM/ISRC</para>
            <para>RIFF: ISRC</para>
            <para>Alternatives: --</para>
            </description></item>
            <item><term>bpm</term><description>
            <para>ID3v2: TBPM, TBP</para>
            <para>OGG: BPM</para>
            <para>APE: BPM</para>
            <para>MP4: ----:com.apple.iTunes:BPM</para>
            <para>ASF: WM/BeatsPerMinute</para>
            <para>RIFF: IBPM</para>
            <para>Alternatives: TEMPO, IDPI, tmpo, H2_BPM, BEATSPERMINUTE</para>
            </description></item>
            <item><term>replaygain_track_gain</term><description>
            <para>ID3v2: TXXX:replaygain_track_gain</para>
            <para>OGG: replaygain_track_gain</para>
            <para>APE: replaygain_track_gain</para>
            <para>MP4: ----:com.apple.iTunes:replaygain_track_gain</para>
            <para>ASF: replaygain_track_gain</para>
            <para>RIFF: IRGG</para>
            <para>Alternatives: itgl</para>
            </description></item>
            <item><term>replaygain_track_peak</term><description>
            <para>ID3v2: TXXX:replaygain_track_peak</para>
            <para>OGG: replaygain_track_peak</para>
            <para>APE: replaygain_track_peak</para>
            <para>MP4: ----:com.apple.iTunes:replaygain_track_peak</para>
            <para>ASF: replaygain_track_peak</para>
            <para>RIFF: IRGP</para>
            <para>Alternatives: --</para>
            </description></item>
            </list>
            Note: The mapping is performed case insensitive. The Alternatives are only used, if the regular mapping doesn't find any matching entry.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.title">
            <summary>
            The song title.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.artist">
            <summary>
            The Artist name.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.album">
            <summary>
            The Album name.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.albumartist">
            <summary>
            The Album Artist name (Band/Orchestra/Remixer).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.year">
            <summary>
            The Year (as a string, typically in the format YYYY or YYYY-MM).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.comment">
            <summary>
            The Comment text.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.genre">
            <summary>
            The Genre (as a string).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.track">
            <summary>
            The track number (as a string, either '99' or '99/99').
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.disc">
            <summary>
            The disc number (as a string, either '99' or '99/99').
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.copyright">
            <summary>
            The Copyright (as a string).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.encodedby">
            <summary>
            The EncodedBy (as a string).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.composer">
            <summary>
            The Composer (as a string).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.publisher">
            <summary>
            The Publisher, Label (as a string).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.lyricist">
            <summary>
            The Lyricist, Songwriter (as a string).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.remixer">
            <summary>
            The Remixer, Modifier (as a string).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.producer">
            <summary>
            The Producer (as a string).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.bpm">
            <summary>
            Beats Per Minute.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.filename">
            <summary>
            The name of the file (only available, if set in the constructor or manually)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.pictures">
            <summary>
            Keeps optional pictures.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.nativetags">
            <summary>
            Keeps all native tags.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.channelinfo">
            <summary>
            The <see cref="T:Un4seen.Bass.BASS_CHANNELINFO"/> structure.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.tagType">
            <summary>
            The type of TAG being read (one of <see cref="T:Un4seen.Bass.BASSTag"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.duration">
            <summary>
            The estimated duration of the track in seconds.
            </summary>
            <remarks>This value doesn't have to be 100% accurate but is typically a very good estimation.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.bitrate">
            <summary>
            The estimated bitrate of the track in kBit/sec.
            </summary>
            <remarks>This value doesn't have to be 100% accurate but is typically a good estimation.
            Note: Only usefull with files encoded in CBR (constant bitrate).</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.replaygain_track_gain">
            <summary>
            The track replaygain gain value in dB between -60.0 and +60.0 dB.
            </summary>
            <remarks>Set to -100.0 if not present.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.replaygain_track_peak">
            <summary>
            The track replaygain peak level value as a float value between 0.0 (silence) and 1.0 (0dB).
            </summary>
            /// <remarks>Set to -1.0 if not present.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.conductor">
            <summary>
            The conductor (or director) of the content.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.grouping">
            <summary>
            Content groups are collections of media to which individual files may belong. For example, an audio file may be a song that is a track on one compact disc that is part of a boxed set.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.mood">
            <summary>
            The mood of the content.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.rating">
            <summary>
            The rating of the content (e.g. 0=unrated, 1-20=poor, 21-40=average, 41-60=good, 61-80=very good, 81-100=excellent).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.isrc">
            <summary>
            The International Standard Recording Code (a 12 digit unique alphanumeric number).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.#ctor">
            <summary>
            Default constructor (filename must be set manually in order to be available).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.#ctor(Un4seen.Bass.AddOn.Tags.TAG_INFO)">
            <summary>
            Creates a new instance as a clone of an existing instance.
            </summary>
            <param name="clone">The instance to clone.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.#ctor(System.String)">
            <summary>
            Constructor already setting the filename (full path) and the title (file name only).
            </summary>
            <param name="FileName">The filename to remember.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.#ctor(System.String,System.Boolean)">
            <summary>
            Constructor already setting the filename (full path) and the title (file name only).
            </summary>
            <param name="FileName">The filename to remember.</param>
            <param name="setDefaultTitle">If <see langword="true"/> the <see cref="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.title"/> property will be set to a default value (filename without extension).</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.Clone">
            <summary>
            Returns a new TAG_INFO instance which is a clone of the current one.
            </summary>
            <returns>The cloned instance.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.ToString">
            <summary>
            A description of the tag info object (artist - title or filename).
            </summary>
            <returns>A description of the tag info object (artist - title or filename).</returns>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.NativeTagsCount">
            <summary>
            Returns the total number of available native tags.
            </summary>
            <returns>The number of native tags.</returns>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.NativeTags">
            <summary>
            Returns all native tags.
            </summary>
            <returns>A string array containing all native tags as being gathered.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.ClearAllNativeTags">
            <summary>
            Clears the collection of native tag entries.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.NativeTag(System.String)">
            <summary>
            Returns a certain native tag.
            </summary>
            <param name="tagname">The name of the native tag to retrieve (case-sensitive!) - e.g. use "TPE1" to query for the artist of ID3v2 tags.</param>
            <returns>The value of the tag or <see langword="null"/> if tag with that name could be found.</returns>
            <remarks>If multiple tags with the same name do exist, only the first tag value will be returned.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.UpdateFromMETA(System.IntPtr,System.Boolean,System.Boolean)">
            <summary>
            Update the tags from a meta data pointer, e.g. when streaming from a URL as triggered by a <see cref="T:Un4seen.Bass.SYNCPROC"/> using BASS_SYNC_META and as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            </summary>
            <param name="data">The pointer to the memory block containing the meta data, e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.</param>
            <param name="utf8">Set to <see langword="true"/>, if the tags are presented in UTF-8, else set to <see langword="false"/> to use Latin-1 encoding.</param>
            <param name="multiple">Set to <see langword="true"/>, if a single tag entry is further seperated by ';' (e.g. as for BASS_TAG_META) - in all other cases this should be set to <see langword="false"/>.</param>
            <returns>If any tag was updated <see langword="true"/> is returned. If nothing was changed <see langword="false"/> will be returned.</returns>
            <remarks>
            The following members will be updated:
            <list type="table">
            <item><term>title</term><description>With the detected new stream title, if found.
            <para>Note: For URL streams (Shoutcast, Oddcast) the 'streamtitle' might be composed within the meta data, e.g. Shoutcast combines the artist name and the real track name together. Shoutcast titles will be splitted at the first occurence of a '-' seperator.</para></description></item>
            <item><term>artist</term><description>With the detected new artist, if found.
            <para>Note: For URL streams (Shoutcast, Oddcast) the 'streamtitle' might be composed within the meta data, e.g. Shoutcast combines the artist name and the real track name together. Shoutcast titles will be splitted at the first occurence of a '-' seperator.</para></description></item>
            <item><term>album</term><description>With the detected album name of the stream, if found (eg. icy-name).</description></item>
            <item><term>genre</term><description>With the detected genre of the stream, if found (eg. icy-genre).</description></item>
            <item><term>comment</term><description>With the detected new comment, if found (e.g. icy-url).</description></item>
            <item><term>year</term><description>With the detected year, if found.</description></item>
            <item><term>bitrate</term><description>With the detected bitrate, if found (e.g. icy-br).
            <para>Note: For URL streams (Shoutcast, Oddcast), the new url location will be used.</para>
            <para>Note: For MIDI lyric text syncs please use the <see cref="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.UpdateFromMIDILyric(Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/> method.</para></description></item>
            </list>
            </remarks>
            <example>
            Update tags with a sync proc together with Bass.BASS_StreamCreateURL:
            <code lang="C#">
            private SYNCPROC _mySync;
            private TAG_INFO _tags;
            ...
            string url = "http://someurl...";
            int stream = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_STREAM_STATUS, null, 0);
            _tags = new TAG_INFO(url);
            // set a sync to get the title updates out of the meta data...
            _mySync = new SYNCPROC(MetaSync);
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_META, 0, _mySync, IntPtr.Zero);
            ...
            private void MetaSync(int handle, int channel, int data, IntPtr user)
            {
              // BASS_SYNC_META is triggered on meta changes of SHOUTcast streams
              _tags.UpdateFromMETA( Bass.BASS_ChannelGetTags(channel, BASSTag.BASS_TAG_META), true, false );
            }
            </code>
            <code lang="VB">
            Private _mySync As SYNCPROC
            Private _tags As TAG_INFO
            ...
            Dim url As String = "http://someurl..."
            Dim stream As Integer = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_STREAM_STATUS, Nothing, 0)
            _tags = New TAG_INFO(url)
            ' set a sync to get the title updates out of the meta data...
            _mySync = New SYNCPROC(AddressOf MetaSync)
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_META, 0, _mySync, IntPtr.Zero)
            ...
            Private Sub MetaSync(handle As Integer, channel As Integer, data As Integer, user As IntPtr)
              ' BASS_SYNC_META is triggered on meta changes of SHOUTcast streams
              _tags.UpdateFromMETA(Bass.BASS_ChannelGetTags(channel, BASSTag.BASS_TAG_META), True, False)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.UpdateFromMETA(System.IntPtr,Un4seen.Bass.AddOn.Tags.TAGINFOEncoding,System.Boolean)">
            <summary>
            Update the tags from a meta data pointer, e.g. when streaming from a URL as triggered by a <see cref="T:Un4seen.Bass.SYNCPROC"/> using BASS_SYNC_META and as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            </summary>
            <param name="data">The pointer to the memory block containing the meta data, e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.</param>
            <param name="encoding">Set to <see langword="true"/>, if the tags are present in UTF-8 (8-bit), else set to <see langword="false"/> to use ANSI characters (7-bit).</param>
            <param name="multiple">Set to <see langword="true"/>, if a single tag entry is further seperated by ';' (e.g. as for BASS_TAG_META) - in all other cases this should be set to <see langword="false"/>.</param>
            <returns>If any tag was updated <see langword="true"/> is returned. If nothing was changed <see langword="false"/> will be returned.</returns>
            <remarks>
            The following members will be updated:
            <list type="table">
            <item><term>title</term><description>With the detected new stream title, if found.
            <para>Note: For URL streams (Shoutcast, Oddcast) the 'streamtitle' might be composed within the meta data, e.g. Shoutcast combines the artist name and the real track name together. Shoutcast titles will be splitted at the first occurence of a '-' seperator.</para></description></item>
            <item><term>artist</term><description>With the detected new artist, if found.
            <para>Note: For URL streams (Shoutcast, Oddcast) the 'streamtitle' might be composed within the meta data, e.g. Shoutcast combines the artist name and the real track name together. Shoutcast titles will be splitted at the first occurence of a '-' seperator.</para></description></item>
            <item><term>album</term><description>With the detected album name of the stream, if found (eg. icy-name).</description></item>
            <item><term>genre</term><description>With the detected genre of the stream, if found (eg. icy-genre).</description></item>
            <item><term>comment</term><description>With the detected new comment, if found (e.g. icy-url).</description></item>
            <item><term>year</term><description>With the detected year, if found.</description></item>
            <item><term>bitrate</term><description>With the detected bitrate, if found (e.g. icy-br).
            <para>Note: For URL streams (Shoutcast, Oddcast), the new url location will be used.</para>
            <para>Note: For MIDI lyric text syncs please use the <see cref="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.UpdateFromMIDILyric(Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/> method.</para></description></item>
            </list>
            </remarks>
            <example>
            Update tags with a sync proc together with Bass.BASS_StreamCreateURL:
            <code lang="C#">
            private SYNCPROC _mySync;
            private TAG_INFO _tags;
            ...
            string url = "http://someurl...";
            int stream = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_STREAM_STATUS, null, 0);
            _tags = new TAG_INFO(url);
            // set a sync to get the title updates out of the meta data...
            _mySync = new SYNCPROC(MetaSync);
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_META, 0, _mySync, IntPtr.Zero);
            ...
            private void MetaSync(int handle, int channel, int data, IntPtr user)
            {
              // BASS_SYNC_META is triggered on meta changes of SHOUTcast streams
              _tags.UpdateFromMETA( Bass.BASS_ChannelGetTags(channel, BASSTag.BASS_TAG_META), TAGINFOEncoding.Utf8OrLatin1, false );
            }
            </code>
            <code lang="VB">
            Private _mySync As SYNCPROC
            Private _tags As TAG_INFO
            ...
            Dim url As String = "http://someurl..."
            Dim stream As Integer = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_STREAM_STATUS, Nothing, 0)
            _tags = New TAG_INFO(url)
            ' set a sync to get the title updates out of the meta data...
            _mySync = New SYNCPROC(AddressOf MetaSync)
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_META, 0, _mySync, IntPtr.Zero)
            ...
            Private Sub MetaSync(handle As Integer, channel As Integer, data As Integer, user As IntPtr)
              ' BASS_SYNC_META is triggered on meta changes of SHOUTcast streams
              _tags.UpdateFromMETA(Bass.BASS_ChannelGetTags(channel, BASSTag.BASS_TAG_META), , TAGINFOEncoding.Utf8OrLatin1, False)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.UpdateFromMIDILyric(Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)">
            <summary>
            Update the tags from a meta data pointer, when using in a <see cref="T:Un4seen.Bass.SYNCPROC"/> using BASS_SYNC_MIDI_LYRIC or BASS_MIDI_MARK_TEXT.
            </summary>
            <param name="midiMark">The instance of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK"/> structure from which to update the lyric text, as retrieved form <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/>.</param>
            <returns>If any tag was updated <see langword="true"/> is returned. If nothing was changed <see langword="false"/> will be returned.</returns>
            <remarks>
            The following members will be updated:
            <list type="table">
            <item><term>comment</term><description>With the detected new lyric text, if found.
            <para>If the lyric text begins with a '/' (slash) character, a new line ('\n')will be added to the comment. 
            If it begins with a '\' (backslash) character, the comment will be cleared first - in all other cases the lyric text will be appended to the existing comment.</para>
            </description></item>
            <item><term>track</term><description>With the midi track number, if changed.</description></item>
            </list>
            </remarks>
            <example>
            Update MIDI lyric text in the comment member:
            <code lang="C#">
            private SYNCPROC _mySync;
            private TAG_INFO _tags;
            ...
            int midi = BassMidi.BASS_MIDI_StreamCreateFile("test.mid", 0, 0, BASSFlag.BASS_STREAM_AUTOFREE, 44100);
            _tags = new TAG_INFO("test.mid");
            // set a sync to get the lyric text updates out of the MIDI data...
            _mySync = new SYNCPROC(LyricSync);
            Bass.BASS_ChannelSetSync(midi, BASSSync.BASS_SYNC_MIDI_LYRIC, 0, _mySync, IntPtr.Zero);
            // get the initial tags
            BassTags.BASS_TAG_GetFromFile(midi, _tags);
            ...
            private void LyricSync(int handle, int channel, int data, IntPtr user)
            {
            	_tags.UpdateFromMIDILyric( BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_MIDI_MARK_LYRIC, data) );
            	// tags.comment now contains the updated lyric text
                Console.Write("{0}\r", _tags.comment)
            }
            </code>
            <code lang="VB">
            Private _mySync As SYNCPROC
            Private _tags As TAG_INFO
            ...
            Dim midiStream As Integer =  BassMidi.BASS_MIDI_StreamCreateFile("test.mid", 0, 0, BASSFlag.BASS_STREAM_AUTOFREE, 44100) 
            _tags = New TAG_INFO("test.mid")
            ' set a sync to get the lyric text updates out of the MIDI data...
            _mySync = New SYNCPROC(AddressOf LyricSync)
            Bass.BASS_ChannelSetSync(midi, BASSSync.BASS_SYNC_MIDI_LYRIC, 0, _mySync, IntPtr.Zero)
            ' get the initial tags...
            BassTags.BASS_TAG_GetFromFile(midi, _tags)
            ...
            Private Sub LyricSync(ByVal handle As Integer, ByVal channel As Integer, ByVal data As Integer, ByVal user As IntPtr)
              tags.UpdateFromMIDILyric(BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_MIDI_MARK_LYRIC, data))
              ' tags.comment now contains the updated lyric text
              Console.Write("{0}\r", _tags.comment)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.AddNativeTag(System.String,System.Object)">
            <summary>
            Adds a native tag.
            </summary>
            <param name="key">The tag name to add.</param>
            <param name="value">The tag value to use.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.AddOrReplaceNativeTag(System.String,System.Object)">
            <summary>
            Adds or Replaces a native tag.
            </summary>
            <param name="key">The tag name to replace.</param>
            <param name="value">The tag value to use.</param>
            <remarks>If the <paramref name="key"/> tag was found its content will be replaced, else a new nativ tag will be created.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.RemoveNativeTag(System.String)">
            <summary>
            Removes a native tag.
            </summary>
            <param name="key">The tag name to replace.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.EvalTagEntry(System.String)">
            <summary>
            Takes one tag (key=value) and changes the internal members accordingly.
            </summary>
            <param name="tagEntry">The tag string to evaluate (in the format: key=value or or key:value)</param>
            <returns><see langword="true"/>, if a tag member was changed, else <see langword="false"/>.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.AddPicture(Un4seen.Bass.AddOn.Tags.TagPicture)">
            <summary>
            Adds a picture tag.
            </summary>
            <param name="tagPicture">The tag picture instance to add.</param>
            <returns><see langword="true"/> on success - else <see langword="false"/>.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.RemovePicture(System.Int32)">
            <summary>
            Removes a picture tag.
            </summary>
            <param name="i">The index of the picture to remove.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.RemoveAllPictures">
            <summary>
            Removes all picture tags.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureCount">
            <summary>
            Returns the number of pictures which are available.
            </summary>
            <remarks>Pictures might not be available to all formats.
            <para>If the global <see cref="F:Un4seen.Bass.AddOn.Tags.BassTags.ReadPictureTAGs"/> is set to <see langword="false"/> picture tags might not be read in.</para>
            <para>You can access the available picture tags via the <see cref="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureGet(System.Int32)"/>, 
            <see cref="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureGetImage(System.Int32)"/>, 
            <see cref="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureGetDescription(System.Int32)"/> or <see cref="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureGetType(System.Int32)"/> methods.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureGet(System.Int32)">
            <summary>
            Returns a picture tag.
            </summary>
            <param name="i">The zero-based index (number) of the picture to get. You might use <see cref="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureCount"/> to retrieve the total number of pictures available.</param>
            <returns>The tag of the picture on success or <see langword="null"/> if no picture is available (at that index).</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureGetImage(System.Int32)">
            <summary>
            Returns a picture image.
            </summary>
            <param name="i">The zero-based index (number) of the picture to get. You might use <see cref="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureCount"/> to retrieve the total number of pictures available.</param>
            <returns>The image of the picture on success or <see langword="null"/> if no picture is available (at that index).</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureGetDescription(System.Int32)">
            <summary>
            Returns the description of a picture.
            </summary>
            <param name="i">The zero-based index (number) of the picture to access. You might use <see cref="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureCount"/> to retrieve the total number of pictures available.</param>
            <returns>The description of the picture on success or <see langword="null"/> if no picture is available (at that index).</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureGetType(System.Int32)">
            <summary>
            Returns the type of the picture.
            </summary>
            <param name="i">The zero-based index (number) of the picture to access. You might use <see cref="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureCount"/> to retrieve the total number of pictures available.</param>
            <returns>The type of the picture on success or <see langword="null"/> if no picture is available (at that index).</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.ReadPicturesFromDirectory(System.String,System.Boolean)">
            <summary>
            Scans the directory of the <see cref="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.filename"/> location for additional pictures and adds them to the internal picture tags (see <see cref="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.PictureCount"/> for details).
            </summary>
            <param name="searchPattern">An optional search string, such as "*.jpg" or "Album*.jpg" or <see langword="null"/> to scan for default images.</param>
            <param name="all"><see langword="true"/> to add all found images to the picture list or <see langword="false"/> to only add the first found image.</param>
            <remarks>When scanning for default images (<paramref name="searchPattern"/> is <see langword="null"/>) the following order will be used:
            <list type="number">
            <item><term>&lt;filename&gt;.jpg</term></item>
            <item><term>&lt;filename&gt;.gif</term></item>
            <item><term>&lt;filename&gt;.png</term></item>
            <item><term>&lt;filename&gt;.bmp</term></item>
            <item><term>Folder*.jpg</term></item>
            <item><term>Album*.jpg</term></item>
            <item><term>&lt;album&gt;.jpg</term></item>
            <item><term>&lt;album&gt;.gif</term></item>
            <item><term>&lt;album&gt;.png</term></item>
            <item><term>&lt;album&gt;.bmp</term></item>
            </list>
            In the above list &lt;filename&gt; resp. &lt;album&gt; will be replaced by the actual tag content field values.
            <para>This methods adds any found pictures to the internal picture tags.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.ReadPicturesFromDirectory(System.String,System.String,System.String,System.Boolean)">
            <summary>
            Scans the directory of the <see cref="F:Un4seen.Bass.AddOn.Tags.TAG_INFO.filename"/> location for additional pictures and returns any found pictures.
            </summary>
            <param name="filename">The fully qualified path and file name to get the picture(s) from.</param>
            <param name="album">The optional name of the album tag to use to find a picture file (see below).</param>
            <param name="searchPattern">An optional search string, such as "*.jpg" or "Album*.jpg" or <see langword="null"/> to scan for default images.</param>
            <param name="all"><see langword="true"/> to return all found pictures or <see langword="false"/> to only return the first found picture.</param>
            <returns>A list of found <see cref="T:Un4seen.Bass.AddOn.Tags.TagPicture"/> items or an empty list if no pictures could be found.</returns>
            <remarks>When scanning for default images (<paramref name="searchPattern"/> is <see langword="null"/>) the following order will be used:
            <list type="number">
            <item><term>&lt;filename&gt;.jpg</term></item>
            <item><term>&lt;filename&gt;.gif</term></item>
            <item><term>&lt;filename&gt;.png</term></item>
            <item><term>&lt;filename&gt;.bmp</term></item>
            <item><term>Folder*.jpg</term></item>
            <item><term>Album*.jpg</term></item>
            <item><term>&lt;album&gt;.jpg</term></item>
            <item><term>&lt;album&gt;.gif</term></item>
            <item><term>&lt;album&gt;.png</term></item>
            <item><term>&lt;album&gt;.bmp</term></item>
            </list>
            In the above list &lt;filename&gt; resp. &lt;album&gt; will be replaced by the actual parameter values.
            <para>This methods does not add any pictures to the internal picture tags.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.ConvertToRiffINFO(System.Boolean)">
            <summary>
            Converts the members of this instance to a WAV RIFF LIST INFO chunk.
            </summary>
            <param name="fromNativeTags"><see langword="true"/> to create the INFO chunk out of the <see cref="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.NativeTags"/>, <see langword="false"/> to create them from the standard members.</param>
            <returns>The byte array containing the LIST INFO chunk data.</returns>
            <remarks>You might use this method to write a RIFF LIST INFO chunk to a wave file using the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_AddChunk(System.Int32,System.String,System.IntPtr,System.Int32)"/> method.
            <para>When creating the INFO chunk from the the standard members, the following mapping is used:
            <list type="table">
            <listheader><term>INFO chunk id</term><description>Content</description></listheader>
            <item><term>INAM</term><description>title</description></item>
            <item><term>IART</term><description>artist</description></item>
            <item><term>IPRD</term><description>album</description></item>
            <item><term>ISBJ</term><description>albumartist</description></item>
            <item><term>IPRT</term><description>track</description></item>
            <item><term>IFRM</term><description>disc</description></item>
            <item><term>ICRD</term><description>year</description></item>
            <item><term>IGNR</term><description>genre</description></item>
            <item><term>ICOP</term><description>copyright</description></item>
            <item><term>ISFT</term><description>encodedby</description></item>
            <item><term>ICMT</term><description>comment</description></item>
            <item><term>IENG</term><description>composer</description></item>
            <item><term>ICMS</term><description>publisher</description></item>
            <item><term>ITCH</term><description>conductor</description></item>
            <item><term>IWRI</term><description>lyricist</description></item>
            <item><term>IEDT</term><description>remixer</description></item>
            <item><term>IPRO</term><description>producer</description></item>
            <item><term>ISRF</term><description>grouping</description></item>
            <item><term>IKEY</term><description>mood</description></item>
            <item><term>ISHP</term><description>rating</description></item>
            <item><term>ISRC</term><description>isrc</description></item>
            <item><term>IBPM</term><description>bpm</description></item>
            <item><term>IRGP</term><description>replaygain_track_peak</description></item>
            <item><term>IRGG</term><description>replaygain_track_gain</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            byte[] listData = TAGs.ConvertToRiffINFO(false);
            if (listData != null)
                BassEnc.BASS_Encode_AddChunk(_encoderHandle, "LIST", listData, listData.Length);
            </code>
            <code lang="VB">
            Dim listData As Byte() = TAGs.ConvertToRiffINFO(False)
            If listData IsNot Nothing Then 
                BassEnc.BASS_Encode_AddChunk(_encoderHandle, "LIST", listData, listData.Length) 
            End If 
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.ConvertToRiffBEXT(System.Boolean)">
            <summary>
            Converts the members of this instance to a WAV RIFF BEXT chunk.
            </summary>
            <param name="fromNativeTags"><see langword="true"/> to create the BEXT chunk out of the <see cref="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.NativeTags"/>, <see langword="false"/> to create them from the standard members.</param>
            <returns>The byte array containing the BEXT chunk data.</returns>
            <remarks>You might use this method to write a RIFF BEXT chunk to a wave file using the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_AddChunk(System.Int32,System.String,System.IntPtr,System.Int32)"/> method.
            <para>When creating the BEXT chunk from the the standard members, the following mapping is used:
            <list type="table">
            <listheader><term>BEXT field</term><description>Content</description></listheader>
            <item><term>Description</term><description>title</description></item>
            <item><term>Originator</term><description>artist</description></item>
            <item><term>OriginatorReference</term><description>encodedby</description></item>
            <item><term>OriginationDate</term><description>year</description></item>
            <item><term>OriginationTime</term><description>year</description></item>
            <item><term>TimeReference</term><description>--</description></item>
            <item><term>UMID</term><description>--</description></item>
            <item><term>Version</term><description>1</description></item>
            <item><term>CodingHistory</term><description>--</description></item>
            </list>
            Note: Broadcast Wave Format (bext) native tags are named as above with the prefix 'BWF'.
            </para>
            </remarks>
            <example>
            <code lang="C#">
            byte[] bextData = TAGs.ConvertToRiffBEXT(true);
            if (bextData != null)
                BassEnc.BASS_Encode_AddChunk(_encoderHandle, "bext", bextData, bextData.Length);
            </code>
            <code lang="VB">
            Dim bextData As Byte() = TAGs.ConvertToRiffBEXT(True)
            If bextData IsNot Nothing Then 
                BassEnc.BASS_Encode_AddChunk(_encoderHandle, "bext", bextData, bextData.Length) 
            End If 
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.ConvertToRiffCART(System.Boolean)">
            <summary>
            Converts the members of this instance to a WAV RIFF CART chunk.
            </summary>
            <param name="fromNativeTags"><see langword="true"/> to create the CART chunk out of the <see cref="P:Un4seen.Bass.AddOn.Tags.TAG_INFO.NativeTags"/>, <see langword="false"/> to create them from the standard members.</param>
            <returns>The byte array containing the CART chunk data.</returns>
            <remarks>You might use this method to write a RIFF CART chunk to a wave file using the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_AddChunk(System.Int32,System.String,System.IntPtr,System.Int32)"/> method.
            <para>When creating the CART chunk from the the standard members, the following mapping is used:
            <list type="table">
            <listheader><term>CART field</term><description>Content</description></listheader>
            <item><term>Version</term><description>--</description></item>
            <item><term>Title</term><description>title</description></item>
            <item><term>Artist</term><description>artist</description></item>
            <item><term>CutID</term><description>album</description></item>
            <item><term>ClientID</term><description>copyright</description></item>
            <item><term>Category</term><description>genre</description></item>
            <item><term>Classification</term><description>grouping</description></item>
            <item><term>OutCue</term><description>--</description></item>
            <item><term>StartDate</term><description>--</description></item>
            <item><term>StartTime</term><description>--</description></item>
            <item><term>EndDate</term><description>--</description></item>
            <item><term>EndTime</term><description>--</description></item>
            <item><term>ProducerAppID</term><description>encodedby</description></item>
            <item><term>ProducerAppVersion</term><description>--</description></item>
            <item><term>UserDef</term><description>--</description></item>
            <item><term>LevelReference</term><description>--</description></item>
            <item><term>Timer1-8</term><description>--</description></item>
            <item><term>URL</term><description>--</description></item>
            <item><term>TagText</term><description>comment</description></item>
            </list>
            Note: Broadcast Wave Format (cart) native tags are named as above with the prefix 'CART'.
            </para>
            </remarks>
            <example>
            <code lang="C#">
            byte[] cartData = TAGs.ConvertToRiffCART(true);
            if (cartData != null)
                BassEnc.BASS_Encode_AddChunk(_encoderHandle, "cart", cartData, cartData.Length);
            </code>
            <code lang="VB">
            Dim cartData As Byte() = TAGs.ConvertToRiffCART(True)
            If cartData IsNot Nothing Then 
                BassEnc.BASS_Encode_AddChunk(_encoderHandle, "cart", cartData, cartData.Length) 
            End If 
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Tags.ID3v2Reader">
            <summary>
            A class for reading the tags from an ID3 header.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.ID3v2Reader.#ctor(System.IntPtr)">
            <summary>
            Reads the tags from an ID3v2 header.
            </summary>
            <param name="pID3v2">The memory pointer to the ID3v2 header.</param>
            <exception cref="T:System.FormatException">Invalid syncsafe integer found in ID3v2 data.</exception>
            <example>
            <code lang="C#">
            The 10 byte header looks like this:
            struct Id3v2Header 
            {
            	char magic[3];	// always "Id3"
            	char majorVersion;
            	char minorVersion;
            	char flags;
            	int28 size;
            };
            The version is always v2.maj.min -- the v2 is implied.
            flags currently only defines 4 flags.  More on these later.
            The int28 type is a 28-bit integer padded out to a
            32-bit integer, to make it sync-safe.  It's padded by setting
            the most significant bit of each byte to zero.
            i.e. it looks like this:
            0xxxxxxx0xxxxxxx0xxxxxxx0xxxxxxx
            Integers in Id3v2 are big-endian.
            A frame looks like this:
            struct Id3v2Frame 
            {
            	char frame_id[4];
            	int28 size;
            	char flags[2];
            };
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.WMFMetadataEditor.GetAllPictures">
            <summary>
            Returns all available TagPictures.
            </summary>
            <returns>An array list of <see cref="T:Un4seen.Bass.AddOn.Tags.TagPicture"/> instances or <see langword="null"/></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.WMFMetadataEditor.ReadAllAttributes">
            <summary>
            Gets all available Tags from a file (using default language!).
            </summary>
            <returns>An array list of <see cref="T:Un4seen.Bass.AddOn.Tags.Tag"/> instances or <see langword="null"/>.</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Tags.Tag">
            <summary>
            Represent one tag attribute that can be present in a header of a file.
            There are defined explicit convertion operator for every possible data type 
            represented with this structure. 
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.Tag.#ctor(System.Int32,System.String,Un4seen.Bass.AddOn.Tags.WMT_ATTR_DATATYPE,System.Object)">
            <summary>
            Initialize the Tag structure with proper values.
            </summary>
            <param name="index">the index of the attribute</param>
            <param name="name">Name of the attribute</param>
            <param name="type">WMT_ATTR_DATATYPE enum describing the type of the attribute. </param>
            <param name="val">The atrtibute value. This param is an obcjet and must match the 
            param type, ex. If type is WMT_ATTR_DATATYPE.WMT_TYPE_BOOL val param must be a valid <code>bool</code> and so on. </param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.Tag.ToString">
            <summary>
            ToString is overridden to provide the string representation in "name=value" format.
            </summary>
            <returns>String represantation of this struct in "name=value" format.</returns>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Tags.Tag.Index">
            <summary>
            Index of the attribute
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Tags.Tag.Name">
            <summary>
            Name of the attribute
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Tags.Tag.DataType">
            <summary>
            Data type of the attribute
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Tags.Tag.Value">
            <summary>
            Read/Write object representing the value of the attribute. 
            When writing this property the object must match to the DataType
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Tags.Tag.ValueAsString">
            <summary>
            Gets a string representing the value of the attribute. 
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Tags.TagPicture">
            <summary>
            This class represents a picture tag.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.MIMEType">
            <summary>
            The MIMEType of the picture.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureType">
            <summary>
            The type of the picture - one of the <see cref="T:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE"/> values.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.Description">
            <summary>
            The description of the picture.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.Data">
            <summary>
            The raw image data of the picture or the UTF-8 encoded location of the picture.
            </summary>
            <remarks>
            If the <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage"/> is set to <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.Internal"/>, this property directly contains the picture image data.
            If the <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage"/> is set to <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.External"/>, this property contains the link to the picture image as a fully qualified name (UTF-8 encoded).
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.AttributeIndex">
            <summary>
            The index or number of the related picture tag (-1 = undefined).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage">
            <summary>
            The storage type of the picture <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.Data"/>.
            </summary>
            <remarks>
            This property denotes where the image data is stored.
            <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.Internal"/> specifies, that <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.Data"/> directly contains the picture image.
            <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.External"/> specifies, that <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.Data"/> contains the link to the picture image as a fully qualified name (UTF-8 encoded).
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.#ctor(System.Int32,System.String,Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE,System.String,System.Byte[])">
            <summary>
            Creates a picture tag from the given values.
            </summary>
            <param name="attribIndex">The index/number of picture.</param>
            <param name="mimeType">The MIMEType of the picture.</param>
            <param name="pictureType">The PICTURE_TYPE.</param>
            <param name="description">The description of the picture.</param>
            <param name="data">The raw image data.</param>
            <remarks>The <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage"/> will be set to <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.Internal"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.#ctor(System.Drawing.Image,Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE,System.String)">
            <summary>
            Creates a picture tag from the given values.
            </summary>
            <param name="image">The image to add as a new picture.</param>
            <param name="pictureType">The PICTURE_TYPE.</param>
            <param name="description">The description of the picture.</param>
            <remarks>The <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage"/> will be set to <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.Internal"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.#ctor(System.String)">
            <summary>
            Creates a picture tag as an external link to a file.
            </summary>
            <param name="file">A string that contains the fully qualified name of the file from which to create the picture.</param>
            <remarks>The <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage"/> will be set to <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.External"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.#ctor(System.String,Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE,System.String)">
            <summary>
            Creates a picture tag as an external link to a file.
            </summary>
            <param name="file">A string that contains the fully qualified name of the file from which to create the picture.</param>
            <param name="type">The type of the picture (one of the <see cref="T:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE"/> values).</param>
            <param name="description">The description of the picture.</param>
            <remarks>The <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage"/> will be set to <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.External"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.#ctor(Un4seen.Bass.AddOn.Tags.Tag)">
            <summary>
            Loads a picture from a byte[] Tag!
            </summary>
            <param name="pTag">The Tag containing the raw byte[] image.</param>
            <remarks>The <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage"/> will be set to <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.Internal"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.#ctor(System.Byte[],System.Int32)">
            <summary>
            Loads a picture from a byte[] containing the PIC/FLAC image struct.
            </summary>
            <param name="pData">The byte[] containing the PIC/FLAC image struct.</param>
            <param name="pType">0=raw image, 1=FLAC structure, 2=APE structure.</param>
            <remarks>The <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage"/> will be set to <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.Internal"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.ToString">
            <summary>
            Returns the description, picture type and MIMEType of the picture.
            </summary>
            <returns>The picture description string.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.GetMimeTypeFromFile(System.String)">
            <summary>
            Returns the MIMEType of a given file by evaluating the file extension.
            </summary>
            <param name="pFile">The name of the file to get the MIMEType from.</param>
            <returns>The MIMEType string of the image.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.#ctor(Un4seen.Bass.AddOn.Tags.TagPicture,System.Int32)">
            <summary>
            Creates a resized, internal, Jpeg clone of a given picture tag.
            </summary>
            <param name="pic">The existing picture tag to create the resized, internal, Jpeg clone from.</param>
            <param name="size">The new size of the picture (the effective width and height will be calculated streched to this).</param>
            <remarks>The <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PictureStorage"/> will be set to <see cref="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.Internal"/>;
            the MIMEType will be set to image/jpeg.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.GetMimeTypeFromImage(System.Drawing.Image)">
            <summary>
            Returns the MIMEType of a given <see cref="T:System.Drawing.Image"/>.
            </summary>
            <param name="pImage">The image to get the MIMEType from.</param>
            <returns>The MIMEType of the image.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.LoadImageFromFile(System.String)">
            <summary>
            Creates an <see cref="T:System.Drawing.Image"/> from the specified file (non locking).
            </summary>
            <param name="filename">A string that contains the name of the file from which to create the <see cref="T:System.Drawing.Image"/>.</param>
            <returns>The <see cref="T:System.Drawing.Image"/> on success or <see langword="null"/> on error.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tags.TagPicture.SaveImageToFile(System.Drawing.Image,System.String,System.Drawing.Imaging.ImageFormat)">
            <summary>
            Saves an <see cref="T:System.Drawing.Image"/> to a given location in a given format (non-locking).
            </summary>
            <param name="img">The image to save.</param>
            <param name="filename">The filename and path of the file to save the image to.</param>
            <param name="format">Specifies the file format of the image.</param>
            <returns><see langword="null"/> on success, else <see langword="false"/> is returned.</returns>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Tags.TagPicture.PictureImage">
            <summary>
            Returns the related image.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE">
            <summary>
            Picture Type enumeration.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Unknown">
            <summary>
            Picture of a type not specifically listed (unknown or other).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Icon32">
            <summary>
            32 pixel by 32 pixel file icon. Use only with portable network graphics (PNG) format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.OtherIcon">
            <summary>
            File icon not conforming to type 1 above.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.FrontAlbumCover">
            <summary>
            Front album cover.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.BackAlbumCover">
            <summary>
            Back album cover.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.LeafletPage">
            <summary>
            Leaflet page.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Media">
            <summary>
            Media, typically this type of image is of the label side of a CD.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.LeadArtist">
            <summary>
            Picture of the lead artist, lead performer, or soloist.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Artists">
            <summary>
            Picture of one of the artists or performers.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Conductor">
            <summary>
            Picture of the conductor.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Orchestra">
            <summary>
            Picture of the band or orchestra.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Composer">
            <summary>
            Picture of the composer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Writer">
            <summary>
            Picture of the lyricist or writer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Location">
            <summary>
            Picture of the recording studio or location.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.RecordingSession">
            <summary>
            Picture taken during a recording session.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Performance">
            <summary>
            Picture taken during a performance.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.VideoCapture">
            <summary>
            Screen capture from a movie or video.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.ColoredFish">
            <summary>
            A bright colored fish.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.Illustration">
            <summary>
            Illustration.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.BandLogo">
            <summary>
            Logo of the band or artist.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_TYPE.PublisherLogo">
            <summary>
            Logo of the publisher or studio.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE">
            <summary>
            Picture Storage enumeration.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.Internal">
            <summary>
            The picture is stored internally as an image.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TagPicture.PICTURE_STORAGE.External">
            <summary>
            The picture is stored externally as an image link.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Tags.TAGINFOEncoding">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Tags.TAG_INFO.UpdateFromMETA(System.IntPtr,System.Boolean,System.Boolean)"/> to define which encoding to use.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAGINFOEncoding.Ansi">
            <summary>
            Use the default ANSI encoding (current operating system's settings).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAGINFOEncoding.Latin1">
            <summary>
            Use Latin-1 (ISO-8859-1) encoding.
            <para>Note: If the <see cref="P:Un4seen.Bass.BassNet.UseBrokenLatin1Behavior"/> property is set this also uses the default Ansi encoding.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAGINFOEncoding.Utf8">
            <summary>
            Use Utf-8 encoding.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tags.TAGINFOEncoding.Utf8OrLatin1">
            <summary>
            Use Utf-8 or Latin-1 encoding (whatever returns the shorter string).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Tta.BassTta">
            <summary>
            BASS.NET API wrapper for BASS_TTA.DLL
            <para>Requires: bass_tta.dll - The True Audio Codec (TTA) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_TTA is an extension to the BASS audio library, enabling the playing of TTA (The True Audio Codec) encoded files. TTA is a free, simple, realtime lossless audio compressor based on adaptive prognostic filters. The codec was built to offer adequate compression levels while maintaining high operation speeds.</para>
            <para>The True Audio format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Tta.BassTta.BASS_TTA_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> or User functions.</para>
            <para>More information can be found on <a href="http://www.true-audio.com">www.true-audio.com</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tta.BassTta.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tta.BassTta.BASS_TTA_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tta.BassTta.BASS_TTA_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a True Audio file.
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tta.BassTta.BASS_TTA_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tta.BassTta.BASS_TTA_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a True Audio memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tta.BassTta.BASS_TTA_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a True Audio file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tta.BassTta.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bass_tta.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Tta.BassTta.SupportedStreamName">
            <summary>
            Supported file format name of the bass_tta.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tta.BassTta.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tta.BassTta.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Tta.BassTta.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Tta.BassTta.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Tta.BassTta.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.BassVst">
            <summary>
            BASS.NET API wrapper for BASS_VST.DLL
            <para>Requires: bass_vst.dll - VST plugin support Add-On.</para>
            </summary>
            <remarks>
            <para>BASS_VST allows the usage of VST effect plugins as well as VST instruments (VSTi plugins) with BASS.</para>
            <para>VST PlugIn Technology by Steinberg Media Technologies GmbH.</para>
            <para>(C) Bjoern Petersen Software Design'n'Development, Hamburg, Germany.
            Contact: drsilver@silverjuke.net - <a href="http://www.silverjuke.net">www.silverjuke.net</a>.</para>
            <para>Redistribution of this package is allowed if all files stay intact.
            However, there is no guarantee, that all VST plugins might really work - just try them out.</para>
            <para>BASS_VST is VST host compatible up to the new VST 2.4 implementation and (hopefully) implements all needed features - 
            incl. the new double precision processing.</para>
            <para>Note that BASS_VST only loads realtime VST effects with at least 1 Input and 1 Output (stereo effects will typically have at least 2 In and 2 Out).</para>
            <para>While the normal usage is very easy (only one function - <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/> - is really needed), 
            BASS_VST also allowed advanced usage of the VST features - incl. embedding an editor or subclassing the whole library.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSPUnicode(System.Int32,System.String,System.Int32,System.Int32)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="dllFile"></param>
            <param name="flags"></param>
            <param name="priority"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)">
            <summary>
            Assigns a VST effects (defined by a DLL file name) to any BASS channels.
            <para>This overload implements the Unicode overload for the dllFile name, so the BASS_UNICODE flag will automatically be added if not already set.</para>
            </summary>
            <param name="chan">The channel handle... a HSTREAM, HMUSIC, or HRECORD. Or 0, if you want to test, if the dll is a valid VST plugin.</param>
            <param name="dllFile">The fully qualified path and file name to the VST effect plugin (a DLL file name).</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTDsp"/>):
            <list type="table">
            <item><term>BASS_VST_KEEP_CHANS</term><description>By default, mono effects assigned to stereo channels are mixed down before processing and converted back to stereo afterwards. Set this flag to avoid this behaviour in which case only the first channel is affected by processing.</description></item>
            <item><term>BASS_UNICODE</term><description>dllFile is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="priority">Same meaning as for <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/> - DSPs with higher priority are called before those with lower.</param>
            <returns>On success, the method returns the new vstHandle that must be given to all the other functions, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The VST plugin is implemented via a DSP callback on the channel. That means when you play the channel (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the VST effect at the same time.
            If the channel is freed all DSPs are removed automatically, also all VST DSPs are removed as well. If you want or need to free the VST DSP manually you can call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelRemoveDSP(System.Int32,System.Int32)"/>.
            <para>For testing if a DLL is a valid VST effect, you can set chan to 0 - however, do not forget to call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelRemoveDSP(System.Int32,System.Int32)"/> even in this case.</para>
            <para>You may safely assign the same DLL to different channels at the same time - the library makes sure, every channel is processed indepeningly. But take care to use the correct vstHandles in this case.</para>
            <para>Finally, you can use any number of VST effects on a channel. They are processed alongside with all other BASS DSPs in the order of it's priority.</para>
            <para>To set or get the parameters of a VST effect you might use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)"/> alongside with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParam(System.Int32,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)"/> to enumerate over the total number of effect parameters.
            To retrieve details about an individual parameter you might use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamInfo(System.Int32,System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO)"/>.
            If the VST effect supports an embedded editor you might also invoke this one with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_EmbedEditor(System.Int32,System.IntPtr)"/>. If the embedded editor also supports localization you might set the language in advance with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetLanguage(System.String)"/>.</para>
            <para>If you need to temporarily bypass the VST effect you might call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetBypass(System.Int32,System.Boolean)"/> - <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetBypass(System.Int32)"/> will tell you the current bypass status though.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/> to get even more details about a loaded VST plugin.</para>
            </remarks>
            <example>
            <code lang="C#">
            // create any stream 
            int stream = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT);
            // and assign a VST effect
            int vstHandle = BassVst.BASS_VST_ChannelSetDSP(stream, 
                                    "C:\\VstPlugins\\DelayEditGUI.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1);
            // and play the stream
            Bass.BASS_ChannelPlay(stream, false);
            ...
            // if the VST effect is not needed anymore...
            BassVst.BASS_VST_ChannelRemoveDSP(stream, vstHandle);
            </code>
            <code lang="VB">
            ' create any stream 
            Dim stream As Integer = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT)
            ' and assign a VST effect
            Dim vstHandle As Integer = BassVst.BASS_VST_ChannelSetDSP(stream, 
                                               "C:\VstPlugins\DelayEditGUI.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1)
            ' and play the stream
            Bass.BASS_ChannelPlay(stream, False)
            ...
            ' if the VST effect is not needed anymore...
            BassVst.BASS_VST_ChannelRemoveDSP(stream, vstHandle)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSPUnicodeEx(System.Int32,System.String,System.Int32,System.Int32,System.IntPtr,System.Int32,System.Int32)">
            <summary>
            
            </summary>
            <param name="chan"></param>
            <param name="dllFile"></param>
            <param name="flags"></param>
            <param name="priority"></param>
            <param name="pluginList"></param>
            <param name="pluginListSize"></param>
            <param name="pluginID"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32,System.String@,System.Int32)">
            <summary>
            Assigns a Shell-VST effect (defined by a DLL file name) to any BASS channels resp. retrieves the list of Shell-VST plugins.
            <para>This overload implements the Unicode overload for the dllFile name, so the BASS_UNICODE flag will automatically be added if not already set.</para>
            </summary>
            <param name="chan">The channel handle... a HSTREAM, HMUSIC, or HRECORD. Or 0, if you want to test, if the dll is a valid VST plugin.</param>
            <param name="dllFile">The fully qualified path and file name to the VST effect plugin (a DLL file name).</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTDsp"/>):
            <list type="table">
            <item><term>BASS_VST_KEEP_CHANS</term><description>By default, mono effects assigned to stereo channels are mixed down before processing and converted back to stereo afterwards. Set this flag to avoid this behavior in which case only the first channel is affected by processing.</description></item>
            <item><term>BASS_UNICODE</term><description>dllFile is Unicode (16-bit characters) (not needed here, since the overloads already take care of it).</description></item>
            </list>
            </param>
            <param name="priority">Same meaning as for <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/> - DSPs with higher priority are called before those with lower.</param>
            <param name="pluginList">If <paramref name="pluginID"/> is 0, this returns the list of available shell plugins in the form: 'pluginName TAB pluginID LF'.</param>
            <param name="pluginID">Specify 0 to get the list of available plugins (returned in the <paramref name="pluginList"/></param>
            <returns>On success, the method returns the new vstHandle that must be given to all the other functions, else 0 is returned (also in case you request the available lst of plugins). Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The VST plugin is implemented via a DSP callback on the channel. That means when you play the channel (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the VST effect at the same time.
            If the channel is freed all DSPs are removed automatically, also all VST DSPs are removed as well. If you want or need to free the VST DSP manually you can call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelRemoveDSP(System.Int32,System.Int32)"/>.
            <para>To request a list of available shell plugins, first call this method with a <paramref name="pluginID"/> of 0. Then parse and select the available plugin and call this method again using the selected <paramref name="pluginID"/> as returned in the <paramref name="pluginList"/>.</para>
            <para>You may safely assign the same DLL to different channels at the same time - the library makes sure, every channel is processed indepeningly. But take care to use the correct vstHandles in this case.</para>
            <para>Finally, you can use any number of VST effects on a channel. They are processed alongside with all other BASS DSPs in the order of it's priority.</para>
            <para>To set or get the parameters of a VST effect you might use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)"/> alongside with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParam(System.Int32,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)"/> to enumerate over the total number of effect parameters.
            To retrieve details about an individual parameter you might use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamInfo(System.Int32,System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO)"/>.
            If the VST effect supports an embedded editor you might also invoke this one with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_EmbedEditor(System.Int32,System.IntPtr)"/>. If the embedded editor also supports localization you might set the language in advance with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetLanguage(System.String)"/>.</para>
            <para>If you need to temporarily bypass the VST effect you might call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetBypass(System.Int32,System.Boolean)"/> - <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetBypass(System.Int32)"/> will tell you the current bypass status though.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/> to get even more details about a loaded VST plugin.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelRemoveDSP(System.Int32,System.Int32)">
            <summary>
            Removes a VST effect from a channel and destroys the VST instance.
            </summary>
            <param name="chan">The channel handle from which to remove the VST effect... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>If you do not call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelRemoveDSP(System.Int32,System.Int32)"/> explicitly and you have assigned a channel to the effect, the effect is removed automatically when the channel handle is deleted by BASS (like for any other DSP as well).</para>
            <para>For various reasons, the underlying DLL is unloaded from memory with a little delay, however, this has also the advantage that subsequent adding/removing of DLLs to channels has no bad performance impact.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelCreateUnicode(System.Int32,System.Int32,System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="freq"></param>
            <param name="chans"></param>
            <param name="dllFile"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelCreate(System.Int32,System.Int32,System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a new BASS stream based on any VST instrument plugin (VSTi).
            <para>This overload implements the Unicode overload for the dllFile name, so the BASS_UNICODE flag will automatically be added if not already set.</para>
            </summary>
            <param name="freq">The sample rate of the VSTi output (e.g. 44100).</param>
            <param name="chans">The number of channels... 1 = mono, 2 = stereo, 4 = quadraphonic, 6 = 5.1, 8 = 7.1.</param>
            <param name="dllFile">The fully qualified path and file name to the VSTi plugin (a DLL file name).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Produce 32-bit floating-point output. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See Floating-point channels for more info.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the stream to not use hardware mixing. Note this only applies to playback of the mixer's output - the mixing of the source channels is always performed by BASSmix.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono (chans=1). The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the DX8 effect implementations section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the stream.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description>Speaker assignment flags.</description></item>
            </list>
            </param>
            <returns>If successful, the new vst handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>On success, the function returns the new vstHandle that must be given to
            the other functions.  The returned VST handle can also be given to the typical BASS_Channel* functions.
            Use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelFree(System.Int32)"/> to deletes and free a VST instrument channel.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelFree(System.Int32)">
            <summary>
            Deletes and frees a VST instrument channel.
            </summary>
            <param name="vstHandle">The VSTi channel to delete (as created by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelCreate(System.Int32,System.Int32,System.String,Un4seen.Bass.BASSFlag)"/>).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Note, that you cannot delete VST effects assigned to this channels this way; for this purpose, please call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelRemoveDSP(System.Int32,System.Int32)"/>.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ProcessEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)">
            <summary>
            Sends a MIDI message/event to the VSTi plugin.
            </summary>
            <param name="vstHandle">The VSTi channel to send a MIDI message to (as created by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelCreate(System.Int32,System.Int32,System.String,Un4seen.Bass.BASSFlag)"/>).</param>
            <param name="midiCh">The Midi channel number to use (0 to 15).</param>
            <param name="eventtype">The Midi event/status value to use (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> for details).</param>
            <param name="param">The data bytes to send with the message (use <see cref="M:Un4seen.Bass.Utils.MakeWord(System.Byte,System.Byte)"/> to compose a data byte 1 and 2).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Use one of the <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> commands similar to <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/>.
            <para>Set <paramref name="midiCh"/> to 0xFFFF and <paramref name="eventtype"/> to the raw command to send. 
            The raw command must be encoded as 0x00xxyyzz with xx=MIDI command, yy=MIDI databyte #1, zz=MIDI databyte #2.<paramref name="param"/> should be set to 0 in this case.
            </para>
            <para>Send SysEx commands by setting <paramref name="midiCh"/> to 0xEEEE. 
            <paramref name="eventtype"/> will denote the type of event to send (see <see cref="T:Un4seen.Bass.AddOn.Midi.BASSMIDIEvent"/> about possible values for <paramref name="param"/> in such case).
            </para>
            </remarks>
            <example>
            <code lang="C#">
            using Un4seen.Bass.AddOn.Vst;
            using Un4seen.Bass.AddOn.Midi;
            
            int vstHandle = BassVst.BASS_VST_ChannelCreate(44100, 2, "yourVSTi.dll", BASSFlag.BASS_DEFAULT);
            Bass.BASS_ChannelPlay(vstHandle);
            BassVst.BASS_VST_ProcessEvent(vstHandle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, Utils.MakeWord(60, 100));
            </code>
            <code lang="VB">
            Imports Un4seen.Bass.AddOn.Vst
            Imports Un4seen.Bass.AddOn.Midi
            
            Dim vstHandle As Integer = BassVst.BASS_VST_ChannelCreate(44100, 2, "yourVSTi.dll", BASSFlag.BASS_DEFAULT)
            Bass.BASS_ChannelPlay(vstHandle)
            BassVst.BASS_VST_ProcessEvent(vstHandle, 0, BASSMIDIEvent.MIDI_EVENT_NOTE, Utils.MakeWord(60, 100))
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ProcessEventRaw(System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Sends a SysEx or MIDI (short)message/event to the VSTi plugin.
            </summary>
            <param name="vstHandle">The VSTi channel to send a MIDI message to (as created by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelCreate(System.Int32,System.Int32,System.String,Un4seen.Bass.BASSFlag)"/>).</param>
            <param name="msg">The pointer to your Midi message data to send (byte[]).</param>
            <param name="length">The length of a SysEx message or 0 in case of a normal Midi (short)message.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>To send a Midi (short)message : 
            The raw message must be encoded as 0x00xxyyzz with xx=MIDI command, yy=MIDI databyte #1, zz=MIDI databyte #2. <paramref name="length"/> should be set to 0 in this case.
            </para>
            <para>To send a SysEx message:
            <paramref name="msg"/> must be set to a pointer to the bytes to send and <paramref name="length"/> must be set to the number of bytes to send.
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ProcessEventRaw(System.Int32,System.Byte[],System.Int32)">
            <summary>
            Sends a SysEx or MIDI (short)message/event to the VSTi plugin.
            </summary>
            <param name="vstHandle">The VSTi channel to send a MIDI message to (as created by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelCreate(System.Int32,System.Int32,System.String,Un4seen.Bass.BASSFlag)"/>).</param>
            <param name="msg">The byte array containing your Midi message data to send.</param>
            <param name="length">The length of a SysEx message or 0 in case of a normal Midi (short)message.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>To send a Midi (short)message : 
            The raw message must be encoded as 0x00xxyyzz with xx=MIDI command, yy=MIDI databyte #1, zz=MIDI databyte #2. <paramref name="length"/> should be set to 0 in this case.
            </para>
            <para>To send a SysEx message:
            <paramref name="msg"/> must be set to a pointer to the bytes to send and <paramref name="length"/> must be set to the number of bytes to send.
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ProcessEventRaw(System.Int32,radio42.Multimedia.Midi.MidiShortMessage)">
            <summary>
            Sends a MIDI (short)message to the VSTi plugin.
            </summary>
            <param name="vstHandle">The VSTi channel to send a MIDI message to (as created by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelCreate(System.Int32,System.Int32,System.String,Un4seen.Bass.BASSFlag)"/>).</param>
            <param name="msg">The already constructed MIDI short message to send.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ProcessEventRaw(System.Int32,radio42.Multimedia.Midi.MidiSysExMessage)">
            <summary>
            Sends a MIDI system exclusive message to the VSTi plugin.
            </summary>
            <param name="vstHandle">The VSTi channel to send a MIDI message to (as created by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelCreate(System.Int32,System.Int32,System.String,Un4seen.Bass.BASSFlag)"/>).</param>
            <param name="msg">The already constructed MIDI system exclusive message to send.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Do NOT prepare the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>!</remarks>
            <example>
            <code lang="C#">
            using Un4seen.Bass.AddOn.Vst;
            using Un4seen.Bass.AddOn.Midi;
            
            int vstHandle = BassVst.BASS_VST_ChannelCreate(44100, 2, "yourVSTi.dll", BASSFlag.BASS_DEFAULT);
            Bass.BASS_ChannelPlay(vstHandle);
            
            // create a new system-exclusive message
            MidiSysExMessage sysex = new MidiSysExMessage(false, IntPtr.Zero);
            // message will be 8 byte (incl. SoX and EoX)
            sysex.CreateBuffer(8);
            // write start-of-system-exclusive
            sysex.MessageWriteSoX();
            int offset = 1;
            // write 6 more bytes...
            sysex.MessageWrite8(ref offset, 65);
            sysex.MessageWrite16(ref offset, 1023);
            sysex.MessageWrite16(ref offset, 13);
            sysex.MessageWrite8(ref offset, 1);
            // write end-of-system-exusive
            sysex.MessageWriteEoX();
            
            BassVst.BASS_VST_ProcessEvent(vstHandle, sysex);
            </code>
            <code lang="VB">
            Imports Un4seen.Bass.AddOn.Vst
            Imports Un4seen.Bass.AddOn.Midi
            
            Dim vstHandle As Integer = BassVst.BASS_VST_ChannelCreate(44100, 2, "yourVSTi.dll", BASSFlag.BASS_DEFAULT)
            Bass.BASS_ChannelPlay(vstHandle)
            
            ' create a new system-exclusive message
            Dim sysex As New MidiSysExMessage(False, IntPtr.Zero)
            ' message will be 8 byte (incl. SoX and EoX)
            sysex.CreateBuffer(8)
            ' write start-of-system-exclusive
            sysex.MessageWriteSoX()
            Dim offset As Integer = 1
            ' write 6 more bytes...
            sysex.MessageWrite8(offset, 65)
            sysex.MessageWrite16(offset, 1023)
            sysex.MessageWrite16(offset, 13)
            sysex.MessageWrite8(offset, 1)
            ' write end-of-system-exusive
            sysex.MessageWriteEoX()
            
            BassVst.BASS_VST_ProcessEvent(vstHandle, sysex)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)">
            <summary>
            Returns the number of editable parameters for the VST effect.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <returns>The number of editable parameters or if the effect has no editable parameters, 0 is returned.</returns>
            <remarks>
            <para>To set or get the individual parameters of a VST effect you might use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)"/> alongside with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParam(System.Int32,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)"/> to enumerate over the total number of effect parameters.
            To retrieve details about an individual parameter you might use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamInfo(System.Int32,System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO)"/>.
            If the VST effect supports an embedded editor you might also invoke this one with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_EmbedEditor(System.Int32,System.IntPtr)"/>. If the embedded editor also supports localization you might set the language in advance with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetLanguage(System.String)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParam(System.Int32,System.Int32)">
            <summary>
            Get the value of a single VST effect parameter.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="paramIndex">The index of the parameter (must be smaller than <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)"/>).</param>
            <returns><see langword="true"/> on success.</returns>
            <remarks>
            <para>All VST effect parameters are in the range from 0.0 to 1.0 (float), however, from the view of a VST effect, they may represent completely different values.
            E.g. some might represent a multiplier to some internal constants and will result in number of samples or some might represent a value in dB etc.</para>
            <para>You can use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamInfo(System.Int32,System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO)"/> to get further information about a single parameter, which will also present you with the current value in a readable format.</para>
            </remarks>
            <example>
            List all parameters and values of a loaded VST effect:
            <code lang="C#">
            // assign and load the VST effect
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                "C:\\VstPlugins\\DelayEditGUI.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1);
            // get the total number of parameters
            int vstParams = BassVst.BASS_VST_GetParamCount(vstHandle);
            // create a paramInfo object
            BASS_VST_PARAM_INFO paramInfo = new BASS_VST_PARAM_INFO();
            for (int i=0; i&lt;vstParams; i++)
            {
              // get the info about the parameter
              float paramValue = BassVst.BASS_VST_GetParam(vstHandle, i);
              Console.WriteLine( paramValue.ToString() );
            
              // and get further info about the parameter
              BassVst.BASS_VST_GetParamInfo(vstHandle, i, paramInfo);
              Console.WriteLine( paramInfo.ToString() );
            }
            </code>
            <code lang="VB">
            ' assign and load the VST effect
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                "C:\VstPlugins\DelayEditGUI.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1)
            ' get the total number of parameters
            Dim vstParams As Integer = BassVst.BASS_VST_GetParamCount(vstHandle)
            ' create a paramInfo object
            Dim paramInfo As New BASS_VST_PARAM_INFO()
            Dim i As Integer
            For i = 0 To vstParams - 1
              ' get the info about the parameter
              Dim paramValue As Single = BassVst.BASS_VST_GetParam(vstHandle, i)
              Console.WriteLine(paramValue.ToString())
            
              ' and get further info about the parameter
              BassVst.BASS_VST_GetParamInfo(vstHandle, i, paramInfo)
              Console.WriteLine(paramInfo.ToString())
            Next i
            </code>
            The output from the above might look like this:
            <code lang="none">
            0,5
            Delay =   22049 samples
            0,5
            FeedBack = 0.500000 amount
            0,75
            Volume = -2.49877 dB
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)">
            <summary>
            Set a value of a single VST effect parameter.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="paramIndex">The index of the parameter (must be smaller than <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)"/>).</param>
            <param name="newValue">The new value to set in the range from 0.0 to 1.0 (float). See the documentation of the actual VST implementation for details of the effective value representation.</param>
            <returns><see langword="true"/> on success.</returns>
            <remarks>
            <para>All VST effect parameters are in the range from 0.0 to 1.0 (float), however, from the view of a VST effect, they may represent completely different values.
            E.g. some might represent a multiplier to some internal constants and will result in number of samples or some might represent a value in dB etc.</para>
            <para>So it is a good idea to call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamInfo(System.Int32,System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO)"/> after you modified a parameter, in order to to get further information about the parameter in question, which will also present you with the current value in a readable format.</para>
            </remarks>
            <example>
            <code lang="C#">
            // assign and load the VST effect
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                "C:\\VstPlugins\\DelayEditGUI.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1);
            
            // create a paramInfo object
            BASS_VST_PARAM_INFO paramInfo = new BASS_VST_PARAM_INFO();
            // set a parameter with index number 1 to 0.7
            BassVst.BASS_VST_SetParam(vstHandle, 1, 0.75);
            // and get the info about the parameter back, so that we know how is looks like in a readable format
            BassVst.BASS_VST_GetParamInfo(vstHandle, i, paramInfo);
            Console.WriteLine(String.Format( "{0} = {1} {2}", paramInfo.name, paramInfo.display, paramInfo.unit));
            // this might look like this: "Volume = -2.49877 dB"
            </code>
            <code lang="VB">
            ' assign and load the VST effect
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                "C:\VstPlugins\DelayEditGUI.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1)
            
            ' create a paramInfo object
            Dim paramInfo As New BASS_VST_PARAM_INFO()
            ' set a parameter with index number 1 to 0.7
            BassVst.BASS_VST_SetParam(vstHandle, 1, 0.75)
            ' and get the info about the parameter back, so that we know how is looks like in a readable format
            BassVst.BASS_VST_GetParamInfo(vstHandle, i, paramInfo)
            Console.WriteLine([String].Format("{0} = {1} {2}", paramInfo.name, paramInfo.display, paramInfo.unit))
            ' this might look like this: "Volume = -2.49877 dB"
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamInfo(System.Int32,System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO)">
            <summary>
            Get some common information about an editable parameter to a <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO"/> class.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="paramIndex">The index of the parameter (must be smaller than <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)"/>).</param>
            <param name="ret">An instance of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO"/> where to store the parameter information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamInfo(System.Int32,System.Int32)">
            <summary>
            Get some common information about an editable parameter to a <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO"/> class.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="paramIndex">The index of the parameter (must be smaller than <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)"/>).</param>
            <returns>If successful, an instance of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO"/> is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetChunk(System.Int32,System.Boolean,System.Int32@)">
            <summary>
            
            </summary>
            <param name="vstHandle"></param>
            <param name="isPreset"></param>
            <param name="length"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetChunk(System.Int32,System.Boolean)">
            <summary>
            Gets the VST plug-in state as a plain byte array (memory chunk storage).
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="isPreset"><see langword="true"/> when saving a single program; <see langword="false"/> for all programs.</param>
            <returns>The array of bytes representing the VST plug-in state - or <see langword="null"/> if the VST doesn't support the chunk data mode.</returns>
            <remarks>There are two ways to store the current state of a VST plug-In:
            Either trough the parameter interfaces (<see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParam(System.Int32,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)"/>) or as an opaque memory block (chunk mode).
            <para>You might first queries this method to see, if the VST supports the chunk mode. If it is not implemented (<see langword="null"/> is returned), 
            the values of all parameters might be used to save the plug-in state.</para>
            <para>Chunk storage allows to save additional data (besides the parameter state) which is specific to the VST plug-in.
            Please note, that if you decide to use the chunk storage, you have to take care of saving and loading parameter states on your own (see <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetChunk(System.Int32,System.Boolean,System.Byte[],System.Int32)"/> for details)!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetChunk(System.Int32,System.Boolean,System.Byte[],System.Int32)">
            <summary>
            
            </summary>
            <param name="vstHandle"></param>
            <param name="isPreset"></param>
            <param name="chunk"></param>
            <param name="length"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetChunk(System.Int32,System.Boolean,System.Byte[])">
            <summary>
            Sets the VST plug-in state with a plain byte array (memory chunk storage).
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="isPreset"><see langword="true"/> when restoring a single program; <see langword="false"/> for all programs.</param>
            <param name="chunk">The byte array containing the memory chunk storage to set.</param>
            <returns>The number of bytes written.</returns>
            <remarks>
            Might be used to restore a VST plug-in state which was previously saved via <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetChunk(System.Int32,System.Boolean,System.Int32@)"/>.
            <para>After restoring a plug-in state you might need to retrieve the program names again (see <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramName(System.Int32,System.Int32)"/> resp. <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramCount(System.Int32)"/>) as they might have changed.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramCount(System.Int32)">
            <summary>
            Returns the number of editable programs for the VST effect.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <returns>The number of available programs or 0 if no program is available.</returns>
            <remarks>Many (not all!) effects have more than one "program" that
            can hold a complete set of parameters each.  Moreover, some of these 
            programs may be initialized to some useful "factory defaults".
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgram(System.Int32)">
            <summary>
            Returns the currently selected program for the VST effect.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <returns>The currect selected program number. Valid program numbers are between 0 and <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramCount(System.Int32)"/> minus 1.</returns>
            <remarks>After construction (<see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>), always the first program (0) is selected.
            <para>With <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetProgram(System.Int32,System.Int32)"/> you can change the selected program. Functions as <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)"/> will always change the selected program's settings.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetProgram(System.Int32,System.Int32)">
            <summary>
            Sets (changes) the selected program for the VST effect.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="programIndex">The program number to set (between 0 and <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramCount(System.Int32)"/> minus 1.).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>You might call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramCount(System.Int32)"/> to check, if the VST effect has any editable programs available.
            <para>With <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgram(System.Int32)"/> you can check, which is the current selected program. Functions as as <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)"/> will always change the selected program's settings.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramParamPtr(System.Int32,System.Int32,System.Int32@)">
            <summary>
            Returns a list parameter values of any program of a VST effect.
            </summary>
            <param name="vstHandle"></param>
            <param name="programIndex"></param>
            <param name="length"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramParam(System.Int32,System.Int32)">
            <summary>
            Returns the parameters of a given program.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="programIndex">The program number for which to query the parameter values, must be smaller than <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramCount(System.Int32)"/>.</param>
            <returns>An array of float values representing the parameter values of the given program or <see langword="null"/> if the program (VST effect) has no parameters or an error occurred.</returns>
            <remarks>
            <para>The parameters of the currently selected program can also be queried by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParam(System.Int32,System.Int32)"/>.</para>
            <para>The function returns the parameters as an array of floats. The number of elements in the returned array is equal to <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)"/>.</para>
            <para>This function does not change the selected program!</para>
            </remarks>
            <example>
            List all parameter values of a certain program:
            <code lang="C#">
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                "C:\\VstPlugins\\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1 );
            // get the number of available programs
            int vstProgCount = BassVst.BASS_VST_GetProgramCount(vstHandle);
            if (vstProgCount &gt; 1)
            {
              // as an example get the parameters of program #1 (selected should be #0 in this case)
              float[] progParams = BassVst.BASS_VST_GetProgramParam(vstHandle, 1);
              if (progParams != null)
              {
                // loop over all paramter
                for (int i=0; i&lt;progParams.Length; i++)
                {
                  // print the program's param value
                  Console.WriteLine( String.Format( "{0} = {1}", i, progParams[i]) );
                }
              }
            }
            </code>
            <code lang="VB">
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                "C:\VstPlugins\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1)
            ' get the number of available programs
            Dim vstProgCount As Integer = BassVst.BASS_VST_GetProgramCount(vstHandle)
            If vstProgCount &gt; 1 Then
              ' as an example get the parameters of program #1 (selected should be #0 in this case)
              Dim progParams As Single() = BassVst.BASS_VST_GetProgramParam(vstHandle, 1)
              If Not (progParams Is Nothing) Then
                ' loop over all paramter
                Dim i As Integer
                For i = 0 To progParams.Length - 1
                  ' print the program's param value
                  Console.WriteLine([String].Format("{0} = {1}", i, progParams(i)))
                Next i
              End If
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetProgramParam(System.Int32,System.Int32,System.Single[])">
            <summary>
            Set all parameters of any program in a VST effect.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="programIndex">The program number for which to set the parameter values, must be smaller than <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramCount(System.Int32)"/>.</param>
            <param name="param">An array with the parameter values to set. The array needs to have as many elements as defined by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamCount(System.Int32)"/> or as returned be <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramParam(System.Int32,System.Int32)"/>.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function does not change the selected program!
            <para>If you use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetCallback(System.Int32,Un4seen.Bass.AddOn.Vst.VSTPROC,System.IntPtr)"/>, the BASS_VST_PARAM_CHANGED event is only posted if you select a program with parameters different from the prior.</para>
            </remarks>
            <example>
            Copy all parameters from the current program to program #3:
            <code lang="C#">
            // get the current program number
            int vstCurrProg = BassVst.BASS_VST_GetProgram(vstHandle);
            // query all parameter values of the current program
            float[] prog0Params = BassVst.BASS_VST_GetProgramParam(vstHandle, vstCurrProg);
            // query all parameter values of the program #3
            float[] prog1aParams = BassVst.BASS_VST_GetProgramParam(vstHandle, 3);
            // copy all parameters from the current program to #3
            bool ok = BassVst.BASS_VST_SetProgramParam(vstHandle, 3, prog0Params);
            // and query all parameter values of the program #3 again...
            float[] prog1bParams = BassVst.BASS_VST_GetProgramParam(vstHandle, 3);
            </code>
            <code lang="VB">
            ' get the current program number
            Dim vstCurrProg As Integer = BassVst.BASS_VST_GetProgram(vstHandle)
            ' query all parameter values of the current program
            Dim prog0Params As Single() = BassVst.BASS_VST_GetProgramParam(vstHandle, vstCurrProg)
            ' query all parameter values of the program #3
            Dim prog1aParams As Single() = BassVst.BASS_VST_GetProgramParam(vstHandle, 3)
            ' copy all parameters from the current program to #3
            Dim ok As Boolean = BassVst.BASS_VST_SetProgramParam(vstHandle, 3, prog0Params)
            ' and query all parameter values of the program #3 again...
            Dim prog1bParams As Single() = BassVst.BASS_VST_GetProgramParam(vstHandle, 3)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramName(System.Int32,System.Int32)">
            <summary>
            Gets the name of any program of a VST effect.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="programIndex">The program number for which to get the name, must be smaller than <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramCount(System.Int32)"/>.</param>
            <returns>The name of the program given or <see langword="null"/> if not valid.</returns>
            <remarks>The names are limited to 24 characters. This function does not change the selected program!</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramNames(System.Int32)">
            <summary>
            Returns a list of all available program names.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <returns>An array of strings representing the list of available program names. The index corresponds to the program numbers.</returns>
            <remarks>You might use this method to enumerate over all programs or to initialize a menu for example.
            <para>This function does not change the selected program!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetProgramName(System.Int32,System.Int32,System.String)">
            <summary>
            Sets the name of any program of a VST effect.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="programIndex">The program number for which to set the name, must be smaller than <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetProgramCount(System.Int32)"/>.</param>
            <param name="name">The new name to use. Names are limited to 24 characters, BASS_VST truncates the names, if needed.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function does not change the selected program!</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParamRestoreDefaults(System.Int32)">
            <summary>
            Restores all default values for all VST effect parameters (on the current selected program).
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <remarks>Internally all default values for all parameters are retried <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamInfo(System.Int32,System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO)"/>.</remarks>
            <example>
            <code lang="C#">
            // assign a Vst effect to a channel
            int vst = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                              "C:\\VstPlugins\\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0);
            
            // change some parameters (e.g. #1 to 0.75)
            BassVst.BASS_VST_SetParam(vst, 1, 0.75f);
            
            // restore all parameters to it's default values
            BassVst.BASS_VST_SetParamRestoreDefaults(vst);
            </code>
            <code lang="VB">
            ' assign a Vst effect to a channel
            Dim vst As Integer = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                         "C:\VstPlugins\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0)
            
            ' change some parameters (e.g. #1 to 0.75)
            BassVst.BASS_VST_SetParam(vst, 1, 0.75F)
            
            ' restore all parameters to it's default values
            BassVst.BASS_VST_SetParamRestoreDefaults(vst)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParamCopyParams(System.Int32,System.Int32)">
            <summary>
            Copies all parameters from one vstHandle to another one.
            <para>Both vstHandles must be of the same VST effect plugin!</para>
            </summary>
            <param name="sourceVstHandle">The source VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/> from where to copy the parameters.</param>
            <param name="destinVstHandle">The destination VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/> to where the parameters should be copied.</param>
            <remarks>Copying parameters might be useful, if you created multiple instances of a VST effect plugin (e.g. for different channels).</remarks>
            <example>
            For crossfadings, you might use several BASS channels for playback - each should have the same VST-effects of course.
            So changes done in the VST-editor need to be applied to several channels under some circumstances - on the other hand, if the player is stopped and no channel is available, the VST-editor should still be accessible.
            <code lang="C#">
            private VSTPROC _myVstProc; // make global, so GC will not collect it
            private int vst1;
            private int vst2;
            private int ch1;
            private int ch2;
            ...
            // create the 'real' channels to use
            ch1 = BASS_StreamCreateFile(...);
            vst1 = BassVst.BASS_VST_ChannelSetDSP(0, 
                           "C:\\VstPlugins\\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1);
            ch2 = BASS_StreamCreateFile(...);
            vst2 = BassVst.BASS_VST_ChannelSetDSP(0, 
                           "C:\\VstPlugins\\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1);
            
            // create an 'unchanneled' VST-editor
            int vstDummy = BassVst.BASS_VST_ChannelSetDSP(0, 
                                   "C:\\VstPlugins\\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0);
            
            // we want to be notified about parameter changes ...
            myVstProc = new VSTPROC(vstEditorCallback);
            BassVst.BASS_VST_SetCallback(vstDummy, myVstProc, IntPtr.Zero);
            
            // so when the user opens the VST-editor this is being called
            public int vstEditorCallback(int vstDummy, int action, int param1, int param2, IntPtr user)
            {
                if (action == BASS_VST_PARAM_CHANGED)
                {
                    // the user has changed some slider in the unchanneled editor
                    // copy the changes to the 'real' channels
                    BassVst.BASS_VST_SetParamCopyParams(vstDummy, vst1);
                    BassVst.BASS_VST_SetParamCopyParams(vstDummy, vst2);
                }
                return 0;  
            }
            </code>
            <code lang="VB">
            Private _myVstProc As VSTPROC ' make global, so GC will not collect it
            Private vst1 As Integer
            Private vst2 As Integer
            Private ch1 As Integer
            Private ch2 As Integer
            ...
            ' create the 'real' channels to use
            ch1 = BASS_StreamCreateFile(...)
            vst1 = BassVst.BASS_VST_ChannelSetDSP(0, 
                           "C:\VstPlugins\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1)
            ch2 = BASS_StreamCreateFile(...)
            vst2 = BassVst.BASS_VST_ChannelSetDSP(0, 
                           "C:\VstPlugins\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1)
            
            ' create an 'unchanneled' VST-editor
            Dim vstDummy As Integer = BassVst.BASS_VST_ChannelSetDSP(0, 
                                              "C:\VstPlugins\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0)
            
            ' we want to be notified about parameter changes ...
            myVstProc = New VSTPROC(vstEditorCallback)
            BassVst.BASS_VST_SetCallback(vstDummy, myVstProc, IntPtr.Zero)
            
            ' so when the user opens the VST-editor this is being called
            Public Function vstEditorCallback(vstDummy As Integer, action As Integer, 
                                              param1 As Integer, param2 As Integer, user As IntPtr) As Integer
              If action = BASS_VST_PARAM_CHANGED Then
                ' the user has changed some slider in the unchanneled editor
                ' copy the changes to the 'real' channels
                BassVst.BASS_VST_SetParamCopyParams(vstDummy, vst1)
                BassVst.BASS_VST_SetParamCopyParams(vstDummy, vst2)
              End If
              Return 0
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_Resume(System.Int32)">
            <summary>
            Call this function after position changes or sth. like that.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Some VST effects will use an internal buffer for effect calculation and handling.
            This will reset the internal VST buffers which may remember some "old" data.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetBypass(System.Int32,System.Boolean)">
            <summary>
            Bypasses the effect processing (state=<see langword="true"/>) or switch back to normal processing (state=<see langword="false"/>).
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="state"><see langword="true"/> to bypasses the effect processing; <see langword="false"/> to switch back to normal processing.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>By default bypassing is OFF and the effect will be processed normally. Use <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetBypass(System.Int32)"/> returns the current state.
            <para>Note, that the bypassing is completely done by BASS_VST, we're not using the so-called "soft" bypass that is implemented by some effects. 
            This is for the following reasons:</para>
            <para>- Soft-bypassing is not supported by all effects</para>
            <para>- The state of soft-bypassing cannot be queried safely</para>
            <para>- Soft-bypassing would not be a real bypass as some channel transformations may still be needed</para>
            <para>- Performance reasons - soft-bypassing would require still most of the needed BASS_VST transformations</para>
            <para>- Finally, I do not see any advantages of the soft-bypassing</para>
            <para>Soft bypassing is not supported in the BASS.NET API.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetBypass(System.Int32)">
            <summary>
            Gets the current bypasses state of the the effect processing (state=<see langword="true"/> or <see langword="false"/>).
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)">
            <summary>
            Gets general information about a VST effect plugin.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="ret">An instance of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO"/> where to store the parameter information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Some words to the number of input/output channels:
            <para>VST effects that have no input channels (so called "Instruments") are not loaded by BASS_VST.  So you can assume chansIn and chansOut to be at least 1.</para>
            <para>Multi-channel streams should work correctly, if supported by a effect.
            If not, only the first chansIn channels are processed by the effect, the other ones stay unaffected.  
            The opposite, eg. assigning multi-channel effects to stereo channels, should be no problem at all.</para>
            <para>If mono effects are assigned to stereo channels, the result will be mono, expanded to both channels.
            This behaviour can be switched of using the BASS_VST_KEEP_CHANS in <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_VST_INFO vstInfo = new BASS_VST_INFO();
            if ( BassVst.BASS_VST_GetInfo(vstHandle, vstInfo))
            	Console.WriteLine(vstInfo.ToString());
            </code>
            <code lang="VB">
            Dim vstInfo As New BASS_VST_INFO()
            If BassVst.BASS_VST_GetInfo(vstHandle, vstInfo) Then
              Console.WriteLine(vstInfo.ToString())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32)">
            <summary>
            Gets general information about a VST effect plugin.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <returns>If successful, an instance of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO"/> is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Some words to the number of input/output channels:
            <para>VST effects that have no input channels (so called "Instruments") are not loaded by BASS_VST.  So you can assume chansIn and chansOut to be at least 1.</para>
            <para>Multi-channel streams should work correctly, if supported by a effect.
            If not, only the first chansIn channels are processed by the effect, the other ones stay unaffected.  
            The opposite, eg. assigning multi-channel effects to stereo channels, should be no problem at all.</para>
            <para>If mono effects are assigned to stereo channels, the result will be mono, expanded to both channels.
            This behaviour can be switched of using the BASS_VST_KEEP_CHANS in <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_VST_INFO vstInfo = BassVst.BASS_VST_GetInfo(vstHandle);
            if (vstInfo != null)
            	Console.WriteLine(vstInfo.ToString());
            </code>
            <code lang="VB">
            Dim vstInfo As BASS_VST_INFO = BassVst.BASS_VST_GetInfo(vstHandle)
            If Not (vstInfo Is Nothing) Then
              Console.WriteLine(vstInfo.ToString())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_EmbedEditor(System.Int32,System.IntPtr)">
            <summary>
            Many VST effects come along with an graphical parameters editor; with the following function, you can embed these editors to your user interface.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="parentWindow">The IntPtr to the window handle (HWND) of the parents window in which the editor should be embedded (e.g. use a new modeless dialog or user control).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>To embed the editor to another window, call this function with parentWindow set to the HWND (this.Handle) of the parent window.
            To check, if an effect has an editor, see the hasEditor flag set by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</para>
            <para>To "unembed" the editor, call this function with parentWindow set to <see langword="null"/>.</para>
            <para>If you create the editor window independently of a real channel (by skipping the channel parameter when calling <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>) and the editor displays any spectrums, VU-meters or such, 
            the data for this come from the most recent channel using the same effect  and the same scope.
            The scope can be set by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetScope(System.Int32,System.Int32)"/> to any ID, the default is 0.</para>
            <para>In order to create a new window in which the editor should be embedded, it is a good idea to call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/> in order to retrieve the editors height and width.</para>
            </remarks>
            <example>
            <code lang="C#">
            private int _vstHandle = 0;
            ...
            _vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                 "C:\\VstPlugins\\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1 );
            // show the embedded editor
            BASS_VST_INFO vstInfo = new BASS_VST_INFO();
            if ( BassVst.BASS_VST_GetInfo(vstHandle, vstInfo) &amp;&amp; vstInfo.hasEditor )
            {
              // create a new System.Windows.Forms.Form
              Form f = new Form();
              f.Width = vstInfo.editorWidth+4;
              f.Height = vstInfo.editorHeight+34;
              f.Closing += new CancelEventHandler(f_Closing);
              f.Text = vstInfo.effectName;
              f.Show();
              BassVst.BASS_VST_EmbedEditor(_vstHandle, f.Handle);
            }
            
            private void f_Closing(object sender, CancelEventArgs e)
            {
              // unembed the VST editor
              BassVst.BASS_VST_EmbedEditor(_vstHandle, IntPtr.Zero);
            }
            </code>
            <code lang="VB">
            Private _vstHandle As Integer = 0
            ...
            _vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                 "C:\VstPlugins\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 1)
            ' show the embedded editor
            Dim vstInfo As New BASS_VST_INFO()
            If BassVst.BASS_VST_GetInfo(vstHandle, vstInfo) AndAlso vstInfo.hasEditor Then
              ' create a new System.Windows.Forms.Form
              Dim f As New Form()
              f.Width = vstInfo.editorWidth + 4
              f.Height = vstInfo.editorHeight + 34
              AddHandler f.Closing, AddressOf f_Closing
              f.Text = vstInfo.effectName
              f.Show()
              BassVst.BASS_VST_EmbedEditor(_vstHandle, f.Handle)
            End If
            
            Private Sub f_Closing(sender As Object, e As CancelEventArgs)
              ' unembed the VST editor
              BassVst.BASS_VST_EmbedEditor(_vstHandle, IntPtr.Zero)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetScope(System.Int32,System.Int32)">
            <summary>
            Sets the scope of an Editor to a given ID.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="scope">The ID to set the scope to.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>If you create an editor window with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_EmbedEditor(System.Int32,System.IntPtr)"/> independently of a real channel (by skipping the channel parameter when calling <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>) 
            and the editor displays any spectrums, VU-meters or such, the data for this come from the most recent channel using the same effect 
            and the same scope. The scope can be set by this method to any ID, the default is 0.</para>
            <para>The 'scope' is used to forward 'real' audio data to 'unchanneled' editors (you may want to use these editors as you may want the user to open the editor window at any time, independent of a playing channel).
            Imaging the following code, where two streams are prepared for crossfading:
            <code lang="C#">
            ch1 = BASS_StreamCreateFile(false, "sth1.mp3", ...);
            dsp1 = BASS_VST_ChannelSetDSP(ch1, "sth.dll", ...);
            ch2 = BASS_StreamCreateFile(false, "sth2.mp3", ...);
            dsp2 = BASS_VST_ChannelSetDSP(ch2, "sth.dll", ...);
            </code>
            For the user, this is one logical channel. If the user opens the editor for the 'sth' effect, it should display first the spectrum/vu/etc. from the first, 
            after crossfading from the second channel. To let the editor know this, you should use the 'scope'.
            The 'scope' simply brings independent channels together to one logical unit - mainly for displaying the correct spectrum/vu/etc. in the editors.
            </para>
            <para>So before the crossfade, you should set the scope:
            <code lang="C#">
            BASS_VST_SetScope(dsp1, 123); // any number, scope is created implicitly
            BASS_VST_SetScope(dsp2, 123); // any number, scope is created implicitly
            </code>
            </para>
            <para>To open the unchanneled editor, you can then simply use the following code:
            <code lang="C#">
            editor = BASS_VST_ChannelSetDSP(0, "sth.dll", ...);
            BASS_VST_SetScope(editor, 123);
            BASS_VST_EmbedEditor(editor, ...);
            </code>
            The editor can then be opened, closed, created and destroyed independingly of the playing stuff.
            </para>
            <para>If you use BASSmix, maybe you won't need the VST-scopes as you can add the effects to the finaly mix. However, even in this case, there may be situations where <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetScope(System.Int32,System.Int32)"/> is just fine and simplifies your code.</para>
            <para></para>
            <para></para>
            <para></para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetCallback(System.Int32,Un4seen.Bass.AddOn.Vst.VSTPROC,System.IntPtr)">
            <summary>
            Assign a callback function to a vstHandle.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="proc">The user defined callback delegate (see <see cref="T:Un4seen.Bass.AddOn.Vst.VSTPROC"/>).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The callback function is called with one of the following actions (see <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTAction"/>):
            <list type="table">
            <listheader><term>Actions:</term><description></description></listheader>
            <item><term>BASS_VST_PARAM_CHANGED</term><description>Some parameters are changed by the editor opened by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_EmbedEditor(System.Int32,System.IntPtr)"/>, NOT called if you call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)"/>.</description></item>
            <item><term>BASS_VST_EDITOR_RESIZED</term><description>The embedded editor window should be resized, the new width/height can be found in param1/param2 and in <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</description></item>
            <item><term>BASS_VST_AUDIO_MASTER</term><description>Can be used to subclass the audioMaster callback (see the VST SDK), param1 is a pointer to a <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM"/> structure.</description></item>
            </list>
            </para>
            <para>Unless defined otherwise, the callback function should always return 0.</para>
            </remarks>
            <example>
            <code lang="C#">
            private VSTPROC _myVstProc; // keep the callback delegate in a global member
            ...
            // your VST callback - referenced below by BASS_VST_SetCallback()
            private int YourVstProc(int vstHandle, BASSVSTAction action, int param1, int param2, IntPtr user)
            {
              switch (action)
              {
                case BASSVSTAction.BASS_VST_PARAM_CHANGED:
                  // we get notified that the user has changed some sliders in the editor - 
                  // do what to do here ...
                  break;
                case BASSVSTAction.BASS_VST_EDITOR_RESIZED:
                  // the editor window requests a new size,
                  // maybe we should resize the window the editor is embedded in?
                  // the new width/height can be found in param1/param2
                  break;
                case BASSVSTAction.BASS_VST_AUDIO_MASTER:
                  // this is only for people familiar with the VST SDK,
                  // param1 is a pointer to a BASS_VST_AUDIO_MASTER_PARAM structure
                  // which contains all information needed
                  break;
              }
              return 0;
            }
            ...
            // open the VST editor (e.g. if we are inside a System.Windows.Forms.Form)
            BassVst.BASS_VST_EmbedEditor(vstHandle, this.Handle);
            // we want to get notified for parameter changes etc.
            _myVstProc = new VSTPROC(YourVstProc);
            BassVst.BASS_VST_SetCallback(vstHandle, _myVstProc, IntPtr.Zero);
            </code>
            <code lang="VB">
            Private _myVstProc As VSTPROC ' keep the callback delegate in a global member
            ...
            ' your VST callback - referenced below by BASS_VST_SetCallback()
            Private Function YourVstProc(vstHandle As Integer, action As BASSVSTAction, param1 As Integer, param2 As Integer, user As IntPtr) As Integer
              Select Case action
                Case BASSVSTAction.BASS_VST_PARAM_CHANGED
                  ' we get notified that the user has changed some sliders in the editor - 
                  ' do what to do here ...
                Case BASSVSTAction.BASS_VST_EDITOR_RESIZED
                  ' the editor window requests a new size,
                  ' maybe we should resize the window the editor is embedded in?
                  ' the new width/height can be found in param1/param2
                Case BASSVSTAction.BASS_VST_AUDIO_MASTER
                  ' this is only for people familiar with the VST SDK,
                  ' param1 is a pointer to a BASS_VST_AUDIO_MASTER_PARAM structure
                  ' which contains all information needed
              End Select
              Return 0
            End Function
            ...
            ' open the VST editor (e.g. if we are inside a System.Windows.Forms.Form)
            BassVst.BASS_VST_EmbedEditor(vstHandle, Me.Handle)
            ' we want to get notified for parameter changes etc.
            _myVstProc = New VSTPROC(AddressOf YourVstProc)
            BassVst.BASS_VST_SetCallback(vstHandle, _myVstProc, IntPtr.Zero)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetLanguage(System.String)">
            <summary>
            Set the VST language to be used by any plugins.
            </summary>
            <param name="lang">The desired language as ISO 639.1, e.g. "en", "de", "es"...</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Some VST effects come along localized.  With this function you can set the
            desired language as ISO 639.1 -- eg. "en" for english, "de" for german,
            "es" for spanish and so on.  The default language is english.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_Dispatcher(System.Int32,System.Int32,System.Int32,System.Int64,System.IntPtr,System.Single)">
            <summary>
            Calls the VST dispatcher method.
            </summary>
            <param name="vstHandle">The VST effect handle as returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="opCode">The opCode to use (e.g. 50 for 'effCanDo' or 51 for 'effVendorSpecific').</param>
            <param name="index">The index value to use.</param>
            <param name="value">The value's value to use.</param>
            <param name="ptr">The pointer value to use.</param>
            <param name="opt">The optional value to use.</param>
            <returns>If successful, the dispatcher return value is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>See the VST's dispatcher method for details.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSVST from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassVst.LoadMe();
            ...
            // when not used anymore...
            BassVst.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSVST from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassVst.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassVst.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BassVst.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.BASSVSTDsp">
            <summary>
            VST DSP flags to be used within the <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/> method.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDsp.BASS_VST_DEFAULT">
            <summary>
            Default VST DSP processing.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDsp.BASS_VST_KEEP_CHANS">
            <summary>
            By default, mono effects assigned to stereo channels are mixed down before processing and converted back
            to stereo afterwards. Set this flag to avoid this behaviour in which case only the first channel is
            affected by processing.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDsp.BASS_UNICODE">
            <summary>
            File is a Unicode (16-bit characters) filename.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.BASSVSTAction">
            <summary>
            VST action parameters as used within the <see cref="T:Un4seen.Bass.AddOn.Vst.VSTPROC"/> callback.
            <para>See also <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetCallback(System.Int32,Un4seen.Bass.AddOn.Vst.VSTPROC,System.IntPtr)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAction.BASS_VST_PARAM_CHANGED">
            <summary>
            Some parameters are changed by the editor opened by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_EmbedEditor(System.Int32,System.IntPtr)"/>, NOT called if you call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAction.BASS_VST_EDITOR_RESIZED">
            <summary>
            The embedded editor window should be resized, the new width/height can be found in param1/param2 and in <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAction.BASS_VST_AUDIO_MASTER">
            <summary>
            Can be used to subclass the audioMaster callback (see the VST SDK), param1 is a pointer to a instance of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM"/> class.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes">
            <summary>
            VST Dispatcher OpCodes to be used within the <see cref="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_Dispatcher"/> callback when using <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/>.
            <para>For more info see the Steinberg VST SDK documentation.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effOpen">
            <summary>
            Initialise.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effClose">
            <summary>
            Exit, release all memory and other resources!
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetProgram">
            <summary>
            Program number in "value".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetProgram">
            <summary>
            Returns the current program number.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetProgramName">
            <summary>
            User changed program name (max 24 char + 0) to as passed in string.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetProgramName">
            <summary>
            Stuff program name (max 24 char + 0) into string.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetParamLabel">
            <summary>
            Stuff parameter "index" label (max 8 char + 0) into string.
            <para>Examples: 'sec', 'dB', 'type'</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetParamDisplay">
            <summary>
            Stuff parameter "index" textual representation into string.
            <para>Examples: '0.5', '-3', 'PLATE'</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetParamName">
            <summary>
            Stuff parameter "index" label (max 8 char + 0) into string.
            <para>Examples: 'Time', 'Gain', 'RoomType'</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetVu">
            <summary>
            Called if (flags &amp; (effFlagsHasClip | effFlagsHasVu)).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetSampleRate">
            <summary>
            System: In opt (float value in Hz; for example 44100.0Hz).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetBlockSize">
            <summary>
            System: In value (this is the maximun size of an audio block, pls check sampleframes in process call).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effMainsChanged">
            <summary>
            System: The user has switched the 'power on' button to value (0 off, else on). This only switches audio  processing; you should flush delay buffers etc.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditGetRect">
            <summary>
            Editor: Stuff rect (top, left, bottom, right) into ptr.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditOpen">
            <summary>
            Editor: System dependant Window pointer in ptr.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditClose">
            <summary>
            Editor: No arguments.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditDraw">
            <summary>
            Editor: Draw method, ptr points to rect (MAC Only).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditMouse">
            <summary>
            Editor: index: x, value: y (MAC Only).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditKey">
            <summary>
            Editor: System keycode in value.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditIdle">
            <summary>
            Editor: no arguments. Be gentle!
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditTop">
            <summary>
            Editor: Window has topped, no arguments.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditSleep">
            <summary>
            Editor: Window goes to background.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effIdentify">
            <summary>
            Returns 'NvEf'.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetChunk">
            <summary>
            Host requests pointer to chunk into (void**)ptr, byteSize returned.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetChunk">
            <summary>
            Plug-in receives saved chunk, byteSize passed.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effProcessEvents">
            <summary>
            VstEvents* in "ptr".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effCanBeAutomated">
            <summary>
            Parameter index in "index".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effString2Parameter">
            <summary>
            Parameter index in "index", string in "ptr".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetNumProgramCategories">
            <summary>
            No arguments. This is for dividing programs into groups (like GM).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetProgramNameIndexed">
            <summary>
            Get program name of category "value", program "index" into "ptr".
            <para>Category (that is, "value") may be -1, in which case program indices are enumerated linearily (as usual); otherwise, each category starts over with index 0.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effCopyProgram">
            <summary>
            Copy current program to destination "index"
            <para>Note: implies setParameter connections, configuration.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effConnectInput">
            <summary>
            Input at "index" has been (dis-)connected; "value" == 0: disconnected, else connected.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effConnectOutput">
            <summary>
            Onput at "index" has been (dis-)connected; "value" == 0: disconnected, else connected.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetInputProperties">
            <summary>
            "index", VstPinProperties* in ptr, return != 0 means true.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetOutputProperties">
            <summary>
            "index", VstPinProperties* in ptr, return != 0 means true.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetPlugCategory">
            <summary>
            No parameter, return value is category.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetCurrentPosition">
            <summary>
            Realtime: for external dsp, see flag bits below.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetDestinationBuffer">
            <summary>
            Realtime: for external dsp, see flag bits below. returns float*.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effOfflineNotify">
            <summary>
            Offline: ptr = VstAudioFile array, value = count, index = start flag.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effOfflinePrepare">
            <summary>
            Offline: ptr = VstOfflineTask array, value = count.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effOfflineRun">
            <summary>
            Offline: ptr = VstOfflineTask array, value = count.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effProcessVarIo">
            <summary>
            VstVariableIo* in "ptr".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetSpeakerArrangement">
            <summary>
            VstSpeakerArrangement* pluginInput in "value"; VstSpeakerArrangement* pluginOutput in "ptr".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetBlockSizeAndSampleRate">
            <summary>
            Block size in "value", sampleRate in "opt"
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetBypass">
            <summary>
            On/Off in "value" (0 = off, 1 = on).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetEffectName">
            <summary>
            char* name (max 32 bytes) in "ptr".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetErrorText">
            <summary>
            char* text (max 256 bytes) in "ptr".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetVendorString">
            <summary>
            Fills "ptr" with a string identifying the vendor (max 64 char).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetProductString">
            <summary>
            Fills "ptr" with a string with product name (max 64 char).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetVendorVersion">
            <summary>
            Returns vendor-specific version.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effVendorSpecific">
            <summary>
            No definition, vendor specific handling.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effCanDo">
            <summary>
            "ptr" contains one of the 'plugCanDos' strings (e.g. "bypass").
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetTailSize">
            <summary>
            Returns tail size; 0 is default (return 1 for 'no tail').
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effIdle">
            <summary>
            Idle call in response to audioMasterneedIdle. Must return 1 to keep idle calls beeing issued.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetIcon">
            <summary>
            GUI: void* in "ptr", not yet defined.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetViewPosition">
            <summary>
            GUI: set view position (in window) to x "index" y "value"
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetParameterProperties">
            <summary>
            Of param "index", VstParameterProperties* in "ptr".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effKeysRequired">
            <summary>
            Returns 0: needs keys (default for 1.0 plugs), 1: don't need.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetVstVersion">
            <summary>
            Returns 2 for VST 2; older versions return 0; 2100 for VST 2.1...2400 for VST 2.4.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditKeyDown">
            <summary>
            Character in "index", virtual in "value", modifiers in "opt", return -1 if not used, return 1 if used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEditKeyUp">
            <summary>
            Character in "index", virtual in "value", modifiers in "opt", return -1 if not used, return 1 if used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetEditKnobMode">
            <summary>
            Mode in "value": 0: circular, 1:circular relativ, 2:linear.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetMidiProgramName">
            <summary>
            Passed "ptr" points to MidiProgramName struct.
            <para>Struct will be filled with information for 'thisProgramIndex'.
            Returns number of used programIndexes, if 0 is returned, no MidiProgramNames supported.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetCurrentMidiProgram">
            <summary>
            Returns the programIndex of the current program.
            <para>Passed "ptr" points to MidiProgramName struct, struct will be filled with information for the current program.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetMidiProgramCategory">
            <summary>
            Passed "ptr" points to MidiProgramCategory struct.
            <para>Struct will be filled with information for 'thisCategoryIndex'.
            Returns number of used categoryIndexes, if 0 is returned, no MidiProgramCategories supported.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effHasMidiProgramsChanged">
            <summary>
            Returns 1 if the MidiProgramNames or MidiKeyNames had changed on this channel, 0 otherwise. "ptr" ignored.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetMidiKeyName">
            <summary>
            Passed "ptr" points to MidiKeyName struct.
            <para>Struct will be filled with information for 'thisProgramIndex' and 'thisKeyNumber'.
            If keyName is "" the standard name of the key will be displayed. If 0 is returned, no MidiKeyNames are defined for 'thisProgramIndex'.
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effBeginSetProgram">
            <summary>
            Called before a new program is loaded.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effEndSetProgram">
            <summary>
            Called when the program is loaded.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetSpeakerArrangement">
            <summary>
            VstSpeakerArrangement** pluginInput in "value". VstSpeakerArrangement** pluginOutput in "ptr".
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effShellGetNextPlugin">
            <summary>
            This opcode is only called, if plugin is of type kPlugCategShell. Returns the next plugin's uniqueID.
            <para>"ptr" points to a char buffer of size 64, which is to be filled with the name of the plugin including the terminating zero.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effStartProcess">
            <summary>
            Called before the start of process call.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effStopProcess">
            <summary>
            Called after the stop of process call.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetTotalSampleToProcess">
            <summary>
            Called in offline (non RealTime) Process before process is called, indicates how many sample will be processed.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetPanLaw">
            <summary>
            PanLaw : Type (Linear, Equal Power,.. see enum PanLaw Type) in "value", Gain in "opt": for Linear : [1.0 means 0dB PanLaw], [~0.58 means -4.5dB], [0.5 means -6.02dB].
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effBeginLoadBank">
            <summary>
            Called before a Bank is loaded, "ptr" points to VstPatchChunkInfo structure.
            <para>Return -1 if the Bank can not be loaded, return 1 if it can be loaded else 0 (for compatibility).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effBeginLoadProgram">
            <summary>
            Called before a Program is loaded, "ptr" points to VstPatchChunkInfo structure.
            Return -1 if the Program can not be loaded, return 1 if it can be loaded else 0 (for compatibility).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effSetProcessPrecision">
            <summary>
            Sets the processing precision in "value" (0=32 bit, 1=64 bit).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetNumMidiInputChannels">
            <summary>
            Returns the number of used MIDI input channels (1-15).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effGetNumMidiOutputChannels">
            <summary>
            Returns the number of used MIDI output channels (1-15).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes.effNumOpcodes">
            <summary>
            Returns the number of available OpCodes
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags">
            <summary>
            <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/> bit flags.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsHasEditor">
            <summary>
            If set, is expected to react to editor messages.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsHasClip">
            <summary>
            Return &gt; 1. in getVu() if clipped.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsHasVu">
            <summary>
            Return vu value in getVu(); > 1. means clipped.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsCanMono">
            <summary>
            If numInputs == 2, makes sense to be used for mono in.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsCanReplacing">
            <summary>
            Supports in place output (processReplacing() exsists).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsProgramChunks">
            <summary>
            Program data are handled in formatless chunks.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsIsSynth">
            <summary>
            Plug-in is a synth (VSTi), Host may assign mixer channels for its outputs.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsNoSoundInStop">
            <summary>
            Plug-in does not produce sound when input is all silence.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsExtIsAsync">
            <summary>
            Plug-in is asynchronious.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsExtHasBuffer">
            <summary>
            Plug-in has a buffer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags.effFlagsCanDoubleReplacing">
            <summary>
            Plug-in supports double precision processing.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO">
            <summary>
            Common information structure about an editable parameter to a VST plugin parameter to be used with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetParamInfo(System.Int32,System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO.name">
            <summary>
            Name of the parameter (empty strings returned if a plugin does not provide these information).
            <para>Examples: Time, Gain, RoomType</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO.unit">
            <summary>
            Unit of the parameter.
            <para>Examples: sec, dB, type</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO.display">
            <summary>
            The current value in a readable format (empty strings returned if a plugin does not provide these information).
            <para>Examples: 0.5, -3, PLATE</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO.defaultValue">
            <summary>
            The default value (in the range of 0.0 and 1.0).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_PARAM_INFO.ToString">
            <summary>
            A description of the VST parameter value (name = display unit, e.g. Gain = 0.7 dB).
            </summary>
            <returns>A description of the VST parameter value (name = display unit, e.g. Gain = 0.7 dB).</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO">
            <summary>
            <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/> writes some information about a vstHandle returned by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/> to this BASS_VST_INFO structure.
            </summary>
            <remarks>Some words to the number of input/output channels:
            <para>VST effects that have no input channels (so called "Instruments") are not loaded by BASS_VST.  So you can assume chansIn and chansOut to be at least 1.</para>
            <para>Multi-channel streams should work correctly, if supported by a effect.
            If not, only the first chansIn channels are processed by the effect, the other ones stay unaffected.  
            The opposite, eg. assigning multi-channel effects to stereo channels, should be no problem at all.</para>
            <para>If mono effects are assigned to stereo channels, the result will be mono, expanded to both channels.
            This behaviour can be switched of using the BASS_VST_KEEP_CHANS in <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.channelHandle">
            <summary>
            The channelHandle as given to <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.uniqueID">
            <summary>
            A unique ID for the effect (the IDs are registered at Steinberg).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.effectName">
            <summary>
            The effect name (empty strings returned if a plugin does not provide these information).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.effectVersion">
            <summary>
            The effect version (example 0x01010000 for version 1.1.0.0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.effectVstVersion">
            <summary>
            The VST version, the effect was written for (example 0x02030000 for version 2.3.0.0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.hostVstVersion">
            <summary>
            The VST version supported by BASS_VST (e.g. 2.4).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.productName">
            <summary>
            The product name (may be empty).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.vendorName">
            <summary>
            The vendor name (may be empty).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.vendorVersion">
            <summary>
            The vendor-specific version number (example 0x01010000 for version 1.1.0.0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.chansIn">
            <summary>
            Maximum number of possible input channels (should be at least 1 here).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.chansOut">
            <summary>
            Maximum number of possible output channels (should be at least 1 here).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.initialDelay">
            <summary>
            For algorithms which need input in the first place, in number of samples.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.hasEditor">
            <summary>
            Has this plugin an embedded editor?
            <para>If <see langword="true"/>, the <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_EmbedEditor(System.Int32,System.IntPtr)"/> method can be called.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.editorWidth">
            <summary>
            Initial/current width of the embedded editor, see also BASS_VST_EDITOR_RESIZED in <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTAction"/>.
            <para>For a very few plugins, editorWidth and editorHeight may be 0 if the editor is not yet opened.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.editorHeight">
            <summary>
            Initial/current height of the embedded editor, see also BASS_VST_EDITOR_RESIZED in <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTAction"/>.
            <para>For a very few plugins, editorWidth and editorHeight may be 0 if the editor is not yet opened.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.aeffect">
            <summary>
            The underlying AEffect object (see the VST SDK).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.isInstrument">
            <summary>
            <see langword="true"/>=the VST plugin is an instrument, <see langword="false"/>=the VST plugin is an effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.dspHandle">
            <summary>
            The internal DSP handle.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.ToString">
            <summary>
            Returns a description string for the VST plugin info.
            </summary>
            <returns>Returns a description string for the VST plugin info (effectName, productName, vendorName).</returns>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM">
            <summary>
            This class is only needed if you subclass the audioMaster callback using BASS_VST_AUDIO_MASTER in the <see cref="T:Un4seen.Bass.AddOn.Vst.VSTPROC"/> (see the VST DSK for more information).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM.aeffect">
            <summary>
            Parameter forwarded from the audioMaster callback.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM.opcode">
            <summary>
            Parameter forwarded from the audioMaster callback (one of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM.index">
            <summary>
            Parameter forwarded from the audioMaster callback.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM.value">
            <summary>
            Parameter forwarded from the audioMaster callback.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM.ptr">
            <summary>
            Parameter forwarded from the audioMaster callback.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM.opt">
            <summary>
            Parameter forwarded from the audioMaster callback.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM.doDefault">
            <summary>
            Set this to 0 if you want to skip the normal BASS_VST audioMaster processing.
            In this case the return value is forwarded to the effect.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM.#ctor">
            <summary>
            Default Constructor.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT">
            <summary>
            Basic VST Effect class as returned in the aeffect member of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO"/> class as obtained by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.
            <para>See the VST SDK for more informaton.</para>
            </summary>
            <remarks>This class can only be used in the .Net Framework version 2.0 or above!
            <para>In order to retrieve an instance of this class you must first call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/> and then pass the <see cref="F:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO.aeffect"/> IntPtr to the
            static method <see cref="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.FromIntPtr(System.IntPtr)"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.magic">
            <summary>
            Must be kEffectMagic ('VstP')
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.dispatcher">
            <summary>
            Host to Plug-in dispatcher delegate method (see <see cref="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_Dispatcher"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.process">
            <summary>
            Accumulating process mode delegate method (deprecated in VST 2.4, use processReplacing instead - see <see cref="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_Process"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.setParameter">
            <summary>
            Set new value of automatable parameter (see <see cref="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_SetParameter"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.getParameter">
            <summary>
            Returns current value of automatable parameter (see <see cref="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_GetParameter"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.numPrograms">
            <summary>
            Number of programs.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.numParams">
            <summary>
            All programs are assumed to have numParams parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.numInputs">
            <summary>
            Number of audio inputs.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.numOutputs">
            <summary>
            Number of audio outputs.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.flags">
            <summary>
            Effect flags (see <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTAEffectFlags"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.resvd1">
            <summary>
            Reserved for Host, must be 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.resvd2">
            <summary>
            Reserved for Host, must be 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.initialDelay">
            <summary>
            For algorithms which need input in the first place (group delay or latency). This value should be initialized in a resume state.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.realQualities">
            <summary>
            Number of realtime qualities (0: realtime).
            Deprecated in VST 2.4!
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.offQualities">
            <summary>
            Number of offline qualities (0: realtime only).
            Deprecated in VST 2.4!
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.ioRatio">
            <summary>
            Input samplerate to output samplerate ratio, not used yet.
            Deprecated in VST 2.4!
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.obj">
            <summary>
            AudioEffect class pointer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.user">
            <summary>
            User-defined pointer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.uniqueID">
            <summary>
            Registered unique identifier (register it at Steinberg 3rd party support Web). This is used to identify a plug-in during save+load of preset and project.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.version">
            <summary>
            Plug-in version (example 0x1100 for version 1.1.0.0)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.processReplacing">
            <summary>
            Realtime process mode delegate method (see <see cref="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_ProcessReplacing"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.processDoubleReplacing">
            <summary>
            Process double-precision audio samples in replacing mode (see <see cref="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_ProcessDoubleProc"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.future">
            <summary>
            Reserved for future use (please zero)
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.FromIntPtr(System.IntPtr)">
            <summary>
            Returns an instance of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/> class derived from an IntPtr (aeffect) as obtained via <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.
            </summary>
            <param name="aeffect">The IntPtr to the AEffect structure as obtained from the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_INFO"/> class when calling <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</param>
            <returns>An instance of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/> class if successfull, otherwise <see langword="null"/> will be returned.</returns>
            <remarks>This method can only be used in the .Net Framework version 2.0 or above!</remarks>
            <example>
            <code lang="C#">
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                "C:\\VstPlugins\\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0);
            BASS_VST_INFO vstInfo = new BASS_VST_INFO();
            if (BassVst.BASS_VST_GetInfo(vstHandle, vstInfo))
            {
              BASS_VST_AEFFECT aeffect = BASS_VST_AEFFECT.FromIntPtr(vstInfo.aeffect);
              if (aeffect != null)
              {
                // now you might use the aeffect instance, e.g. retrieve the number of programs...
                int numPrograms = aeffect.numPrograms;
                ...
                // or call the dispatcher...
                string cmd = "bypass";
                GCHandle gch = GCHandle.Alloc(cmd, GCHandleType.Pinned);
                if (aeffect.dispatcher(vstInfo.aeffect, BASSVSTDispatcherOpCodes.effCanDo, 
                                        0, 0, gch.AddrOfPinnedObject(), 0.0f) != 0)
                {
                  int ret = aeffect.dispatcher(vstInfo.aeffect, BASSVSTDispatcherOpCodes.effSetBypass, 
                                               0, 1, IntPtr.Zero, 0.0f);
                  Console.WriteLine(ret.ToString());
                }
                gch.Free();
                ...
              }
            }
            </code>
            <code lang="VB">
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(_stream, 
                                "C:\VstPlugins\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0)
            Dim vstInfo As New BASS_VST_INFO()
            If BassVst.BASS_VST_GetInfo(vstHandle, vstInfo) Then
              Dim aeffect As BASS_VST_AEFFECT = BASS_VST_AEFFECT.FromIntPtr(vstInfo.aeffect)
              If Not (aeffect Is Nothing) Then
                ' now you might use the aeffect instance, e.g. retrieve the number of programs
                Dim numPrograms As Integer = aeffect.numPrograms
                ...
                ' or call the dispatcher...
                Dim cmd As String = "bypass"
                Dim gch As GCHandle = GCHandle.Alloc(cmd, GCHandleType.Pinned)
                If aeffect.dispatcher(vstInfo.aeffect, BASSVSTDispatcherOpCodes.effCanDo, 
                                      0, 0, gch.AddrOfPinnedObject(), 0F) &lt;&gt; 0 Then
                  Dim ret As Integer = aeffect.dispatcher(vstInfo.aeffect, BASSVSTDispatcherOpCodes.effSetBypass, 
                                                          0, 1, IntPtr.Zero, 0F)
                  ...
                  Console.WriteLine(ret.ToString())
                End If
                gch.Free()
                ...
              End If 
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.ToString">
            <summary>
            Returns the description of this instance (In=x, Out=y).
            </summary>
            <returns>Returns the description of this instance (In=x, Out=y).</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.GetCurrentProgramName">
            <summary>
            Returns the currently selected program name of the VST effect.
            </summary>
            <returns>The name of the selected program - or an empty string, if the effect has no programs.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.GetProgramName(System.Int32)">
            <summary>
            Returns a specific program name of the VST effect.
            </summary>
            <param name="program">The number of the program to return (must be between 0 .. numPrograms-1).</param>
            <returns>The name of the selected program - or an empty string, if the effect has no programs.</returns>
            <remarks>Retrieving a program name other than the current one enforces to change the current program inernally. 
            So this method first retrieves the current program number, then changes the program in order to get that name and afterwards restores the currect selected program.
            But since changing the program is enforced even for a short period of time, calling this method on a channel based VST effect might produce some sound disturbance.
            So it is a good idea to either call this method on a non-channel vstHandle (<see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/> called with chan=0) or make sure the channel is currently not playing.
            </remarks>
            <example>
            Calling on a non-channel vstHandle:
            <code lang="C#">
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(0, 
                                "C:\\VstPlugins\\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0);
            BASS_VST_INFO vstInfo = new BASS_VST_INFO();
            if ( BassVst.BASS_VST_GetInfo(vstHandle, vstInfo) )
            {
              if (vstInfo.aeffect != IntPtr.Zero)
              {
                BASS_VST_AEFFECT aeffect = BASS_VST_AEFFECT.FromIntPtr(vstInfo.aeffect);
                // list all available programs
                for (int i=0; i&lt;aeffect.numPrograms; i++)
                  Console.WriteLine( aeffect.GetProgramName(i) );
              }
            }
            </code>
            <code lang="VB">
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(0, "C:\VstPlugins\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0)
            Dim vstInfo As New BASS_VST_INFO()
            If BassVst.BASS_VST_GetInfo(vstHandle, vstInfo) Then
              If vstInfo.aeffect &lt;&gt; IntPtr.Zero Then
                Dim aeffect As BASS_VST_AEFFECT = BASS_VST_AEFFECT.FromIntPtr(vstInfo.aeffect)
                ' list all available programs
                Dim i As Integer
                For i = 0 To aeffect.numPrograms - 1
                  Console.WriteLine(aeffect.GetProgramName(i))
                Next i
              End If
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.GetProgramNames">
            <summary>
            Returns an array of strings representing the available program names.
            </summary>
            <returns>An array of strings representing the available program names.</returns>
            <remarks>Retrieving a program name other than the current one enforces to change the current program inernally. 
            So this method first retrieves the current program number, then changes the program in order to get that name and afterwards restores the currect selected program.
            But since changing the program is enforced even for a short period of time, calling this method on a channel based VST effect might produce some sound disturbance.
            So it is a good idea to either call this method on a non-channel vstHandle (<see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/> called with chan=0) or make sure the channel is currently not playing.
            </remarks>
            <example>
            Calling on a non-channel vstHandle:
            <code lang="C#">
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(0, 
                                "C:\\VstPlugins\\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0);
            BASS_VST_INFO vstInfo = new BASS_VST_INFO();
            if (BassVst.BASS_VST_GetInfo(vstHandle, vstInfo))
            {
              if (vstInfo.aeffect != IntPtr.Zero)
              {
                // get all available programs
                string[] progs = aeffect.GetProgramNames();
                if (progs != null)
                {
                  for (int i = 0; i &lt; progs.Length; i++)
                    Console.WriteLine(String.Format( "{0}: {1}", i, progs[i]));
                }
              }
            }
            </code>
            <code lang="VB">
            vstHandle = BassVst.BASS_VST_ChannelSetDSP(0, 
                                "C:\VstPlugins\Ambience.dll", BASSVSTDsp.BASS_VST_DEFAULT, 0)
            Dim vstInfo As New BASS_VST_INFO()
            If BassVst.BASS_VST_GetInfo(vstHandle, vstInfo) Then
              If vstInfo.aeffect &lt;&gt; IntPtr.Zero Then
                ' get all available programs
                Dim progs As String() = aeffect.GetProgramNames()
                If Not (progs Is Nothing) Then
                  Dim i As Integer
                  For i = 0 To progs.Length - 1
                    Console.WriteLine([String].Format("{0}: {1}", i, progs(i)))
                  Next i
                End If
              End If
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.GetCurrentProgram">
            <summary>
            Returns the currently selected program number of the VST effect.
            </summary>
            <returns>The name of the selected program - or an empty string, if the effect has no programs.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.SetCurrentProgram(System.Int32)">
            <summary>
            Sets the selected program number of the VST effect.
            </summary>
            <param name="program">The number of the program to set (must be between 0 .. numPrograms-1).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT.SetCurrentProgramName(System.String)">
            <summary>
            Sets (overwrites) the current selected program name of the VST effect.
            </summary>
            <param name="name">The new name of the program to set (max. 24 characters long!).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>This changes only the name to the VST effect program name, but does not change the program istself.
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.VSTPROC">
            <summary>
            User defined VST callback method to be used with <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetCallback(System.Int32,Un4seen.Bass.AddOn.Vst.VSTPROC,System.IntPtr)"/>.
            </summary>
            <param name="vstHandle">The VST plugin handle as returned from <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_ChannelSetDSP(System.Int32,System.String,Un4seen.Bass.AddOn.Vst.BASSVSTDsp,System.Int32)"/>.</param>
            <param name="action">The action parameter, one of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTAction"/> values (see below).</param>
            <param name="param1">The first parameter (see the VST SDK for further details).</param>
            <param name="param2">The second parameter (see the VST SDK for further details).</param>
            <param name="user">The user parameter as specified in the <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetCallback(System.Int32,Un4seen.Bass.AddOn.Vst.VSTPROC,System.IntPtr)"/> call.</param>
            <returns>Unless defined otherwise, the callback function should always return 0.</returns>
            <remarks>
            <para>The callback function is called with one of the following actions (see <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTAction"/>):
            <list type="table">
            <listheader><term>Actions:</term><description></description></listheader>
            <item><term>BASS_VST_PARAM_CHANGED</term><description>Some parameters are changed by the editor opened by <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_EmbedEditor(System.Int32,System.IntPtr)"/>, NOT called if you call <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_SetParam(System.Int32,System.Int32,System.Single)"/>.
            <para>param1=oldParamNum, param2=newParamNum; might be used to detect changes in the number of parameters in case the VST uses dynamic parameter numbers.</para>
            </description></item>
            <item><term>BASS_VST_EDITOR_RESIZED</term><description>The embedded editor window should be resized, the new width/height can be found in param1/param2 and in <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</description></item>
            <item><term>BASS_VST_AUDIO_MASTER</term><description>Can be used to subclass the audioMaster callback (see the VST SDK), param1 is a pointer to a <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AUDIO_MASTER_PARAM"/> structure.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            private VSTPROC _myVstProc; // keep the callback delegate in a global member
            ...
            // your VST callback - referenced below by BASS_VST_SetCallback()
            private int YourVstProc(int vstHandle, BASSVSTAction action, int param1, int param2, IntPtr user)
            {
              switch (action)
              {
                case BASSVSTAction.BASS_VST_PARAM_CHANGED:
                  // we get notified that the user has changed some sliders in the editor - 
                  // do what to do here ...
                  break;
                case BASSVSTAction.BASS_VST_EDITOR_RESIZED:
                  // the editor window requests a new size,
                  // maybe we should resize the window the editor is embedded in?
                  // the new width/height can be found in param1/param2
                  break;
                case BASSVSTAction.BASS_VST_AUDIO_MASTER:
                  // this is only for people familiar with the VST SDK,
                  // param1 is a pointer to a BASS_VST_AUDIO_MASTER_PARAM structure
                  // which contains all information needed
                  break;
              }
              return 0;
            }
            ...
            // open the VST editor (e.g. if we are inside a System.Windows.Forms.Form)
            BassVst.BASS_VST_EmbedEditor(vstHandle, this.Handle);
            // we want to get notified for parameter changes etc.
            _myVstProc = new VSTPROC(YourVstProc);
            BassVst.BASS_VST_SetCallback(vstHandle, _myVstProc, IntPtr.Zero);
            </code>
            <code lang="VB">
            Private _myVstProc As VSTPROC ' keep the callback delegate in a global member
            ...
            ' your VST callback - referenced below by BASS_VST_SetCallback()
            Private Function YourVstProc(vstHandle As Integer, action As BASSVSTAction, param1 As Integer, param2 As Integer, user As IntPtr) As Integer
              Select Case action
                Case BASSVSTAction.BASS_VST_PARAM_CHANGED
                  ' we get notified that the user has changed some sliders in the editor - 
                  ' do what to do here ...
                Case BASSVSTAction.BASS_VST_EDITOR_RESIZED
                  ' the editor window requests a new size,
                  ' maybe we should resize the window the editor is embedded in?
                  ' the new width/height can be found in param1/param2
                Case BASSVSTAction.BASS_VST_AUDIO_MASTER
                  ' this is only for people familiar with the VST SDK,
                  ' param1 is a pointer to a BASS_VST_AUDIO_MASTER_PARAM structure
                  ' which contains all information needed
              End Select
              Return 0
            End Function
            ...
            ' open the VST editor (e.g. if we are inside a System.Windows.Forms.Form)
            BassVst.BASS_VST_EmbedEditor(vstHandle, Me.Handle)
            ' we want to get notified for parameter changes etc.
            _myVstProc = New VSTPROC(AddressOf YourVstProc)
            BassVst.BASS_VST_SetCallback(vstHandle, _myVstProc, IntPtr.Zero)
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_Dispatcher">
            <summary>
            The general VST plugin dispatcher callback delegate).
            </summary>
            <param name="effect">The aeffect as retrieved via <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</param>
            <param name="opCode">The operation code (OpCode), one of the <see cref="T:Un4seen.Bass.AddOn.Vst.BASSVSTDispatcherOpCodes"/> values.</param>
            <param name="index">The index parameter (see the VST SDK for further details).</param>
            <param name="value">The value parameter (see the VST SDK for further details).</param>
            <param name="ptr">The user parameter, a pointer to an element, e.g. a string or structure (see the VST SDK for further details).</param>
            <param name="opt">The optional parameter (see the VST SDK for further details).</param>
            <returns>See Steinberg VST SDK documentaion for more information.</returns>
            <remarks>
            <para>This delegate is only used internally within the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/> class and can not be used directly! It is also only supported in the .Net Framework version 2.0 or above!</para>
            <para>See Steinberg VST SDK documentaion for more information.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_Process">
            <summary>
            The VST plugin process callback delegate. Accumulating process mode is deprecated in VST 2.4, use <see cref="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_ProcessReplacing"/> instead.
            <para>See Steinberg VST SDK documentaion for more information.</para>
            </summary>
            <param name="effect">The aeffect as retrieved via <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</param>
            <param name="inputs">An array of pointers to the data (e.g. for stereo channels this will be an IntPtr to an array of 2 element containing the IntPtr to the float values).</param>
            <param name="outputs">An array of pointers to where the data can be written to (e.g. for stereo channels this will be an IntPtr to an array of 2 element containing the IntPtr to the float values).</param>
            <param name="sampleframes">Number of sample frames to process.</param>
            <remarks>
            <para>This delegate is only used internally within the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/> class and can not be used directly! It is also only supported in the .Net Framework version 2.0 or above!</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_ProcessReplacing">
            <summary>
            The VST plugin process callback delegate (non accumulating).
            <para>See Steinberg VST SDK documentaion for more information.</para>
            </summary>
            <param name="effect">The aeffect as retrieved via <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</param>
            <param name="inputs">An array of pointers to the data (e.g. for stereo channels this will be an IntPtr to an array of 2 element containing the IntPtr to the float values).</param>
            <param name="outputs">An array of pointers to where the data can be written to (e.g. for stereo channels this will be an IntPtr to an array of 2 element containing the IntPtr to the float values).</param>
            <param name="sampleframes">Number of sample frames to process.</param>
            <remarks>
            <para>This delegate is only used internally within the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/> class and can not be used directly! It is also only supported in the .Net Framework version 2.0 or above!</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_ProcessDoubleProc">
            <summary>
            The VST plugin process callback delegate (non accumulating, double-precision).
            <para>See Steinberg VST SDK documentaion for more information.</para>
            </summary>
            <param name="effect">The aeffect as retrieved via <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</param>
            <param name="inputs">An array of pointers to the data (e.g. for stereo channels this will be an IntPtr to an array of 2 element containing the IntPtr to the float values).</param>
            <param name="outputs">An array of pointers to where the data can be written to (e.g. for stereo channels this will be an IntPtr to an array of 2 element containing the IntPtr to the float values).</param>
            <param name="sampleframes">Number of sample frames to process.</param>
            <remarks>
            <para>This delegate is only used internally within the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/> class and can not be used directly! It is also only supported in the .Net Framework version 2.0 or above!</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_SetParameter">
            <summary>
            Set new value of automatable parameter.
            </summary>
            <param name="effect">The aeffect as retrieved via <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</param>
            <param name="index">The parameter index.</param>
            <param name="parameter">The new parameter value (a float value between 0.0 and 1.0 inclusive).</param>
            <returns>See Steinberg VST SDK documentaion for more information.</returns>
            <remarks>
            <para>This delegate is only used internally within the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/> class and can not be used directly! It is also only supported in the .Net Framework version 2.0 or above!</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Vst.VST_AEFFECT_GetParameter">
            <summary>
            Gets a value of automatable parameter.
            </summary>
            <param name="effect">The aeffect as retrieved via <see cref="M:Un4seen.Bass.AddOn.Vst.BassVst.BASS_VST_GetInfo(System.Int32,Un4seen.Bass.AddOn.Vst.BASS_VST_INFO)"/>.</param>
            <param name="index">The parameter index.</param>
            <returns>The parameter value (a float value between 0.0 and 1.0 inclusive).</returns>
            <remarks>
            <para>Returns the value of parameter index (a float value between 0.0 and 1.0 inclusive).</para>
            <para>This delegate is only used internally within the <see cref="T:Un4seen.Bass.AddOn.Vst.BASS_VST_AEFFECT"/> class and can not be used directly! It is also only supported in the .Net Framework version 2.0 or above!</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.WaDsp.BassWaDsp">
            <summary>
            BASS.NET API wrapper for BASS_WADSP.DLL
            <para>Requires: bass_wadsp.dll - Winamp DSP plugin support Add-On - shipped with the BASS.NET API.</para>
            </summary>
            <remarks>
            <para>BassWaDsp is an BASS.NET API extention to the BASS audio library, providing a set of functions for calling Winamp DSP plugins.</para>
            <para>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.!</para>
            <para>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.</para>
            <para>Here is a list of Winamp DSP plugins, which should work fine:
            <code lang="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)
            </code>
            </para>
            <para>These plugins for example will only work, if you implement an intermediate ring-buffer between BASS and BASS_WADSP by yourself:
            <code lang="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)
            </code>
            </para>
            <para>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.</para>
            <para>To use the BASS_WADSP add-on you need to perform the following steps:
            <list type="table">
            <item><term>1.</term><description>Call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Init(System.IntPtr)"/> at the beginning of your application after you have initialized Bass with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>2.</term><description>Call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/> - to load a Winamp DSP plugin.</description></item>
            <item><term>3.</term><description>Call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Start(System.Int32,System.Int32,System.Int32)"/> - to start the loaded Winamp DSP plugin.</description></item>
            <item><term>4.</term><description>Create a Bass stream...e.g. with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>5.</term><description>Call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ChannelSetDSP(System.Int32,System.Int32,System.Int32)"/> - to set the Winamp DSP to the created stream. This assigns a normal Bass DSP (like you would do with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/>) but now uses the Winamp DSP internally.
            <para>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.</para></description></item>
            <item><term>6.</term><description>Play the channel like normal...and at the end call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ChannelRemoveDSP(System.Int32)"/> (if BASS_STREAM_AUTOFREE was specified at stream creation or if you call <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/> this will be done automatically and removing the DSP(s) is not even needed).</description></item>
            <item><term>7.</term><description>You might repeat with 4.</description></item>
            <item><term>8.</term><description>When a Winamp DSP is not needed anymore, call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Stop(System.Int32)"/> - to stop the Winamp DSP plugin and call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Start(System.Int32,System.Int32,System.Int32)"/> to start it again.
            <para>If you don't want the DSP anymore at all, you might also need to call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ChannelRemoveDSP(System.Int32)"/> in addition, if you have assigned multiple DSPs to the stream in parallel.</para></description></item>
            <item><term>9.</term><description>Call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_FreeDSP(System.Int32)"/> - to unload a Winamp DSP plugin and free all resources (this also stops the DSP and removes it out of memory).</description></item>
            <item><term>10.</term><description>At the end of your application make sure to call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Free"/> - to free all resources.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetVersion">
            <summary>
            Retrieves the version number of the BASS_WADSP.DLL that is loaded.
            </summary>
            <returns>The BASS_WADSP version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASS_WADSP supports all the BASS_WADSP functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASSWADSPVERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            Checking the major version only:
            <code lang="C#">
            if ( Utils.HighWord(BassWaDsp.BASS_WADSP_GetVersion()) != BassWaDsp.BASSWADSPVERSION )
            {
              MessageBox.Show(this, "Wrong BassWaDsp Version!");
            }
            </code>
            <code lang="VB">
            If Utils.HighWord(BassWaDsp.BASS_WADSP_GetVersion()) &lt;&gt; BassWaDsp.BASSWADSPVERSION Then
              MessageBox.Show(Me, "Wrong BassWaDsp Version!")
            End If
            </code>
            Checking for full version "2.4.1.3":
            <code>
            if (BassWaDsp.BASS_WADSP_GetVersion() &lt; Utils.MakeLong(0x0103, 0x0204))
            {
              MessageBox.Show(this, "Wrong BassWaDsp Version!");
            }
            </code>
            <code lang="VB">
            If BassWaDsp.BASS_WADSP_GetVersion() &lt; Utils.MakeLong(&amp;H103, &amp;H204) Then
              MessageBox.Show(Me, "Wrong BassWaDsp Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASS_WADSP.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASS_FX version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASS_WADSP supports all the BASS_WADSP functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            <code lang="C#">
            Version expectedVersion = new Version(2, 4);
            if (BassWaDsp.BASS_WADSP_GetVersion(2) &lt; expectedVersion)
            {
              MessageBox.Show( this, "Wrong BassWaDsp Version!" );
            }
            </code>
            <code lang="VB">
            Dim expectedVersion As New Version(2, 4)
            If BassWaDsp.BASS_WADSP_GetVersion(2) &lt; expectedVersion Then
              MessageBox.Show(Me, "Wrong BassWaDsp Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Init(System.IntPtr)">
            <summary>
            Initializes BASS_WADSP, call this right after you have called <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.
            </summary>
            <param name="win">The main window handle of your application (e.g. <c>this.Handle</c>) - or <see cref="F:System.IntPtr.Zero"/> for console applications.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ALREADY</term><description><see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Init(System.IntPtr)"/> has already been called and can not be called again.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Free">
            <summary>
            Frees all resources of BASS_WADSP - call this method at the end of your application.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Init(System.IntPtr)"/> has not been called before.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_FreeDSP(System.Int32)">
            <summary>
            Frees and unloads a Winamp DSP library from memory which has been loaded with <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/> before.
            </summary>
            <param name="plugin">The plugin handle to unload (as returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The Winamp DSP will automatically be stopped, if it was started before.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetFakeWinampWnd(System.Int32)">
            <summary>
            Gets the window handle of the fake Winamp window which has been created internally when a Winamp DSP was loaded with <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <returns>An IntPtr representing the window handle of the fake Winamp window or <see cref="F:System.IntPtr.Zero"/> if an error occured. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other problem (the internal fake Winamp window could not be created).</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_SetSongTitle(System.Int32,System.String)">
            <summary>
            Set the song title for a loaded Winamp DSP plugin.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="title">The song title to set.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Some Winamp DSPs require or simply display a current song title. Use this method to set this song title. It will then be used in the internal Window message handler for the related fake Winamp window.
            In most cases it is not required to set any song title at all - however streaming DSP might use this for updating it's metadata.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_SetFileName(System.Int32,System.String)">
            <summary>
            Set the file name for a loaded Winamp DSP plugin.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="file">The file name to set.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Some Winamp DSPs require or simply display a current playing file name. Use this method to set this file name. It will then be used in the internal Window message handler for the related fake Winamp windows.
            In most cases it is not required to set any file name at all.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)">
            <summary>
            Loads a Winamp DSP library.
            </summary>
            <param name="dspfile">The fully qualified path and name of the Winamp DSP library you want to load (e.g. "C:\\Program Files\\Winamp\\Plugins\\dsp_ss.dll").
            Both Unicode as well as Ansi filenames are supported, whereas Unicode is tried first.</param>
            <param name="x">The X-coordinate of the fake Winamp window to create.</param>
            <param name="y">The Y-coordinate of the fake Winamp window to create.</param>
            <param name="width">The width of the fake Winamp window to create.</param>
            <param name="height">The height of the fake Winamp window to create.</param>
            <param name="proc">An optional <see cref="T:Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC"/> which should be used instead of the internal window process message handler. Or <see langword="null"/>, if you want BASS_WADSP to handle it by default.</param>
            <returns>The handle of the loaded plugin, which is needed in all further method calls.</returns>
            <remarks>Most Winamp DSP plugins do save their location and visibility state in an own .ini file. So the parameters specifying the location and size are in most cases only uses for the first time a plugin is used. So don't worry, if they do not take effect.
            <para>In most cases the internal Windows message process handler should be fine and sufficient - however, if you encounter problems you might implement your own.</para>
            <para>Make sure to call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_FreeDSP(System.Int32)"/> when the Winamp DSP is not needed anymore and should be unloaded and removed from memory.</para>
            <para>Winamp DSPs are designed to run only for one stream. So if you have multiple streams or multiple players in your application and you want to use the same Winamp DSP you need to create temporary copies of the library files (e.g. copy "dsp_ss.dll" to "dsp_ss2.dll", "dsp_ss3.dll" etc.).
            Then you should load each individual library copy with this function. This will enable you to load multiple instances of the same Winamp DSP. Each loaded instance can then be used for individual streams.</para>
            <para>NOTE: Do not use this method while you have already loaded the same Winamp plugin, as this might result in any unexpected behavior, since some Winamp plugins might crash when they are loaded twice.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The <paramref name="dspfile"/> can not be found or loaded.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The <paramref name="dspfile"/> doesn't seem to be a Winamp DSP library file.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other problem (the internal fake Winamp window could not be created).</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int dspPluginA = BassWaDsp.BASS_WADSP_Load("dsp_test.dll", 5, 5, 100, 100, null);
            if (dspPluginA != 0)
            {
              BassWaDsp.BASS_WADSP_Start(dspPluginA, 0, 0);
            }
            </code>
            <code lang="VB">
            Dim dspPluginA As Integer = BassWaDsp.BASS_WADSP_Load("dsp_test.dll", 5, 5, 100, 100, Nothing)
            If dspPluginA &lt;&gt; 0 Then
              BassWaDsp.BASS_WADSP_Start(dspPluginA, 0, 0)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Config(System.Int32)">
            <summary>
            Invokes the config dialog of a loaded and started Winamp DSP.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The Winamp DSP must have been started via <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Start(System.Int32,System.Int32,System.Int32)"/> prior to calling this method.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            <item><term>BASS_ERROR_START</term><description><see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Start(System.Int32,System.Int32,System.Int32)"/> has not been called before.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Start(System.Int32,System.Int32,System.Int32)">
            <summary>
            Starts a Winamp DSP.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="module">The module number to start (the first module is 0).</param>
            <param name="handle">The BASS channel handle (HSTREAM, HMUSIC, or HRECORD) for which to start the Winamp DSP. Or 0 if not applicable.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Winamp DSPs might provide multiple independent modules. You might get the number of available modules with <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetModuleCount(System.Int32)"/> or the name of a certain module with <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetModule(System.Int32)"/>. 
            However, you can only start one module at a time for a certain Winamp DSP.
            The stream channel is only needed here because some Winamp DSPs might already request some information, which can be provided in this case. However, if you don't have created a stream so far, just leave the value to 0 and all is fine.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> or the <paramref name="handle"/> is not a valid handle.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="module"/> is not a valid module.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>The plugin/module was already started (you need to call <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Stop(System.Int32)"/> before starting it again).</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other plugin problem (the plugin could not be initialized).</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Stop(System.Int32)">
            <summary>
            Stops a Winamp DSP.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>If the Winamp DSP was already assigned to a channel using <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ChannelSetDSP(System.Int32,System.Int32,System.Int32)"/> the DSP will be removed automatically from the channel when it is stopped.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            <item><term>BASS_ERROR_START</term><description><see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Start(System.Int32,System.Int32,System.Int32)"/> has not been called before.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_SetChannel(System.Int32,System.Int32)">
            <summary>
            Assigns a channel to a Winamp DSP.
            <para>You only need this method, if you do NOT use the default <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ChannelSetDSP(System.Int32,System.Int32,System.Int32)"/> method, but use your own DSP callback (see <see cref="T:Un4seen.Bass.DSPPROC"/>).</para>
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="handle">The BASS channel handle (HSTREAM, HMUSIC, or HRECORD) which to assign to the Winamp DSP.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>You must use this method when implementing your own <see cref="T:Un4seen.Bass.DSPPROC"/> callback before starting to play the channel.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> or <paramref name="handle"/> is not a valid handle.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            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);
            }
            </code>
            <code lang="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 &lt;&gt; 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
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetModule(System.Int32)">
            <summary>
            Returns the currently selected plugin module of a Winamp DSP.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <returns>The selected module number (first = 0), or -1, if an error occured. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            <item><term>BASS_ERROR_START</term><description><see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Start(System.Int32,System.Int32,System.Int32)"/> was not called (no module selected so far).</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ChannelSetDSP(System.Int32,System.Int32,System.Int32)">
            <summary>
            Assigns a loaded Winamp DSP to a standard BASS channel as a new DSP.
            <para>This method is pretty close to the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/> method (which is in fact internally used) but instead of setting up a user DSP method the Winamp DSP will be set up.</para>
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="handle">The BASS channel handle (HSTREAM, HMUSIC, or HRECORD) which to assign to the Winamp DSP.</param>
            <param name="priority">The priority of the new DSP, which determines it's position in the Bass DSP chain - DSPs with higher priority are called before those with lower.</param>
            <returns>If succesful, then the new DSP's handle (HDSP) is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <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.!
            <para>The Winamp DSP and 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.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> or <paramref name="handle"/> is not a valid handle.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            private int _streamA = 0;
            private int _dspPluginA = 0;
            ...
            _dspPluginA = BassWaDsp.BASS_WADSP_Load("dsp_test.dll", 5, 5, 100, 100, null);
            BassWaDsp.BASS_WADSP_Start(_dspPluginA, 0, 0);
            ...
            // create the stream
            _streamA = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                            BASSFlag.BASS_DEFAULT | BASSFlag.BASS_STREAM_AUTOFREE);
            // play the stream
            if (_streamA != 0 )
            {
            	// the next will setup a DSP on the playing channel to the selected Winamp DSP
            	int hDsp = BassWaDsp.BASS_WADSP_ChannelSetDSP(this._dspPluginA, _streamA, 1);
            	// and finally play it
            	Bass.BASS_ChannelPlay(_streamA, false);
            }
            </code>
            <code lang="VB">
            Private _streamA As Integer = 0
            Private _dspPluginA As Integer = 0
            ...
            _dspPluginA = BassWaDsp.BASS_WADSP_Load("dsp_test.dll", 5, 5, 100, 100, Nothing)
            BassWaDsp.BASS_WADSP_Start(_dspPluginA, 0, 0)
            ...
            ' create the stream
            _streamA = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                            BASSFlag.BASS_DEFAULT Or BASSFlag.BASS_STREAM_AUTOFREE)
            ' play the stream
            If _streamA &lt;&gt; 0 Then
              ' the next will setup a DSP on the playing channel to the selected Winamp DSP
              Dim hDsp As Integer = BassWaDsp.BASS_WADSP_ChannelSetDSP(Me._dspPluginA, _streamA, 1)
              ' and finally play it
              Bass.BASS_ChannelPlay(_streamA, False)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ChannelRemoveDSP(System.Int32)">
            <summary>
            Removes a Winamp DSP from the Bass DSP chain which had been set up with <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ChannelSetDSP(System.Int32,System.Int32,System.Int32)"/> before.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <returns><see langword="true"/>, if successfully removed, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesDSP(System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The IntPtr to the memory block containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which should always be the number of bytes specified when calling this method. Or 0, if an error occured.</returns>
            <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.!
            <para>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.</para>
            </remarks>
            <example>
            <code lang="C#">
            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);
            }
            </code>
            <code lang="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 &lt;&gt; 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
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesDSP(System.Int32,System.Byte[],System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The array of byte values containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which should always be the number of bytes specified when calling this method. Or 0, if an error occured.</returns>
            <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.!
            <para>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.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesDSP(System.Int32,System.Int16[],System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The array of Int16 values containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which should always be the number of bytes specified when calling this method. Or 0, if an error occured.</returns>
            <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.!
            <para>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.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesDSP(System.Int32,System.Int32[],System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The array of Int32 values containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which should always be the number of bytes specified when calling this method. Or 0, if an error occured.</returns>
            <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.!
            <para>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.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesDSP(System.Int32,System.Single[],System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The array of float values containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which should always be the number of bytes specified when calling this method. Or 0, if an error occured.</returns>
            <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.!
            <para>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.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesSTREAM(System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks or in a user defined <see cref="T:Un4seen.Bass.STREAMPROC"/>).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The pointer to the memory block containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which might be different from the number of bytes given. 
            A Winamp DSP might return at max. twice the number of bytes but not less than half the number of bytes.</returns>
            <remarks>This method can be used to support Winamp DSPs which modify the samplerate, pitch etc. - meaning modifying the number of bytes given.
            However, this is not a simple task to do so, since Bass does not expect this. In order to handle a modified number of bytes you might need to implement a complex intermediate 'ring-buffer' in between Bass and the Winamp DSP.
            Note: Some Winamp DSPs work with a fixed number of 1152 samples only (meaning 1152 * chans * 2 bytes!) - this might also bring in some additional complexity.
            Implementing and correctly handling this intermediate 'buffer' is up to you and not handled by BASS_WADSP - however, this method is the right method to use for such a case, since it returns exactly what the Winamp DSP returned.
            <para>So make sure, that the buffer is at least twice as big as the samples it contains when you call this method, so that the Winamp DSP might have enough space to store it's returned samples into it.</para>
            <para>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.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesSTREAM(System.Int32,System.Byte[],System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks or in a user defined <see cref="T:Un4seen.Bass.STREAMPROC"/>).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The array of byte values containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which might be different from the number of bytes given. 
            A Winamp DSP might return at max. twice the number of bytes but not less than half the number of bytes.</returns>
            <remarks>This method can be used to support Winamp DSPs which modify the samplerate, pitch etc. - meaning modifying the number of bytes given.
            However, this is not a simple task to do so, since Bass does not expect this. In order to handle a modified number of bytes you might need to implement a complex intermediate 'ring-buffer' in between Bass and the Winamp DSP.
            Note: Some Winamp DSPs work with a fixed number of 1152 samples only (meaning 1152 * chans * 2 bytes!) - this might also bring in some additional complexity.
            Implementing and correctly handling this intermediate 'buffer' is up to you and not handled by BASS_WADSP - however, this method is the right method to use for such a case, since it returns exactly what the Winamp DSP returned.
            <para>So make sure, that the buffer is at least twice as big as the samples it contains when you call this method, so that the Winamp DSP might have enough space to store it's returned samples into it.</para>
            <para>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.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesSTREAM(System.Int32,System.Int16[],System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks or in a user defined <see cref="T:Un4seen.Bass.STREAMPROC"/>).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The array of Int16 values containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which might be different from the number of bytes given. 
            A Winamp DSP might return at max. twice the number of bytes but not less than half the number of bytes.</returns>
            <remarks>This method can be used to support Winamp DSPs which modify the samplerate, pitch etc. - meaning modifying the number of bytes given.
            However, this is not a simple task to do so, since Bass does not expect this. In order to handle a modified number of bytes you might need to implement a complex intermediate 'ring-buffer' in between Bass and the Winamp DSP.
            Note: Some Winamp DSPs work with a fixed number of 1152 samples only (meaning 1152 * chans * 2 bytes!) - this might also bring in some additional complexity.
            Implementing and correctly handling this intermediate 'buffer' is up to you and not handled by BASS_WADSP - however, this method is the right method to use for such a case, since it returns exactly what the Winamp DSP returned.
            <para>So make sure, that the buffer is at least twice as big as the samples it contains when you call this method, so that the Winamp DSP might have enough space to store it's returned samples into it.</para>
            <para>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.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesSTREAM(System.Int32,System.Int32[],System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks or in a user defined <see cref="T:Un4seen.Bass.STREAMPROC"/>).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The array of Int32 values containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which might be different from the number of bytes given. 
            A Winamp DSP might return at max. twice the number of bytes but not less than half the number of bytes.</returns>
            <remarks>This method can be used to support Winamp DSPs which modify the samplerate, pitch etc. - meaning modifying the number of bytes given.
            However, this is not a simple task to do so, since Bass does not expect this. In order to handle a modified number of bytes you might need to implement a complex intermediate 'ring-buffer' in between Bass and the Winamp DSP.
            Note: Some Winamp DSPs work with a fixed number of 1152 samples only (meaning 1152 * chans * 2 bytes!) - this might also bring in some additional complexity.
            Implementing and correctly handling this intermediate 'buffer' is up to you and not handled by BASS_WADSP - however, this method is the right method to use for such a case, since it returns exactly what the Winamp DSP returned.
            <para>So make sure, that the buffer is at least twice as big as the samples it contains when you call this method, so that the Winamp DSP might have enough space to store it's returned samples into it.</para>
            <para>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.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_ModifySamplesSTREAM(System.Int32,System.Single[],System.Int32)">
            <summary>
            Invokes the internal 'ModifySamples' method of the Winamp DSP directly (which is only needed for user defined <see cref="T:Un4seen.Bass.DSPPROC"/> callbacks or in a user defined <see cref="T:Un4seen.Bass.STREAMPROC"/>).
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="buffer">The array of float values containing the sample data to modify.</param>
            <param name="length">The number of bytes contained in the buffer.</param>
            <returns>The number of bytes modified, which might be different from the number of bytes given. 
            A Winamp DSP might return at max. twice the number of bytes but not less than half the number of bytes.</returns>
            <remarks>This method can be used to support Winamp DSPs which modify the samplerate, pitch etc. - meaning modifying the number of bytes given.
            However, this is not a simple task to do so, since Bass does not expect this. In order to handle a modified number of bytes you might need to implement a complex intermediate 'ring-buffer' in between Bass and the Winamp DSP.
            Note: Some Winamp DSPs work with a fixed number of 1152 samples only (meaning 1152 * chans * 2 bytes!) - this might also bring in some additional complexity.
            Implementing and correctly handling this intermediate 'buffer' is up to you and not handled by BASS_WADSP - however, this method is the right method to use for such a case, since it returns exactly what the Winamp DSP returned.
            <para>So make sure, that the buffer is at least twice as big as the samples it contains when you call this method, so that the Winamp DSP might have enough space to store it's returned samples into it.</para>
            <para>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.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetNamePtr(System.Int32)">
            <summary>
            
            </summary>
            <param name="plugin"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetName(System.Int32)">
            <summary>
            Returns the name of the loaded Winamp DSP plugin.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <returns>The name of the plugin on success or <see langword="null"/> on error. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetModuleCount(System.Int32)">
            <summary>
            Returns the number of modules contained in the loaded Winamp DSP.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <returns>The number of available modules or -1 if an error occured. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Winamp DSPs might implement multiple different modules within the same DSP plugin.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetModuleNamePtr(System.Int32,System.Int32)">
            <summary>
            
            </summary>
            <param name="plugin"></param>
            <param name="module"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetModuleName(System.Int32,System.Int32)">
            <summary>
            Returns the name of a certain module of a loaded Winamp DSP.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <param name="module">The module number to get the name from (the first module is 0).</param>
            <returns>The name of the module on success or <see langword="null"/> on error (or if no module with that number exists). Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Winamp DSPs might provide multiple independent modules. You might get the number of available modules with <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetModuleCount(System.Int32)"/>.
            However, you can only start one module at a time for a certain Winamp DSP.
            <para>You can use this method in a setup dialog to list all the available modules of a Winamp DSP.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>The <paramref name="plugin"/> is not a valid plugin handle.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="module"/> number is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            string name;
            for (int n=0; (name = BassWaDsp.BASS_WADSP_GetModuleName(plugin, n)) != null; n++)
            {
              Console.WriteLine(name);
            }
            </code>
            <code lang="VB">
            Dim n As Integer = 0
            Dim name As String = ""
            While Not (name Is Nothing)
              name = BassWaDsp.BASS_WADSP_GetModuleName(plugin, n)
              n += 1
              If Not (name Is Nothing) Then
                Console.WriteLine(name)
              End If
            End While
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_GetModuleNames(System.Int32)">
            <summary>
            Returns an array of strings containing all module names of a Winamp DSP.
            </summary>
            <param name="plugin">The plugin handle (returned by <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).</param>
            <returns>All names of all modules contained in the Winamp DSP.</returns>
            <remarks>You can use this method in a setup dialog to list all the available modules of a Winamp DSP.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoFree">
            <summary>
            Free the temporary plugin info resources.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Should and must be called after <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoLoad(System.String)"/> when the plugin info is not needed anymore.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoLoad(System.String)"/> has not been called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoLoad(System.String)">
            <summary>
            Loads a Winamp DSP library into the temporary plugin info workspace.
            </summary>
            <param name="dspfile">The fully qualified path and name of the Winamp DSP library you want to load (e.g. "C:\\Program Files\\Winamp\\Plugins\\dsp_ss.dll").
            Both Unicode as well as Ansi filenames are supported, whereas Unicode is tried first.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The temporary plugin info workspace can be used to retrieve general information about a Winamp DSP without starting it.
            <para>This method will be used in the same way <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/> is used.</para>
            <para>The BASS.NET API offers an additional helper class <see cref="T:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP"/> which internally uses the temporary plugin info workspace and makes it obsolete to use this method directly.</para>
            <para>NOTE: Do not use this method while you have already loaded the same Winamp plugin (e.g. via <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>) as this might result in any unexpected behavior, since some Winamp plugins might crash when they are loaded twice.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The <paramref name="dspfile"/> can not be found or loaded.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The <paramref name="dspfile"/> doesn't seem to be a Winamp DSP library file.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoGetNamePtr">
            <summary>
            
            </summary>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoGetName">
            <summary>
            Returns the name of the Winamp DSP plugin which has been loaded into the temporary plugin info workspace.
            </summary>
            <returns>The name of the plugin on success or <see langword="null"/> on error. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The BASS.NET API offers an additional helper class <see cref="T:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP"/> which internally uses the temporary plugin info workspace and makes it obsolete to use these methods directly.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoLoad(System.String)"/> has not been called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoGetModuleCount">
            <summary>
            Returns the number of modules contained in the Winamp DSP which has been loaded into the temporary plugin info workspace.
            </summary>
            <returns>The number of available modules or -1 if an error occured. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Winamp DSPs might implement multiple different modules within the same DSP plugin.
            <para>The BASS.NET API offers an additional helper class <see cref="T:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP"/> which internally uses the temporary plugin info workspace and makes it obsolete to use these methods directly.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoLoad(System.String)"/> has not been called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoGetModuleNamePtr(System.Int32)">
            <summary>
            
            </summary>
            <param name="module"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoGetModuleName(System.Int32)">
            <summary>
            Returns the name of a certain module of a Winamp DSP which has been loaded into the temporary plugin info workspace.
            </summary>
            <param name="module">The module number to get the name from (the first module is 0).</param>
            <returns>The name of the module on success or <see langword="null"/> on error (or if no module with that number exists). Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Winamp DSPs might provide multiple independent modules. You might get the number of available modules with <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoGetModuleCount"/>.
            <para>You can use this method in a setup dialog to list all the available modules of a Winamp DSP.</para>
            <para>The BASS.NET API offers an additional helper class <see cref="T:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP"/> which internally uses the temporary plugin info workspace and makes it obsolete to use these methods directly.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoLoad(System.String)"/> has not been called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="module"/> number is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            string name;
            for (int n=0; (name = BassWaDsp.BASS_WADSP_PluginInfoGetModuleName(n)) != null; n++)
            {
              Console.WriteLine(name);
            }
            </code>
            <code lang="VB">
            Dim n As Integer = 0
            Dim name As String = ""
            While Not (name Is Nothing)
              name = BassWaDsp.BASS_WADSP_PluginInfoGetModuleName(n)
              n += 1
              If Not (name Is Nothing) Then
                Console.WriteLine(name)
              End If
            End While
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_PluginInfoGetModuleNames">
            <summary>
            Returns an array of strings containing all module names of a Winamp DSP which has been loaded into the temporary plugin info workspace.
            </summary>
            <returns>All names of all modules contained in the Winamp DSP.</returns>
            <remarks>You can use this method in a setup dialog to list all the available modules of a Winamp DSP.
            <para>The BASS.NET API offers an additional helper class <see cref="T:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP"/> which internally uses the temporary plugin info workspace and makes it obsolete to use these methods directly.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASSWADSPVERSION">
            <summary>
            Current BASS_WADSP version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc">
            <summary>
            Communication to Winamp is done via the classic Win32 Message API. Most DSP plugins use this to ask for certain values.
            These definitions are the most commonly used messages, which might be handled by the fake winamp window which we create.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC_GETOUTPUTTIME">
            <summary>
            IPC_GETOUTPUTTIME returns the position in milliseconds of the current song (mode = 0), 
            or the song length, in seconds (mode = 1).Returns -1 if not playing or error.
            <para>int res = SendMessage(hwnd_winamp,WM_WA_IPC,mode,IPC_GETOUTPUTTIME);</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC_ISPLAYING">
            <summary>
            IPC_ISPLAYING returns the status of playback.
            If it returns 1, it is playing. if it returns 3, it is paused, if it returns 0, it is not playing.
            <para>int res = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISPLAYING);</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC_GETVERSION">
            <summary>
            Version will be 0x20yx for winamp 2.yx. 
            Versions previous to Winamp 2.0 typically use 0x1zyx for 1.zx versions. Weird, I know.
            <para>int version = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVERSION);</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC_STARTPLAY">
            <summary>
            Using IPC_STARTPLAY is like hitting 'Play' in Winamp, mostly.
            <para>SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_STARTPLAY);</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC_GETINFO">
            <summary>
            IPC_GETINFO returns info about the current playing song. The value it returns depends on the value of 'mode' (wParam):
            <list type="table">
            <listheader><term>Mode</term><description>Meaning</description></listheader>
            <item><term>0</term><description>Samplerate (i.e. 44100)</description></item>
            <item><term>1</term><description>Bitrate  (i.e. 128)</description></item>
            <item><term>2</term><description>Channels (i.e. 2)</description></item>
            </list>
            <para>int inf=SendMessage(hwnd_winamp,WM_WA_IPC,mode,IPC_GETINFO);</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC_GETLISTLENGTH">
            <summary>
            IPC_GETLISTLENGTH returns the length of the current playlist, in tracks.
            <para>int length = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTLENGTH);</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC_GETLISTPOS">
            <summary>
            IPC_GETLISTPOS returns the playlist position [index].
            <para>int pos=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTPOS);</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC_GETPLAYLISTFILE">
            <summary>
            IPC_GETPLAYLISTFILE gets the filename of the playlist entry [index]. Returns a pointer to it. Returns <see langword="null"/> on error.
            <para>char *name=SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTFILE);</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC_GETPLAYLISTTITLE">
            <summary>
            IPC_GETPLAYLISTTITLE gets the title of the playlist entry [index]. Returns a pointer to it. Returns <see langword="null"/> on error.
            <para>char *name=SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTTITLE);</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC">
            <summary>
            Is defined as Win32's WM_USER an. When a message of this value arrives, we know, that we might handle it by ourself.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP">
            <summary>
            General helper class to retrieve information about a Winamp DSP.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.File">
            <summary>
            Gets the fully qualified path and name of the Winamp DSP file.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.Description">
            <summary>
            Gets the description of the Winamp DSP.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.ModuleCount">
            <summary>
            Gets the number of modules contained in this Winamp DSP.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.ModuleNames">
            <summary>
            Gets an array of available module names.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.#ctor">
            <summary>
            Prevent this constructor from being visible.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.#ctor(System.String)">
            <summary>
            Default constructor initialising and retrieving information about a Winamp DSP.
            </summary>
            <param name="fileName">The fully qualified path and name of the file to be constructed.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.Load">
            <summary>
            Loads the Winamp DSP plugin.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>Make sure to call <see cref="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.Unload"/> when you don't need it anymore in order to unload and free the plugin.</remarks>
        </member>
        <member name="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.IsLoaded">
            <summary>
            Is the Winamp DSP plugin already loaded?
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.Unload">
            <summary>
            Unloads the Winamp DSP plugin.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>This must be called once you are done with the DSP to free all resources.
            If the DSP is already started it will also be stopped.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.Start(System.Int32,System.Int32,System.Int32)">
            <summary>
            Starts a certain module of a Wianmp DSP plugin and assignes it to a channel as a new DSP.
            </summary>
            <param name="module">The module index to start (must be between 0 and <see cref="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.ModuleCount"/>-1).</param>
            <param name="channel">The BASS stream channel handle to assign it to.</param>
            <param name="prio">The DSP priority to use when assigning the DSP.</param>
            <returns>The DSP handle on success - else 0 is returned.</returns>
            <remarks>
            The Winamp DSP must have been loaded with <see cref="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.Load"/> before you can use this method!
            Call <see cref="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.Stop"/> if you don't need this module anymore and to remove the DSP from the channel.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.Stop">
            <summary>
            Stops the currently started Winamp DSP plugin module.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>Make sure to call this method once you <see cref="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.Start(System.Int32,System.Int32,System.Int32)"/>ed it.</remarks>
        </member>
        <member name="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.IsStarted">
            <summary>
            Is the Winamp DSP plugin already started and assigned to a channel?
            </summary>
        </member>
        <member name="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.StartedModule">
            <summary>
            Returns the currently selected and started module index - or -1 if no module is started.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.SetSongTitle(System.String)">
            <summary>
            Sets a global song title for the loaded and started Winamp DSP.
            </summary>
            <param name="title">The song title to set.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            Some Winamp DSPs require or simply display a current song title. Use this method to set this song title. 
            It will then be used in the internal Window message handler for all fake Winamp windows.
            In most cases it is not required to set any song title at all.
            For streaming DSPs (e.g. SHOUTcast Source DSP) use this function to set the title metadata.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.SetFilename(System.String)">
            <summary>
            Sets a global song title for the loaded and started Winamp DSP.
            </summary>
            <param name="filename">The song title to set.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            Some Winamp DSPs require or simply display a current playing file name. Use this method to set this file name. 
            It will then be used in the internal Window message handler for all fake Winamp windows.
            In most cases it is not required to set any file name at all.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.ShowEditor">
            <summary>
            Shows the Winamp DSP config dialog.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>The Winamp DSP must have been loaded and started.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.ToString">
            <summary>
            A description of the Winamp DSP info object (description - filename).
            </summary>
            <returns>A description of the Winamp DSP info object (description - filename).</returns>
        </member>
        <member name="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.PlugIns">
            <summary>
            Gets the list of available Winamp DSPs (as loaded by <see cref="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.FindPlugins(System.String)"/>).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.FindPlugins(System.String)">
            <summary>
            Finds all Winamp DSP plugins contained in a given directory and stores all related information in the <see cref="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.PlugIns"/> list.
            </summary>
            <param name="path">The directory in which to search for Winamp DSP plugins.</param>
            <remarks>Using this method subsequently is allowed and ensures, that new Winamp plugins can be loaded and already loaded Winamp plugins are not loaded twice.
            <para>Use the <see cref="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.PlugIns"/> property to access all found Winamp DSP plugins.</para>
            <para>Note, that when calling this method multiple times only newly found Winamp plugins are added to the <see cref="P:Un4seen.Bass.AddOn.WaDsp.WINAMP_DSP.PlugIns"/> list, already existing plugins will not be loaded or rescanned again.</para>
            </remarks>
            <example>
            <code lang="C#">
            WINAMP_DSP.FindPlugins("C:\\Program Files\\Winamp\\Plugins");
            this.listBox1.Items.AddRange(WINAMP_DSP.PlugIns);
            ...
            // and display all modules out of a certain dsp...
            WINAMP_DSP dsp = (WINAMP_DSP)this.listBox1.SelectedItem;
            if (dsp.modulecount &gt; 0)
            {
              // display all modules
              this.comboBox1.Items.Clear();
              this.comboBox1.Items.AddRange(dsp.modulenames);
              this.comboBox1.SelectedIndex = 0;
            }
            </code>
            <code lang="VB">
            WINAMP_DSP.BASS_WADSP_FindPlugins("C:\Program Files\Winamp\Plugins")
            Me.listBox1.Items.AddRange(WINAMP_DSP.PlugIns)
            ...
            ' and display all modules out of a certain dsp...
            Dim dsp As WINAMP_DSP = CType(Me.listBox1.SelectedItem, WINAMP_DSP)
            If dsp.modulecount &gt; 0 Then
              ' display all modules
              Me.comboBox1.Items.Clear()
              Me.comboBox1.Items.AddRange(dsp.modulenames)
              Me.comboBox1.SelectedIndex = 0
            End If
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC">
            <summary>
            User defined Window Message Process Handler (to be used with <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/>).
            <para>Normally this is not needed, since BASS_WADSP implements a default handler which emulates most functions needed by Winamp DSPs.
            However, some very special Winamp DSPs might require something special. So you might implement your own windows message handler here.</para>
            </summary>
            <param name="hwnd">The Window handle we are dealing with - which is the hidden fake window which BASS_WADSP has created during <see cref="M:Un4seen.Bass.AddOn.WaDsp.BassWaDsp.BASS_WADSP_Load(System.String,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.AddOn.WaDsp.WINAMPWINPROC)"/> and which emulates a Winamp 1.x class.</param>
            <param name="msg">The window message send. You typically might only react on WM_USER messages (also defined as <see cref="F:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc.BASS_WADSP_IPC"/>).</param>
            <param name="wParam">The wParam message parameter see the Winamp SDK for further details.</param>
            <param name="lParam">The lParam message parameter see the Winamp SDK for further details.</param>
            <returns>See the Winamp SDK documentation for information.</returns>
            <remarks>
            <para>The <see cref="T:Un4seen.Bass.AddOn.WaDsp.BASSWADSPIpc"/> enumeration defines all lParam values which you should typically handle. See the Winamp SDK for further details.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.WebM.BassWebM">
            <summary>
            BASS.NET API wrapper for BASSWEBM.DLL
            <para>Requires: basswebm.dll - Open Web Media Project (WebM) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSWEBM is an extension to the BASS audio library, enabling the playing of WebM (Open Web Media) data in HTML5 video and audio containers.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="track"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Creates a sample stream from a WebM file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            </param>
            <param name="track">The track to play from the file... 1 = first, 0 = first playable track. 
            When requesting the first playable track, all tracks will be checked in numerical order until a playable one is found. 
            The active track is available via the BASS_ATTRIB_WEBM_TRACK attribute.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works almost in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.
            <para>WebM is a subset of the Matroska file format. WebM files can contain Vorbis or Opus audio data, while Matroska also supports other codecs including AAC / AC3 / MP3. 
            BASS includes support for Vorbis and MP3, and AAC on some platforms, but add-ons are required (loaded via BASS_PluginLoad) to support other codecs, eg. BASSOPUS for Opus. 
            Not all Matroska features are supported but most Matroska files should be playable.</para>
            <para>To stream a file from the internet, use <see cref="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)"/>. To stream from other locations, see <see cref="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="track"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Creates a sample stream from a WebM memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            <list type="table">
            <item><term>BASS_WEBM_DOP</term><description>Produce DSD-over-PCM data (with 0x05/0xFA markers). DSD-over-PCM data is 24-bit, so the BASS_SAMPLE_FLOAT flag is required.</description></item>
            <item><term>BASS_WEBM_RAW</term><description>Produce raw WebM data instead of PCM. The WebM data is in blocks of 8 bits (1 byte) per-channel with the MSB being first/oldest. WebM data is not playable by BASS, so the BASS_STREAM_DECODE flag is required.</description></item>
            </list>
            </param>
            <param name="track">The track to play from the file... 1 = first, 0 = first playable track. 
            When requesting the first playable track, all tracks will be checked in numerical order until a playable one is found. 
            The active track is available via the BASS_ATTRIB_WEBM_TRACK attribute.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works almost in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.
            <para>WebM is a subset of the Matroska file format. WebM files can contain Vorbis or Opus audio data, while Matroska also supports other codecs including AAC / AC3 / MP3. 
            BASS includes support for Vorbis and MP3, and AAC on some platforms, but add-ons are required (loaded via BASS_PluginLoad) to support other codecs, eg. BASSOPUS for Opus. 
            Not all Matroska features are supported but most Matroska files should be playable.</para>
            <para>To stream a file from the internet, use <see cref="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)"/>. To stream from other locations, see <see cref="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)">
            <summary>
            Creates a sample stream from a WebM file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            <list type="table">
            <item><term>BASS_WEBM_DOP</term><description>Produce DSD-over-PCM data (with 0x05/0xFA markers). DSD-over-PCM data is 24-bit, so the BASS_SAMPLE_FLOAT flag is required.</description></item>
            <item><term>BASS_WEBM_RAW</term><description>Produce raw WebM data instead of PCM. The WebM data is in blocks of 8 bits (1 byte) per-channel with the MSB being first/oldest. WebM data is not playable by BASS, so the BASS_STREAM_DECODE flag is required.</description></item>
            </list>
            </param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <param name="track">The track to play from the file... 1 = first, 0 = first playable track. 
            When requesting the first playable track, all tracks will be checked in numerical order until a playable one is found. 
            The active track is available via the BASS_ATTRIB_WEBM_TRACK attribute.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works almost in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.
            <para>WebM is a subset of the Matroska file format. WebM files can contain Vorbis or Opus audio data, while Matroska also supports other codecs including AAC / AC3 / MP3. 
            BASS includes support for Vorbis and MP3, and AAC on some platforms, but add-ons are required (loaded via BASS_PluginLoad) to support other codecs, eg. BASSOPUS for Opus. Not all Matroska features are supported but most Matroska files should be playable.</para>
            <para>To stream a file from the internet, use <see cref="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)"/>. To stream from other locations, see <see cref="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr,System.Int32)"/>.</para>
            </remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <param name="track"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <param name="track"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.BASS_WEBM_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr,System.Int32)">
            <summary>
            Creates a sample stream from a WebM file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            </param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="track">The track to play from the file... 1 = first, 0 = first playable track. 
            When requesting the first playable track, all tracks will be checked in numerical order until a playable one is found. 
            The active track is available via the BASS_ATTRIB_WEBM_TRACK attribute.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works almost in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WebM.BassWebM.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the basswebm.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.WebM.BassWebM.SupportedStreamName">
            <summary>
            Supported file format name of the basswebm.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.WebM.BassWebM.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.WebM.BassWebM.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.WebM.BassWebM.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Winamp.BassWinamp">
            <summary>
            BASS.NET API wrapper for BASS_WINAMP.DLL
            <para>Requires: bass_winamp.dll - Winamp Input plugins support Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BassWinamp is an extention to the BASS audio library, providing a set of functions for adding Winamp Input plugins support. This adds more format support for the Bass library.</para>
            <para>Currently the new BASS plugin system is not supported. So you need to call the <see cref="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_StreamCreate(System.String,Un4seen.Bass.BASSFlag)"/> method here directly.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetIsSeekable(System.Int32)">
            <summary>
            Returns weather the Winamp input plugin supports seeking?
            </summary>
            <param name="handle">The handle of the winamp input plugin.</param>
            <returns><see langword="true"/> if the input plugin support seeking, else <see langword="false"/> is returned.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetUsesOutput(System.Int32)">
            <summary>
            Returns weather the Winamp input plugin make use of the winamp output?
            </summary>
            <param name="handle">The handle of the winamp input plugin.</param>
            <returns><see langword="true"/> if the input plugin uses output, else <see langword="false"/> is returned.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetFileInfoIntPtr(System.String,System.IntPtr,System.Int32@)">
            <summary>
            
            </summary>
            <param name="file"></param>
            <param name="title"></param>
            <param name="lenms"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetFileInfo(System.String,System.String@,System.Int32@)">
            <summary>
            Returns information about a given file.
            </summary>
            <param name="file">The name of the file to retrieve the information from.</param>
            <param name="title">Returns the title of the given file.</param>
            <param name="lenms">Returns the length of the given file in milliseconds.</param>
            <returns><see langword="true"/> if the information was retrieved successfully, else <see langword="false"/> is returned.</returns>
            <example>
            <code lang="C#">
            int len = 0;
            string title = String.Empty;
            if ( BassWinamp.BASS_WINAMP_GetFileInfo("testfile.mp3", ref title, ref len) )
            {
            	Console.WriteLine( "Title={0}, Length={1}ms", title, len );
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_InfoDlg(System.String,System.IntPtr)">
            <summary>
            Shows the Winamp input plugin information dialog for a given file (like pressing Alt+3 in Winamp).
            </summary>
            <param name="file">The name of the file to retrieve the information from.</param>
            <param name="win">The application's main window... IntPtr.Zero = the current foreground window (use this for console applications, or pass this.Handle).</param>
            <returns><see langword="true"/> if the info dialog was called successfully, else <see langword="false"/> is returned.</returns>
            <example>
            Show the winamp info dialog related to a file:
            <code lang="C#">
            int pluginHandle = BassWinamp.BASS_WINAMP_LoadPlugin( @"C:\Programme\Winamp\Plugins\in_mp3.dll" );
            if (pluginHandle != 0)
            {
            	BassWinamp.BASS_WINAMP_InfoDlg( "test.mp3", this.Handle );
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetNamePtr(System.Int32)">
            <summary>
            Internal only.
            </summary>
            <param name="handle"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetName(System.Int32)">
            <summary>
            Gets the name of the winamp input plugin.
            </summary>
            <param name="handle">The handle of the winamp input plugin.</param>
            <returns>The name of the plugin, or <see langword="null"/> if the call failed.</returns>
            <example>
            Get the name of the winamp input plugin:
            <code lang="C#">
            int pluginHandle = BassWinamp.BASS_WINAMP_LoadPlugin( @"C:\Programme\Winamp\Plugins\in_mp3.dll" );
            if (pluginHandle != 0)
            {
            	Console.WriteLine( BassWinamp.BASS_WINAMP_GetName(pluginHandle) );
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetExtentions(System.Int32)">
            <summary>
            Gets the supported file filter extensions of the given winamp input plug-in.
            </summary>
            <param name="handle">The handle of the winamp input plugin.</param>
            <returns>Returns a pointer to a list of null-terminated strings (ending with a double null) representing the supported extensions of the winamp input plugin.
            <para>Use <see cref="M:Un4seen.Bass.Utils.IntPtrToArrayNullTermAnsi(System.IntPtr)"/> to convert this to an array of string.
            Or use <see cref="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetExtentionsFilter(System.Int32)"/> instead.</para>
            </returns>
            <remarks>
            Example of how extentions are returned:
            "Layer 3 MPEG\0*.mp3;*.mp2\0Layer 2 MPEG\0*.mp2\0Layer 1 MPEG\0*.mpg\0\0"
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetExtentionsFilter(System.Int32)">
            <summary>
            Gets the supported file filter extensions of the given winamp input plug-in.
            </summary>
            <param name="handle">The handle of the winamp input plugin.</param>
            <returns>Returns a file filter string in the format:
            "Layer 3 MPEG|*.mp3;*.mp2|Layer 2 MPEG|*.mp2|Layer 1 MPEG|*.mpg". 
            Returns NULL, if an error occurred.
            </returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetExtentions(System.Int32)"/> internally.</remarks>
            <example>
            <code lang="C#">
            int pluginHandle = BassWinamp.BASS_WINAMP_LoadPlugin( @"C:\Programme\Winamp\Plugins\in_mp3.dll" );
            if (pluginHandle != 0)
            {
            	Console.WriteLine( BassWinamp.BASS_WINAMP_GetExtentionsFilter(pluginHandle) );
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_FindPluginsPtr(System.String,Un4seen.Bass.AddOn.Winamp.BASSWINAMPFindPlugin)">
            <summary>
            
            </summary>
            <param name="pluginpath"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_FindPlugins(System.String,Un4seen.Bass.AddOn.Winamp.BASSWINAMPFindPlugin)">
            <summary>
            Gets a list of all winamp input plug-ins in a given directory.
            <para>If the BASS_WINAMP_FIND_COMMALIST flag was set it will automatically be removed.</para>
            </summary>
            <param name="pluginpath">The path of the directory to search in.</param>
            <param name="flags">Any combination of the following (see <see cref="T:Un4seen.Bass.AddOn.Winamp.BASSWINAMPFindPlugin"/>):
            <list type="table">
            <item><term>BASS_WINAMP_FIND_INPUT</term><description>Find input plug-ins. Should and must always be specified.</description></item>
            <item><term>BASS_WINAMP_FIND_RECURSIVE</term><description>Recursively loop through all sub-directories as well.</description></item>
            </list>
            </param>
            <returns>A string array of the plug-in list or <see langword="null"/> if no plug-in could be found.</returns>
            <example>
            <code lang="C#">
            string[] waPlugIns = BassWinamp.BASS_WINAMP_FindPlugins( @"C:\Programme\Winamp\Plugins", BASSWINAMPFindPlugin.BASS_WINAMP_FIND_INPUT | BASSWINAMPFindPlugin.BASS_WINAMP_FIND_RECURSIVE );
            foreach (string waPlugIn in waPlugIns)
            {
            	Console.WriteLine( waPlugIn );
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_LoadPlugin(System.String)">
            <summary>
            Loads a Winamp input plug-in.
            </summary>
            <param name="file">The file name of the plug-in to load.</param>
            <returns>The handle of the loaded winamp input plug-in or 0 if it failed.</returns>
            <example>
            <code lang="C#">
            int pluginHandle = BassWinamp.BASS_WINAMP_LoadPlugin( @"C:\Programme\Winamp\Plugins\in_mp3.dll" );
            </code>
            Typically you will use one of the returned strings of <see cref="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_FindPlugins(System.String,Un4seen.Bass.AddOn.Winamp.BASSWINAMPFindPlugin)"/>.
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_UnloadPlugin(System.Int32)">
            <summary>
            Unloads a Winamp input plug-in which had been loaded via <see cref="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_LoadPlugin(System.String)"/> before.
            </summary>
            <param name="handle">The handle of the winamp input plugin.</param>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_GetVersion(System.Int32)">
            <summary>
            Gets the version of a loaded Winamp input plug-in.
            </summary>
            <param name="handle">The handle of the winamp input plugin.</param>
            <returns>The version number. Use <see cref="M:Un4seen.Bass.Utils.LowWord(System.Int32)"/> resp. <see cref="M:Un4seen.Bass.Utils.HighWord(System.Int32)"/> to get the major resp. minor version number.</returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_ConfigPlugin(System.Int32,System.IntPtr)">
            <summary>
            Shows the configuration dialog of the loaded Winamp input plug-in.
            </summary>
            <param name="handle">The handle of the winamp input plugin.</param>
            <param name="win">The application's main window... IntPtr.Zero = the current foreground window (use this for console applications, or pass this.Handle).</param>
            <example>
            <code lang="C#">
            int pluginHandle = BassWinamp.BASS_WINAMP_LoadPlugin( @"C:\Programme\Winamp\Plugins\in_mp3.dll" );
            if (pluginHandle != 0)
            {
            	BassWinamp.BASS_WINAMP_ConfigPlugin( pluginHandle, this.Handle );
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_AboutPlugin(System.Int32,System.IntPtr)">
            <summary>
            Shows the about dialog of the loaded Winamp input plug-in.
            </summary>
            <param name="handle">The handle of the winamp input plugin.</param>
            <param name="win">The application's main window... IntPtr.Zero = the current foreground window (use this for console applications, or pass this.Handle).</param>
            <example>
            <code lang="C#">
            int pluginHandle = BassWinamp.BASS_WINAMP_LoadPlugin( @"C:\Programme\Winamp\Plugins\in_mp3.dll" );
            if (pluginHandle != 0)
            {
            	BassWinamp.BASS_WINAMP_AboutPlugin( pluginHandle, this.Handle );
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_StreamCreateAnsi(System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            The WINAMP Add-On ONLY SUPPORTS ANSI FILENAMES!
            </summary>
            <param name="file"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_StreamCreate(System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a stream from a Winamp input plug-in.
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
            <example>
            Load the winamp mp3 input plugin and play a file:
            <code lang="C#">
            int pluginHandle = BassWinamp.BASS_WINAMP_LoadPlugin( @"C:\Programme\Winamp\Plugins\in_mp3.dll" );
            if (pluginHandle != 0)
            {
            	int waStream = BassWinamp.BASS_WINAMP_StreamCreate( "test.mp3", BASSFlag.BASS_SAMPLE_SOFTWARE | BASSFlag.BASS_STREAM_AUTOFREE );
            	if (waStream != 0)
            	{
            		Bass.BASS_ChannelPlay( waStream, false );
            	}
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns>TRUE, if the module could be loaded successfully, else FALSE.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns>TRUE, if the module could be loaded successfully, else FALSE.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.LoadMe"/>.
            </summary>
            <returns>TRUE, if the module has been unloaded successfully, else FALSE.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Winamp.BASSWINAMPFindPlugin">
            <summary>
            Flags to be used with <see cref="M:Un4seen.Bass.AddOn.Winamp.BassWinamp.BASS_WINAMP_FindPlugins(System.String,Un4seen.Bass.AddOn.Winamp.BASSWINAMPFindPlugin)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Winamp.BASSWINAMPFindPlugin.BASS_WINAMP_FIND_INPUT">
            <summary>
            Find input plug-ins. Should and must always be specified.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Winamp.BASSWINAMPFindPlugin.BASS_WINAMP_FIND_RECURSIVE">
            <summary>
            Recursively loop through all sub-directories as well.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Winamp.BASSWINAMPFindPlugin.BASS_WINAMP_FIND_COMMALIST">
            <summary>
            Return the result as a comma seperated list in the format: item1,item2,"item with , commas",item4,"item with space"
            <para>If not specified a list of null-terminated Ansi strings will be returned ending with a double-null.</para>
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Wma.BassWma">
            <summary>
            BASS.NET API wrapper for BASSWMA.DLL
            <para>Requires: basswma.dll - Windows Media Audio Format (WMA) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            <para>The Windows Media Format modules are also required to be installed on the user's system. They are installed with Windows Media Player, so will already be on most users' systems, but they can also be installed separately (WMFDIST.EXE).</para>
            </summary>
            <remarks>
            <para>BASSWMA is an extension to the BASS audio library, enabling the playback of WMA files and network streams. The audio tracks of WMV files can also be played. WMA file encoding and network broadcasting functions are also provided.</para>
            <para>The WMA format is used in very much the same way as any of the built-in BASS stream formats - simply call the WMA stream creation function instead of the BASS built-in functions. The BASS plugin system (see <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>) is also supported for local WMA files.</para>
            <para>More information can be found on <a href="http://www.microsoft.com/windows/windowsmedia">Microsoft Windows Media — Your Digital Entertainment Resource</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFileIStream(System.Int32,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="istream"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateIStream(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from an IStream object.
            </summary>
            <param name="istream">A pointer to an IStream object.</param>
            <param name="offset">Unused... set to 0.</param>
            <param name="length">Unused... set to 0.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The bitrate (amongst other things) can be retrieved through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA). When retrieving tags, a pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</para>
            <para>A description of the codec used by the file is also available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA_CODEC). 2 null-terminated UTF-8 strings are returned, with the 1st string being the name of the codec, and the 2nd containing additional information like what VBR setting was used.</para>
            <para>The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>. Until the whole file has been streamed, whatever length the file's header says is returned, which may or may not be exact.</para>
            <para>Although the Windows Media modules uses it's own internet streaming code (not BASS's), the BASS_CONFIG_NET_TIMEOUT (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) config option does have effect when opening WMA streams. None of the other NET config options apply.</para>
            <para>With local files, <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> works the same as with the BASS built-in stream formats. But when internet streaming, the Windows Media modules uses it's own streaming routines.
            The download progress of an internet streamed file can be retrieved with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> (BASS_FILEPOS_DOWNLOAD). The file size (BASS_FILEPOS_END) can also be retrieved, but getting the size of internet streamed files requires Windows Media 9 to be installed. 
            The decode position (BASS_FILEPOS_CURRENT) is not available. When streaming a file from the internet, it is not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> with BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>When streaming a file from the internet, it's not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>With Windows Media versions prior to 9 (and when streaming from the internet), WMA decoding is performed in a separate thread, so the CPU used to decode a file/stream during playback will not be included in the <see cref="M:Un4seen.Bass.Bass.BASS_GetCPU"/> return value.</para>
            <para>When using the BASS_STREAM_DECODE flag, it's not possible to play the stream. Because the decoded sample data is not outputted, "decoding channels" can still be used when there is no output device (using the "no sound" device with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>).</para>
            <para>The sample rate of local files can be altered with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. But the playback rate of internet streams should not be changed, because they are decoded at a fixed rate - the rate required to sustain playback at normal speed. So increasing the rate will result in playback stalling.</para>
            <para>Using VBR, lossless and multi-channel WMA files/streams requires Windows Media 9 to be installed.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the parameters are invalid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>There is no appropriate codec installed to decode the file. Try installing the latest Windows Media codecs.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_WMA_LICENSE</term><description>The WMA file can not be played because it is protected.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a WMA file.
            <para>This overload implements unicode filenames. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="file">Filename or URL for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from (Unused, set to 0).</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The bitrate (amongst other things) can be retrieved through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA). When retrieving tags, a pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</para>
            <para>A description of the codec used by the file is also available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA_CODEC). 2 null-terminated UTF-8 strings are returned, with the 1st string being the name of the codec, and the 2nd containing additional information like what VBR setting was used.</para>
            <para>The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>. Until the whole file has been streamed, whatever length the file's header says is returned, which may or may not be exact.</para>
            <para>Although the Windows Media modules uses its own internet streaming routines (not BASS's), the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PROXY"/> and <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_TIMEOUT"/> config options do have effect when opening WMA streams. When the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PLAYLIST"/> config option is enabled, BASSWMA will process ASX and WPL files. None of the other NET config options apply.</para>
            <para>Unless the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_WMA_BASSFILE"/> config option is enabled, the Windows Media modules uses its own file reading routines, and the <paramref name="offset"/> and <paramref name="length"/> parameters are ignored, except that length is still the length when playing from memory. 
            Also, <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> isn't fully supported. The file size (BASS_FILEPOS_END) can be retrieved, but the decode position (BASS_FILEPOS_CURRENT) is not available. 
            The download progress of streamed files (BASS_FILEPOS_DOWNLOAD) can also be retrieved. The buffering progress (percentage) can be retrieved using the BASS_FILEPOS_WMA_BUFFER mode.</para>
            <para>When streaming a file from the internet, it's not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>With Windows Media versions prior to 9 (and when streaming from the internet), WMA decoding is performed in a separate thread, so the CPU used to decode a file/stream during playback will not be included in the <see cref="M:Un4seen.Bass.Bass.BASS_GetCPU"/> return value.</para>
            <para>When using the BASS_STREAM_DECODE flag, it's not possible to play the stream. Because the decoded sample data is not outputted, "decoding channels" can still be used when there is no output device (using the "no sound" device with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>).</para>
            <para>The playback rate of local files can be altered with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. But the playback rate of internet streams should not be changed, because they are decoded at a fixed rate - the rate required to sustain playback at normal speed. So increasing the rate will result in playback stalling.</para>
            <para>Using VBR, lossless and multi-channel WMA files/streams requires Windows Media 9 to be installed.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the parameters are invalid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>There is no appropriate codec installed to decode the file. Try installing the latest Windows Media codecs.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_WMA_LICENSE</term><description>The WMA file can not be played because it is protected.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a WMA memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The bitrate (amongst other things) can be retrieved through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA). When retrieving tags, a pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</para>
            <para>A description of the codec used by the file is also available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA_CODEC). 2 null-terminated UTF-8 strings are returned, with the 1st string being the name of the codec, and the 2nd containing additional information like what VBR setting was used.</para>
            <para>The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>. Until the whole file has been streamed, whatever length the file's header says is returned, which may or may not be exact.</para>
            <para>Although the Windows Media modules uses it's own internet streaming code (not BASS's), the BASS_CONFIG_NET_TIMEOUT (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) config option does have effect when opening WMA streams. None of the other NET config options apply.</para>
            <para>With local files, <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> works the same as with the BASS built-in stream formats. But when internet streaming, the Windows Media modules uses it's own streaming routines.
            The download progress of an internet streamed file can be retrieved with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> (BASS_FILEPOS_DOWNLOAD). The file size (BASS_FILEPOS_END) can also be retrieved, but getting the size of internet streamed files requires Windows Media 9 to be installed. 
            The decode position (BASS_FILEPOS_CURRENT) is not available. When streaming a file from the internet, it is not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> with BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>When streaming a file from the internet, it's not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>With Windows Media versions prior to 9 (and when streaming from the internet), WMA decoding is performed in a separate thread, so the CPU used to decode a file/stream during playback will not be included in the <see cref="M:Un4seen.Bass.Bass.BASS_GetCPU"/> return value.</para>
            <para>When using the BASS_STREAM_DECODE flag, it's not possible to play the stream. Because the decoded sample data is not outputted, "decoding channels" can still be used when there is no output device (using the "no sound" device with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>).</para>
            <para>The sample rate of local files can be altered with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. But the playback rate of internet streams should not be changed, because they are decoded at a fixed rate - the rate required to sustain playback at normal speed. So increasing the rate will result in playback stalling.</para>
            <para>Using VBR, lossless and multi-channel WMA files/streams requires Windows Media 9 to be installed.</para>
            <para>Don't forget to pin your memory object when using this overload.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the parameters are invalid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>There is no appropriate codec installed to decode the file. Try installing the latest Windows Media codecs.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_WMA_LICENSE</term><description>The WMA file can not be played because it is protected.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFileAuthIStream(System.Int32,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.String,System.String)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="istream"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="user"></param>
            <param name="pass"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateIStreamAuth(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.String,System.String)">
            <summary>
            Creates a sample stream from an IStream object.
            <para>This overload implements UNICODE user name and password. The BASS_UNICODE flag will be added automatically, if not alreday set.</para>
            </summary>
            <param name="istream">A pointer to an IStream object.</param>
            <param name="offset">Unused... set to 0.</param>
            <param name="length">Unused... set to 0.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="user">Username to use in connecting to the server... if either this or pass is <see langword="null"/>, then no username/password is sent to the server.</param>
            <param name="pass">Password to use in connecting to the server</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function is identical to <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, but with the additional authentication options.
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The bitrate (amongst other things) can be retrieved through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA). When retrieving tags, a pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</para>
            <para>A description of the codec used by the file is also available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA_CODEC). 2 null-terminated UTF-8 strings are returned, with the 1st string being the name of the codec, and the 2nd containing additional information like what VBR setting was used.</para>
            <para>The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>. Until the whole file has been streamed, whatever length the file's header says is returned, which may or may not be exact.</para>
            <para>Although the Windows Media modules uses it's own internet streaming code (not BASS's), the BASS_CONFIG_NET_TIMEOUT (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) config option does have effect when opening WMA streams. None of the other NET config options apply.</para>
            <para>With local files, <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> works the same as with the BASS built-in stream formats. But when internet streaming, the Windows Media modules uses it's own streaming routines.
            The download progress of an internet streamed file can be retrieved with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> (BASS_FILEPOS_DOWNLOAD). The file size (BASS_FILEPOS_END) can also be retrieved, but getting the size of internet streamed files requires Windows Media 9 to be installed. 
            The decode position (BASS_FILEPOS_CURRENT) is not available. When streaming a file from the internet, it is not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> with BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>When streaming a file from the internet, it's not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>With Windows Media versions prior to 9 (and when streaming from the internet), WMA decoding is performed in a separate thread, so the CPU used to decode a file/stream during playback will not be included in the <see cref="M:Un4seen.Bass.Bass.BASS_GetCPU"/> return value.</para>
            <para>When using the BASS_STREAM_DECODE flag, it's not possible to play the stream. Because the decoded sample data is not outputted, "decoding channels" can still be used when there is no output device (using the "no sound" device with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>).</para>
            <para>The sample rate of local files can be altered with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. But the playback rate of internet streams should not be changed, because they are decoded at a fixed rate - the rate required to sustain playback at normal speed. So increasing the rate will result in playback stalling.</para>
            <para>Using VBR, lossless and multi-channel WMA files/streams requires Windows Media 9 to be installed.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the parameters are invalid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>There is no appropriate codec installed to decode the file. Try installing the latest Windows Media codecs.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_WMA_LICENSE</term><description>The WMA file can not be played because it is protected.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFileAuthUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.String,System.String)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="user"></param>
            <param name="pass"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFileAuth(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.String,System.String)">
            <summary>
            Creates a sample stream from a WMA file.
            <para>This overload implements Unicode filenames, username and password. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="file">Filename or URL for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from (Unused, set to 0).</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="user">Username to use in connecting to the server... if either this or pass is <see langword="null"/>, then no username/password is sent to the server.</param>
            <param name="pass">Password to use in connecting to the server</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function is identical to <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, but with the additional authentication options.
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The bitrate (amongst other things) can be retrieved through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA). When retrieving tags, a pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</para>
            <para>A description of the codec used by the file is also available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA_CODEC). 2 null-terminated UTF-8 strings are returned, with the 1st string being the name of the codec, and the 2nd containing additional information like what VBR setting was used.</para>
            <para>The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>. Until the whole file has been streamed, whatever length the file's header says is returned, which may or may not be exact.</para>
            <para>Although the Windows Media modules uses it's own internet streaming code (not BASS's), the BASS_CONFIG_NET_TIMEOUT (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) config option does have effect when opening WMA streams. None of the other NET config options apply.</para>
            <para>With local files, <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> works the same as with the BASS built-in stream formats. But when internet streaming, the Windows Media modules uses it's own streaming routines.
            The download progress of an internet streamed file can be retrieved with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> (BASS_FILEPOS_DOWNLOAD). The file size (BASS_FILEPOS_END) can also be retrieved, but getting the size of internet streamed files requires Windows Media 9 to be installed. 
            The decode position (BASS_FILEPOS_CURRENT) is not available. When streaming a file from the internet, it is not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> with BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>When streaming a file from the internet, it's not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>With Windows Media versions prior to 9 (and when streaming from the internet), WMA decoding is performed in a separate thread, so the CPU used to decode a file/stream during playback will not be included in the <see cref="M:Un4seen.Bass.Bass.BASS_GetCPU"/> return value.</para>
            <para>When using the BASS_STREAM_DECODE flag, it's not possible to play the stream. Because the decoded sample data is not outputted, "decoding channels" can still be used when there is no output device (using the "no sound" device with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>).</para>
            <para>The sample rate of local files can be altered with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. But the playback rate of internet streams should not be changed, because they are decoded at a fixed rate - the rate required to sustain playback at normal speed. So increasing the rate will result in playback stalling.</para>
            <para>Using VBR, lossless and multi-channel WMA files/streams requires Windows Media 9 to be installed.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the parameters are invalid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>There is no appropriate codec installed to decode the file. Try installing the latest Windows Media codecs.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_WMA_LICENSE</term><description>The WMA file can not be played because it is protected.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFileAuthMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.String,System.String)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <param name="user"></param>
            <param name="pass"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFileAuth(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.String,System.String)">
            <summary>
            Creates a sample stream from a WMA memory IntPtr.
            <para>This overload implements streaming from memory. Username and Password are UNICODE, so the BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="user">Username to use in connecting to the server... if either this or pass is <see langword="null"/>, then no username/password is sent to the server.</param>
            <param name="pass">Password to use in connecting to the server</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function is identical to <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, but with the additional authentication options.
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The bitrate (amongst other things) can be retrieved through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA). When retrieving tags, a pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</para>
            <para>A description of the codec used by the file is also available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA_CODEC). 2 null-terminated UTF-8 strings are returned, with the 1st string being the name of the codec, and the 2nd containing additional information like what VBR setting was used.</para>
            <para>The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>. Until the whole file has been streamed, whatever length the file's header says is returned, which may or may not be exact.</para>
            <para>Although the Windows Media modules uses it's own internet streaming code (not BASS's), the BASS_CONFIG_NET_TIMEOUT (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) config option does have effect when opening WMA streams. None of the other NET config options apply.</para>
            <para>With local files, <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> works the same as with the BASS built-in stream formats. But when internet streaming, the Windows Media modules uses it's own streaming routines.
            The download progress of an internet streamed file can be retrieved with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> (BASS_FILEPOS_DOWNLOAD). The file size (BASS_FILEPOS_END) can also be retrieved, but getting the size of internet streamed files requires Windows Media 9 to be installed. 
            The decode position (BASS_FILEPOS_CURRENT) is not available. When streaming a file from the internet, it is not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> with BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>When streaming a file from the internet, it's not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>With Windows Media versions prior to 9 (and when streaming from the internet), WMA decoding is performed in a separate thread, so the CPU used to decode a file/stream during playback will not be included in the <see cref="M:Un4seen.Bass.Bass.BASS_GetCPU"/> return value.</para>
            <para>When using the BASS_STREAM_DECODE flag, it's not possible to play the stream. Because the decoded sample data is not outputted, "decoding channels" can still be used when there is no output device (using the "no sound" device with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>).</para>
            <para>The sample rate of local files can be altered with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. But the playback rate of internet streams should not be changed, because they are decoded at a fixed rate - the rate required to sustain playback at normal speed. So increasing the rate will result in playback stalling.</para>
            <para>Using VBR, lossless and multi-channel WMA files/streams requires Windows Media 9 to be installed.</para>
            <para>Don't forget to pin your memory object when using this overload.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the parameters are invalid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>There is no appropriate codec installed to decode the file. Try installing the latest Windows Media codecs.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_WMA_LICENSE</term><description>The WMA file can not be played because it is protected.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a WMA file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the parameters are invalid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>There is no appropriate codec installed to decode the file. Try installing the latest Windows Media codecs.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_WMA_LICENSE</term><description>The WMA file can not be played because it is protected.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateURL(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a URL.
            <para>This overload implements Unicode urls. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="url">URL for which a stream should be created.</param>
            <param name="offset">Unused... set to 0.</param>
            <param name="length">Unused... set to 0.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The bitrate (amongst other things) can be retrieved through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA). When retrieving tags, a pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</para>
            <para>A description of the codec used by the file is also available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA_CODEC). 2 null-terminated UTF-8 strings are returned, with the 1st string being the name of the codec, and the 2nd containing additional information like what VBR setting was used.</para>
            <para>The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>. Until the whole file has been streamed, whatever length the file's header says is returned, which may or may not be exact.</para>
            <para>When loading from a memory location (mem = <see langword="true"/>), unlike <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, this function makes a copy of the data. So you can release the source memory immediately after calling this function.</para>
            <para>Although the Windows Media modules uses it's own internet streaming code (not BASS's), the BASS_CONFIG_NET_TIMEOUT (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>) config option does have effect when opening WMA streams. None of the other NET config options apply.</para>
            <para>The download progress of an internet streamed file can be retrieved with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> (BASS_FILEPOS_DOWNLOAD). The file size (BASS_FILEPOS_END) can also be retrieved, but getting the size of internet streamed files requires Windows Media 9 to be installed. 
            The decode position (BASS_FILEPOS_CURRENT) is not available. When streaming a file from the internet, it is not possible to seek with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> until the whole file has been downloaded. A sync (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> with BASS_SYNC_DOWNLOAD) can be set to be notified when the file has been downloaded.</para>
            <para>With Windows Media versions prior to 9 (and when streaming from the internet), WMA decoding is performed in a separate thread, so the CPU used to decode a file/stream during playback will not be included in the <see cref="M:Un4seen.Bass.Bass.BASS_GetCPU"/> return value.</para>
            <para>When using the BASS_STREAM_DECODE flag, it's not possible to play the stream. Because the decoded sample data is not outputted, "decoding channels" can still be used when there is no output device (using the "no sound" device with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>).</para>
            <para>The sample rate of local files can be altered with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. But the playback rate of internet streams should not be changed, because they are decoded at a fixed rate - the rate required to sustain playback at normal speed. So increasing the rate will result in playback stalling.</para>
            <para>Using VBR, lossless and multi-channel WMA files/streams requires Windows Media 9 to be installed.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the parameters are invalid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>There is no appropriate codec installed to decode the file. Try installing the latest Windows Media codecs.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_WMA_LICENSE</term><description>The WMA file can not be played because it is protected.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_GetWMObject(System.Int32)">
            <summary>
            Retrieves a pointer to the IWMReader interface of a WMA stream, or IWMWriter interface of a WMA encoder.
            </summary>
            <param name="handle">The WMA stream or encoder handle.</param>
            <returns>If succesful, then a pointer to the requested object is returned, otherwise <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function allows those that are familiar with the Windows Media Format SDK to access the internal object interface, for extra functionality. 
            If you create any objects through a retrieved interface, make sure you release the objects before calling <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/>.</para>
            <para>See the Windows Media Format SDK for information on the IWMReader and associated interfaces.</para>
            <para>When streaming local (not internet) files, this function may actually return an IWMSyncReader interface instead of an IWMReader interface. 
            The type of interface can be determined by querying other interfaces from it, e.g. IWMReaderAdvanced.</para>
            <para>See the Windows Media Format SDK for information on the IWMReader, IWMWriter and associated interfaces.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Example using the WMFSDK function wrapper and casting it to the IWMHeaderInfo3:
            <code lang="C#">
            IntPtr pUnk = Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_GetWMObject(stream);
            IWMHeaderInfo3 headerInfo3 = (IWMHeaderInfo3)Marshal.GetObjectForIUnknown( pUnk );
            if (headerInfo3 != null)
            {
              ...
            }
            </code>
            <code lang="VB">
            Dim pUnk As IntPtr = Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_GetWMObject(stream)
            Dim headerInfo3 As IWMHeaderInfo3 = CType(Marshal.GetObjectForIUnknown(pUnk), IWMHeaderInfo3)
            If Not (headerInfo3 Is Nothing) Then
              ...
            End If
            </code>
            </example>
        </member>
        <member name="P:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_IsDRMVersion">
            <summary>
            Return <see langword="true"/>, if this version is a WMA DRM version - else <see langword="false"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_GetTags(System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="file"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_GetTags(System.String)">
            <summary>
            Get the tags from a file, can be used on DRM protected files (not thread-safe!).
            </summary>
            <param name="file">Filename from which to get the tags.</param>
            <returns>If succesful, a pointer to the data of the requested tags is returned, else <see cref="F:System.IntPtr.Zero"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function gives the same tags as <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA), which is a pointer to a series of null-terminated UTF-8 strings, the final string ending with a double null. 
            Unlike <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>, this function can also be used with DRM-protected WMA files without a DRM licence, as it does not require a stream to be created.
            <para>The memory used for the tags is reused by all calls of this function, so if the tags need to be retained across multiple calls, a copy should be made. It also means that this function is not thread-safe, that is it should not be called simultaneously from multiple threads.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened, or it is not a WMA file.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_GetTagsArray(System.String)">
            <summary>
            Get the tags from a file, can be used on DRM protected files (not thread-safe!).
            <para>This special helper method already evaluates the null-terminated and variable length data block using UTF-8 strings.</para>
            </summary>
            <param name="file">Filename from which to get the tags.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag, e.g. "TITLE=this is a title"</returns>
            <remarks>Only available when using with a DRM protected WMA file.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetRatesPtr(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode)">
            <summary>
            
            </summary>
            <param name="freq"></param>
            <param name="chans"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetRates(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode)">
            <summary>
            Retrieves the WMA encoding bitrates available for a specified sample format.
            </summary>
            <param name="freq">The sample rate in Hz, or a BASS channel handle if the BASS_WMA_ENCODE_SOURCE flag is specified.</param>
            <param name="chans">The number of channels (1=mono, 2=stereo, etc.).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncode"/>):
            <list type="table">
            <item><term>BASS_WMA_ENCODE_RATES_VBR</term><description>Get available VBR (Variable BitRate) quality settings.</description></item>
            <item><term>BASS_WMA_ENCODE_RATES_CBR</term><description>Get available CBR (Constant BitRate) quality settings.</description></item>
            <item><term>BASS_WMA_ENCODE_STANDARD</term><description>Get only bitrates available for standard WMA encoding. If neither this or the BASS_WMA_ENCODE_PRO flag is specified, then the bitrates available for either codec are returned.</description></item>
            <item><term>BASS_WMA_ENCODE_PRO</term><description>Get only bitrates available for WMA Pro encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_24BIT</term><description>Get available bitrates for 24-bit encoding, else 16-bit encoding rates.</description></item>
            <item><term>BASS_WMA_ENCODE_SOURCE</term><description>Use the sample format of the BASS channel with the handle in <paramref name="freq"/>. The <paramref name="chans"/> parameter is ignored.</description></item>
            </list>
            </param>
            <returns>If succesful, an array of the available bitrates is returned (int[], in bits per second), else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>When requesting VBR rates, the rates returned are quality settings. For example, 10 = 10% quality, 25 = 25% quality, etc... 100% quality is lossless.</para>
            <para>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format. Of course, it makes little sense to encode 8-bit or 16-bit data in 24-bit.</para>
            <para>The WMA codec currently supports the following sample rates: 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000. And the following number of channels: 1, 2, 6, 8. But not all combinations of these are supported. To encode other sample formats, the data will first have to be resampled to a supported format.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No codec could be found to support the specified sample format.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            List the CBR bitrates available at 44100hz 16-bit stereo:
            <code lang="C#">
            int[] bitrates = BassWma.BASS_WMA_EncodeGetRates(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_RATES_CBR );
            if (bitrates != null)
            {
              foreach (int bitrate in bitrates)
                Console.WriteLine( bitrate );
            }
            </code>
            <code lang="VB">
            Dim bitrates As Integer() = BassWma.BASS_WMA_EncodeGetRates(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_RATES_CBR)
            If Not (bitrates Is Nothing) Then
              Dim bitrate As Integer
              For Each bitrate In bitrates
                Console.WriteLine(bitrate)
              Next bitrate
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpen(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,Un4seen.Bass.AddOn.Wma.WMENCODEPROC,System.IntPtr)">
            <summary>
            Initializes WMA encoding to a user defined function.
            </summary>
            <param name="freq">The sample rate in Hz, or a BASS channel handle if the BASS_WMA_ENCODE_SOURCE flag is specified.</param>
            <param name="chans">The number of channels (1=mono, 2=stereo, etc.).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncode"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>8-bit sample data. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then 16-bit data is expected.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>32-bit floating-point sample data.</description></item>
            <item><term>BASS_WMA_ENCODE_STANDARD</term><description>Use standard WMA encoding. If neither this or the BASS_WMA_ENCODE_PRO flag is specified, then either codec could be used (whichever supports the requested sample format and bitrate).</description></item>
            <item><term>BASS_WMA_ENCODE_PRO</term><description>Use WMA Professional encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE</term><description>Use WMA voice encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE_MIXED</term><description>UUse WMA voice encoding in mixed mode.</description></item>
            <item><term>BASS_WMA_ENCODE_PCM</term><description>Write uncompressed PCM data in an ASF container. bitrate is ignored except that it should be non-0.</description></item>
            <item><term>BASS_WMA_ENCODE_24BIT</term><description>Encode in 24-bit, else 16-bit. 24-bit encoding requires WMA Pro.</description></item>
            <item><term>BASS_WMA_ENCODE_SCRIPT</term><description>Enable the specification of tags mid-stream (after encoding has begun).</description></item>
            <item><term>BASS_WMA_ENCODE_SOURCE</term><description>Use the BASS channel with the handle in <paramref name="freq"/> as the encoder's source. The <paramref name="chans"/>parameter is ignored, as are the BASS_SAMPLE_8BITS and BASS_SAMPLE_FLOAT flags. 
            If the BASSenc add-on is loaded, then the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_PRIORITY"/> setting is used to determine where in the channel's DSP chain the encoding is performed, otherwise priority -1000 is used.</description></item>
            <item><term>BASS_WMA_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> getting blocked by the encoder, but the application should control the rate at which data is encoded, as it is possible to queue too much data for the encoder to handle.</description></item>
            </list>
            </param>
            <param name="bitrate">The encoding bitrate (in bits per second, e.g. 128000), or VBR quality (100 or less).</param>
            <param name="proc">The user defined function to receive the encoded data (see <see cref="T:Un4seen.Bass.AddOn.Wma.WMENCODEPROC"/>).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If succesful, the new encoder's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Encoding to a user defined function allows any storage or delivery method to be used for the encoded WMA data. For example, encoding to memory.</para>
            <para>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format. Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetRates(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode)"/> to retrieve a list of the encoding bitrates available for a specific sample format.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.IntPtr,System.IntPtr,Un4seen.Bass.AddOn.Wma.BASSWMATag)"/> for each tag you wish to set.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> to encode sample data, and <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeClose(System.Int32)"/> to finish encoding.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No codec could be found to support the specified sample format and bitrate.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // the encoding callback
            private WMENCODEPROC _myEndoderProc;
            private FileStream _fs;
            private byte[] _encbuffer = new byte[1048510]; // 1MB buffer, should be enough
            ...
            // open a wma file
            _fs = File.OpenRead("test.wma");
            // create the encoder (44kHz, stereo at 64kbps, no tags)
            _myEndoderProc = new WMENCODEPROC(MyEncodingWriter);
            int encoder = BassWma.BASS_WMA_EncodeOpen(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                  64000, _myEndoderProc, IntPtr.Zero); 
            ...
            private bool MyEncodingWriter(int handle, BASSWMAEncodeCallback type, IntPtr buffer, int length, IntPtr user)
            {
              if (type == BASSWMAEncodeCallback.BASS_WMA_ENCODE_HEAD)
              {
                // rewind to start of file to write the header	
                _fs.Position = 0L;
              }
            
              if (type == BASSWMAEncodeCallback.BASS_WMA_ENCODE_DONE)
              {
                // done encoding - close the file
                _fs.Flush();
                _fs.Close();
              }
              else
              {
                // copy the unmanaged buffer content to out managed buffer
                Marshal.Copy(buffer, _encbuffer, 0, length);
                // process the data in _encbuffer
                _fs.Write(_encbuffer, 0, length);
              }
            }
            </code>
            <code lang="VB">
            Private _myEndoderProc As WMENCODEPROC
            Private _fs As FileStream
            Private _encbuffer(1048510) As Byte ' 1MB buffer, should be enough
            ...
            ' open a wma file
            _fs = File.OpenRead("test.wma")
            ' create the encoder (44kHz, stereo at 64kbps, no tags)
            _myEndoderProc = New WMENCODEPROC(AddressOf MyEncodingWriter)
            Dim encoder As Integer = BassWma.BASS_WMA_EncodeOpen(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                             64000, _myEndoderProc, IntPtr.Zero)
            ...
            Private Function MyEncodingWriter(handle As Integer, type As BASSWMAEncodeCallback, 
                                              buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              If type = BASSWMAEncodeCallback.BASS_WMA_ENCODE_HEAD Then
                ' rewind to start of file to write the header	
                _fs.Position = 0L.ToUInt32()
              End If
            
              If type = BASSWMAEncodeCallback.BASS_WMA_ENCODE_DONE Then
                ' done encoding - close the file
                _fs.Flush()
                _fs.Close()
              Else
                ' copy the unmanaged buffer content to out managed buffer
                Marshal.Copy(buffer, _encbuffer, 0, length)
                ' process the data in _encbuffer
                _fs.Write(_encbuffer, 0, length)
              End If
            End Function
            </code>
            NOTE: This is just an example. It's obviously simpler to use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenFile(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String)"/> to encode to a file.
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenFileUnicode(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String)">
            <summary>
            
            </summary>
            <param name="freq"></param>
            <param name="chans"></param>
            <param name="flags"></param>
            <param name="bitrate"></param>
            <param name="file"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenFile(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String)">
            <summary>
            Initializes WMA encoding to a file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="freq">The sample rate in Hz, or a BASS channel handle if the BASS_WMA_ENCODE_SOURCE flag is specified.</param>
            <param name="chans">The number of channels (1=mono, 2=stereo, etc.).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncode"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>8-bit sample data. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then 16-bit data is expected.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>32-bit floating-point sample data.</description></item>
            <item><term>BASS_WMA_ENCODE_STANDARD</term><description>Use standard WMA encoding. If neither this or the BASS_WMA_ENCODE_PRO flag is specified, then either codec could be used (whichever supports the requested sample format and bitrate).</description></item>
            <item><term>BASS_WMA_ENCODE_PRO</term><description>Use WMA Professional encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE</term><description>Use WMA voice encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE_MIXED</term><description>UUse WMA voice encoding in mixed mode.</description></item>
            <item><term>BASS_WMA_ENCODE_PCM</term><description>Write uncompressed PCM data in an ASF container. bitrate is ignored except that it should be non-0.</description></item>
            <item><term>BASS_WMA_ENCODE_24BIT</term><description>Encode in 24-bit, else 16-bit. 24-bit encoding requires WMA Pro.</description></item>
            <item><term>BASS_WMA_ENCODE_SCRIPT</term><description>Enable the specification of tags mid-stream (after encoding has begun).</description></item>
            <item><term>BASS_UNICODE</term><description>File is a Unicode (16-bit characters) filename.</description></item>
            <item><term>BASS_WMA_ENCODE_SOURCE</term><description>Use the BASS channel with the handle in <paramref name="freq"/> as the encoder's source. The <paramref name="chans"/>parameter is ignored, as are the BASS_SAMPLE_8BITS and BASS_SAMPLE_FLOAT flags. 
            If the BASSenc add-on is loaded, then the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_PRIORITY"/> setting is used to determine where in the channel's DSP chain the encoding is performed, otherwise priority -1000 is used.</description></item>
            <item><term>BASS_WMA_ENCODE_QUEUE</term><description>Queue data to feed the encoder asynchronously. This prevents <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> getting blocked by the encoder, but the application should control the rate at which data is encoded, as it is possible to queue too much data for the encoder to handle.</description></item>
            </list>
            </param>
            <param name="bitrate">The encoding bitrate (in bits per second, e.g. 128000), or VBR quality (100 or less).</param>
            <param name="file">The filename to write.</param>
            <returns>If succesful, the new encoder's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format. Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetRates(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode)"/> to retrieve a list of the encoding bitrates available for a specific sample format.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.IntPtr,System.IntPtr,Un4seen.Bass.AddOn.Wma.BASSWMATag)"/> for each tag you wish to set.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> to encode sample data, and <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeClose(System.Int32)"/> to finish encoding and close the file.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No codec could be found to support the specified sample format and bitrate.</description></item>
            <item><term>BASS_ERROR_CREATE</term><description>Could not create the file to write the WMA stream.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Initialize encoding 44100hz 16-bit stereo sample data at 128kb/s to a file called "output.wma":
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("input.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE);
            if (stream != 0)
            {
              byte[] buffer = new byte[16384]; // 16KB decode buffer
              int enc = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                128000, "output.wma");
              while (Bass.BASS_ChannelIsActive(stream) == BASSActive.BASS_ACTIVE_PLAYING)
              {
                int len = Bass.BASS_ChannelGetData(stream, buffer, 16384);
                if (len > 0)
                  BassWma.BASS_WMA_EncodeWrite(enc, buffer, len);
              }
              BassWma.BASS_WMA_EncodeClose(enc);
            }
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("input.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE)
            If stream &lt;&gt; 0 Then
              Dim buffer(16384 - 1) As Byte ' 16KB decode buffer
              Dim enc As Integer = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                           128000, "output.wma")
              While Bass.BASS_ChannelIsActive(stream) = BASSActive.BASS_ACTIVE_PLAYING
                Dim len As Integer = Bass.BASS_ChannelGetData(stream, buffer, 16384)
                If len > 0 Then
                  BassWma.BASS_WMA_EncodeWrite(enc, buffer, len)
                End If
              End While
              BassWma.BASS_WMA_EncodeClose(enc)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenNetwork(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.Int32,System.Int32)">
            <summary>
            Initializes WMA encoding to the network.
            </summary>
            <param name="freq">The sample rate in Hz, or a BASS channel handle if the BASS_WMA_ENCODE_SOURCE flag is specified.</param>
            <param name="chans">The number of channels (1=mono, 2=stereo, etc.).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncode"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>8-bit sample data. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then 16-bit data is expected.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>32-bit floating-point sample data.</description></item>
            <item><term>BASS_WMA_ENCODE_STANDARD</term><description>Use standard WMA encoding. If neither this or the BASS_WMA_ENCODE_PRO flag is specified, then either codec could be used (whichever supports the requested sample format and bitrate).</description></item>
            <item><term>BASS_WMA_ENCODE_PRO</term><description>Use WMA Professional encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE</term><description>Use WMA voice encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE_MIXED</term><description>UUse WMA voice encoding in mixed mode.</description></item>
            <item><term>BASS_WMA_ENCODE_PCM</term><description>Write uncompressed PCM data in an ASF container. bitrate is ignored except that it should be non-0.</description></item>
            <item><term>BASS_WMA_ENCODE_24BIT</term><description>Encode in 24-bit, else 16-bit. 24-bit encoding requires WMA Pro.</description></item>
            <item><term>BASS_WMA_ENCODE_SCRIPT</term><description>Enable the specification of tags mid-stream (after encoding has begun).</description></item>
            <item><term>BASS_WMA_ENCODE_SOURCE</term><description>Use the BASS channel with the handle in <paramref name="freq"/> as the encoder's source. The <paramref name="chans"/>parameter is ignored, as are the BASS_SAMPLE_8BITS and BASS_SAMPLE_FLOAT flags. 
            If the BASSenc add-on is loaded, then the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_PRIORITY"/> setting is used to determine where in the channel's DSP chain the encoding is performed, otherwise priority -1000 is used.</description></item>
            </list>
            </param>
            <param name="bitrate">The encoding bitrate (in bits per second, e.g. 128000), or VBR quality (100 or less).</param>
            <param name="port">The port number for clients to conenct to... 0 = let the system choose a port.</param>
            <param name="clients">The maximum number of clients (up to 50) that can be connected.</param>
            <returns>If succesful, the new encoder's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>If you chose to let the system select a port, you can retrieve the port number using <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetPort(System.Int32)"/>.</para>
            <para>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format. Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetRates(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode)"/> to retrieve a list of the encoding bitrates available for a specific sample format.
            VBR encoding is not recommended for network encoding.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.IntPtr,System.IntPtr,Un4seen.Bass.AddOn.Wma.BASSWMATag)"/> for each tag you wish to set.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> to encode sample data, and <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeClose(System.Int32)"/> to finish encoding and close the network port.</para>
            <para>The BASS_WMA_ENCODE_QUEUE flag is not necessary with this function as the data is always queued and fed to the encoder asynchronously.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="clients"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No codec could be found to support the specified sample format and bitrate.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>Stream what you are recording using a system-chosen port, and allowing up to 5 clients:
            <code lang="C#">
            private RECORDPROC _myRecProc;
            ...
            if ( Bass.BASS_RecordInit(-1) )
            {
              int enc = BassWma.BASS_WMA_EncodeOpenNetwork(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                128000, 0, 5);
              _myRecProc = new RECORDPROC(MyRecording);
              int recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, _myRecProc, new IntPtr(enc));
            }
            ...
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              if (length &gt; 0 &amp;&amp; buffer != IntPtr.Zero)
              {
                // write the recorded data to the encoder
                BassWma.BASS_WMA_EncodeWrite(user.ToInt32(), buffer, length);
              }
              return true;
            }
            </code>
            <code lang="VB">
            Private _myRecProc As RECORDPROC
            ...
            If Bass.BASS_RecordInit(-1) Then
              Dim enc As Integer = BassWma.BASS_WMA_EncodeOpenNetwork(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                           128000, 0, 5)
              _myRecProc = New RECORDPROC(AddressOf MyRecording)
              Dim recHandle As Integer = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, _myRecProc, New IntPtr(enc))
            End If
            ...
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              If length &gt; 0 AndAlso buffer &lt;&gt; IntPtr.Zero Then
                ' write the recorded data to the encoder
                BassWma.BASS_WMA_EncodeWrite(user.ToInt32(), buffer, length)
              End If
              Return True
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenNetworkMulti(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32[],System.Int32,System.Int32)">
            <summary>
            Initializes WMA encoding to the network, using multiple bitrates.
            </summary>
            <param name="freq">The sample rate in Hz, or a BASS channel handle if the BASS_WMA_ENCODE_SOURCE flag is specified.</param>
            <param name="chans">The number of channels (1=mono, 2=stereo, etc.).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncode"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>8-bit sample data. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then 16-bit data is expected.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>32-bit floating-point sample data.</description></item>
            <item><term>BASS_WMA_ENCODE_STANDARD</term><description>Use standard WMA encoding. If neither this or the BASS_WMA_ENCODE_PRO flag is specified, then either codec could be used (whichever supports the requested sample format and bitrate).</description></item>
            <item><term>BASS_WMA_ENCODE_PRO</term><description>Use WMA Professional encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE</term><description>Use WMA voice encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE_MIXED</term><description>UUse WMA voice encoding in mixed mode.</description></item>
            <item><term>BASS_WMA_ENCODE_PCM</term><description>Write uncompressed PCM data in an ASF container. bitrate is ignored except that it should be non-0.</description></item>
            <item><term>BASS_WMA_ENCODE_24BIT</term><description>Encode in 24-bit, else 16-bit. 24-bit encoding requires WMA Pro.</description></item>
            <item><term>BASS_WMA_ENCODE_SCRIPT</term><description>Enable the specification of tags mid-stream (after encoding has begun).</description></item>
            <item><term>BASS_WMA_ENCODE_SOURCE</term><description>Use the BASS channel with the handle in <paramref name="freq"/> as the encoder's source. The <paramref name="chans"/>parameter is ignored, as are the BASS_SAMPLE_8BITS and BASS_SAMPLE_FLOAT flags. 
            If the BASSenc add-on is loaded, then the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_PRIORITY"/> setting is used to determine where in the channel's DSP chain the encoding is performed, otherwise priority -1000 is used.</description></item>
            </list>
            </param>
            <param name="bitrates">Array of encoding bitrates (in bits per second, e.g. 128000) to use, terminated with a 0 element (so the number of elements in the array must be one more than the effective bitrates used).</param>
            <param name="port">The port number for clients to conenct to... 0 = let the system choose a port.</param>
            <param name="clients">The maximum number of clients (up to 50) that can be connected.</param>
            <returns>If succesful, the new encoder's handle is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function is identical to <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenNetwork(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.Int32,System.Int32)"/>, but with the additional ability to specify multiple bitrates.
            <para>When encoding/broadcasting in multiple bitrates, the user will automatically get the best available bitrate for their bandwidth.</para>
            <para>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format. Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetRates(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode)"/> to retrieve a list of the encoding bitrates available for a specific sample format.
            VBR encoding is not recommended for network encoding.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="clients"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No codec could be found to support the specified sample format and bitrate.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Initialize encoding 44100hz 16-bit stereo sample data at 128kb/s and 64kb/s, using port 4711, and allowing up to 5 clients.
            <code lang="C#">
            int[] bitrates = {128000, 64000, 0}; // the bitrates
            int encoder = BassWma.BASS_WMA_EncodeOpenNetworkMulti( 44100, 2, 
                                  BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, bitrates, 4711, 5);
            </code>
            <code lang="VB">
            Dim bitrates As Integer() = {128000, 64000, 0} ' the bitrates
            Dim encoder As Integer = BassWma.BASS_WMA_EncodeOpenNetworkMulti(44100, 2, 
                                             BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, bitrates, 4711, 5)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenPublishUnicode(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String,System.String,System.String)">
            <summary>
            Unicode
            </summary>
            <param name="freq"></param>
            <param name="chans"></param>
            <param name="flags"></param>
            <param name="bitrate"></param>
            <param name="url"></param>
            <param name="user"></param>
            <param name="pass"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenPublish(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String,System.String,System.String)">
            <summary>
            Initializes WMA encoding to a publishing point on a Windows Media server.
            <para>This overload implements the Unicode version for url, user and pass. BASS_UNICODE will automatically be added if not set.</para>
            </summary>
            <param name="freq">The sample rate in Hz, or a BASS channel handle if the BASS_WMA_ENCODE_SOURCE flag is specified.</param>
            <param name="chans">The number of channels (1=mono, 2=stereo, etc.).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncode"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>8-bit sample data. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then 16-bit data is expected.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>32-bit floating-point sample data.</description></item>
            <item><term>BASS_WMA_ENCODE_STANDARD</term><description>Use standard WMA encoding. If neither this or the BASS_WMA_ENCODE_PRO flag is specified, then either codec could be used (whichever supports the requested sample format and bitrate).</description></item>
            <item><term>BASS_WMA_ENCODE_PRO</term><description>Use WMA Professional encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE</term><description>Use WMA voice encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE_MIXED</term><description>UUse WMA voice encoding in mixed mode.</description></item>
            <item><term>BASS_WMA_ENCODE_PCM</term><description>Write uncompressed PCM data in an ASF container. bitrate is ignored except that it should be non-0.</description></item>
            <item><term>BASS_WMA_ENCODE_24BIT</term><description>Encode in 24-bit, else 16-bit. 24-bit encoding requires WMA Pro.</description></item>
            <item><term>BASS_WMA_ENCODE_SCRIPT</term><description>Enable the specification of tags mid-stream (after encoding has begun).</description></item>
            <item><term>BASS_WMA_ENCODE_SOURCE</term><description>Use the BASS channel with the handle in <paramref name="freq"/> as the encoder's source. The <paramref name="chans"/>parameter is ignored, as are the BASS_SAMPLE_8BITS and BASS_SAMPLE_FLOAT flags. 
            If the BASSenc add-on is loaded, then the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_PRIORITY"/> setting is used to determine where in the channel's DSP chain the encoding is performed, otherwise priority -1000 is used.</description></item>
            </list>
            </param>
            <param name="bitrate">The encoding bitrate (in bits per second, e.g. 128000), or VBR quality (100 or less).</param>
            <param name="url">URL of the publishing point on the Windows Media server.</param>
            <param name="user">Username to use in connecting to the server... if either this or pass is <see langword="null"/>, then no username/password is sent to the server.</param>
            <param name="pass">Password to use in connecting to the server.</param>
            <returns>If succesful, the new encoder's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format. Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetRates(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode)"/> to retrieve a list of the encoding bitrates available for a specific sample format.
            VBR encoding is not recommended for network encoding.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.IntPtr,System.IntPtr,Un4seen.Bass.AddOn.Wma.BASSWMATag)"/> for each tag you wish to set.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> to encode sample data, and <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeClose(System.Int32)"/> to finish encoding and close the network port.</para>
            <para>The BASS_WMA_ENCODE_QUEUE flag is not necessary with this function as the data is always queued and fed to the encoder asynchronously.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No codec could be found to support the requested sample format and bitrate.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>Could not connect to the server.</description></item>
            <item><term>BASS_ERROR_WMA_DENIED</term><description>Access was denied. Check the <paramref name="user"/> and <paramref name="pass"/>.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenPublishMultiUnicode(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32[],System.String,System.String,System.String)">
            <summary>
            Unicode
            </summary>
            <param name="freq"></param>
            <param name="chans"></param>
            <param name="flags"></param>
            <param name="bitrates"></param>
            <param name="url"></param>
            <param name="user"></param>
            <param name="pass"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenPublishMulti(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32[],System.String,System.String,System.String)">
            <summary>
            Initializes WMA encoding to a publishing point on a Windows Media server, using multiple bitrates.
            <para>This overload implements the Unicode version for url, user and pass. BASS_UNICODE will automatically be added if not set.</para>
            </summary>
            <param name="freq">The sample rate in Hz, or a BASS channel handle if the BASS_WMA_ENCODE_SOURCE flag is specified.</param>
            <param name="chans">The number of channels (1=mono, 2=stereo, etc.).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncode"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>8-bit sample data. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then 16-bit data is expected.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>32-bit floating-point sample data.</description></item>
            <item><term>BASS_WMA_ENCODE_STANDARD</term><description>Use standard WMA encoding. If neither this or the BASS_WMA_ENCODE_PRO flag is specified, then either codec could be used (whichever supports the requested sample format and bitrate).</description></item>
            <item><term>BASS_WMA_ENCODE_PRO</term><description>Use WMA Professional encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE</term><description>Use WMA voice encoding.</description></item>
            <item><term>BASS_WMA_ENCODE_VOICE_MIXED</term><description>UUse WMA voice encoding in mixed mode.</description></item>
            <item><term>BASS_WMA_ENCODE_PCM</term><description>Write uncompressed PCM data in an ASF container. bitrate is ignored except that it should be non-0.</description></item>
            <item><term>BASS_WMA_ENCODE_24BIT</term><description>Encode in 24-bit, else 16-bit. 24-bit encoding requires WMA Pro.</description></item>
            <item><term>BASS_WMA_ENCODE_SCRIPT</term><description>Enable the specification of tags mid-stream (after encoding has begun).</description></item>
            <item><term>BASS_WMA_ENCODE_SOURCE</term><description>Use the BASS channel with the handle in <paramref name="freq"/> as the encoder's source. The <paramref name="chans"/>parameter is ignored, as are the BASS_SAMPLE_8BITS and BASS_SAMPLE_FLOAT flags. 
            If the BASSenc add-on is loaded, then the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_PRIORITY"/> setting is used to determine where in the channel's DSP chain the encoding is performed, otherwise priority -1000 is used.</description></item>
            </list>
            </param>
            <param name="bitrates">Array of encoding bitrates to use, terminated with a 0 (in bits per second, e.g. 128000).</param>
            <param name="url">URL of the publishing point on the Windows Media server.</param>
            <param name="user">Username to use in connecting to the server... if either this or pass is <see langword="null"/>, then no username/password is sent to the server.</param>
            <param name="pass">Password to use in connecting to the server.</param>
            <returns>If succesful, the new encoder's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function is identical to BASS_WMA_EncodeOpenPublish, but with the additional ability to specify multiple bitrates.
            <para>When encoding/broadcasting in multiple bitrates, the user will automatically get the best available bitrate for their bandwidth.</para>
            <para>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format. Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetRates(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode)"/> to retrieve a list of the encoding bitrates available for a specific sample format.
            VBR encoding is not recommended for network encoding.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.IntPtr,System.IntPtr,Un4seen.Bass.AddOn.Wma.BASSWMATag)"/> for each tag you wish to set.</para>
            <para>Use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> to encode sample data, and <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeClose(System.Int32)"/> to finish encoding and close the network port.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WMA</term><description>The Windows Media modules (v9 or above) are not installed.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>No codec could be found to support the requested sample format and bitrate.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>Could not connect to the server.</description></item>
            <item><term>BASS_ERROR_WMA_DENIED</term><description>Access was denied. Check the <paramref name="user"/> and <paramref name="pass"/>.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetPort(System.Int32)">
            <summary>
            Retrieves the network port for clients to connect to.
            </summary>
            <param name="handle">The encoder handle.</param>
            <returns>If succesful, the port number is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            If you have choosen to let the system select a port (e.g. in your <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenNetwork(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenNetworkMulti(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32[],System.Int32,System.Int32)"/>), 
            this is the function to retrieve the port actually being used.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder is not a network encoder, so no port is being used.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetNotify(System.Int32,Un4seen.Bass.AddOn.Wma.CLIENTCONNECTPROC,System.IntPtr)">
            <summary>
            Sets a client connection notification callback on a network encoder.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="proc">User defined notification function... <see langword="null"/> = disable notifications.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>A previously set notification callback can be changed (or removed) at any time, by calling this function again.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder is not a network encoder, so no port is being used.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            private CLIENTCONNECTPROC _myClientConnectProc;
            ...
            // set the notification callback
            _myClientConnectProc = new CLIENTCONNECTPROC(MyClientConnectNotify);
            BassWma.BASS_WMA_EncodeSetNotify(encoder, _myClientConnectProc, IntPtr.Zero);
            ...
            // the recording callback
            private void MyClientConnectNotify(int handle, bool connect, string ip, IntPtr user)
            {
              if (connect)
                Console.Writeln( "Connected: {0} at {1}", ip, DateTime.Now );
              else
                Console.Writeln( "Disconnected: {0} at {1}", ip, DateTime.Now );
            }
            </code>
            <code lang="VB">
            Private _myClientConnectProc As CLIENTCONNECTPROC
            ...
            ' set the notification callback
            _myClientConnectProc = New CLIENTCONNECTPROC(AddressOf MyClientConnectNotify)
            BassWma.BASS_WMA_EncodeSetNotify(encoder, _myClientConnectProc, IntPtr.Zero)
            ...
            ' the recording callback
            Private Sub MyClientConnectNotify(handle As Integer, connect As Boolean, ip As String, user As IntPtr)
              If connect Then
                Console.Writeln("Connected: {0} at {1}", ip, DateTime.Now)
              Else
                Console.Writeln("Disconnected: {0} at {1}", ip, DateTime.Now)
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetClients(System.Int32)">
            <summary>
            Retrieves the number of clients currently connected to the encoder.
            </summary>
            <param name="handle">The encoder handle.</param>
            <returns>If succesful, the number of clients is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder was not created with <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenNetwork(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.Int32,System.Int32)"/>.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.IntPtr,System.IntPtr,Un4seen.Bass.AddOn.Wma.BASSWMATag)">
            <summary>
            Sets a tag in a WMA encoding.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="tag">The pointer to the tag to set.</param>
            <param name="value">The pointer to the tag's text/data.</param>
            <param name="type">The format of the tag and value strings. One of the following (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMATag"/>):
            <list type="table">
            <item><term>BASS_WMA_TAG_ANSI</term><description>ANSI strings.</description></item>
            <item><term>BASS_WMA_TAG_UNICODE</term><description>Unicode (UTF-16) strings.</description></item>
            <item><term>BASS_WMA_TAG_UTF8</term><description>UTF-8 strings.</description></item>
            <item><term>BASS_WMA_TAG_BINARY</term><description><paramref name="value"/> contains binary data rather than text. The length of the data is in the HIWORD.</description></item>
            </list>
            </param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Where the tags are located in the encoded stream depends on when this function is used. Calling this function before beginning encoding data puts the tags in the stream's header. Calling this function after encoding has begun puts the tags in the actual stream data, at the current encoding position.
            <para>Header tags must be set before encoding any data - no more header tags can be set once <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> has been called.</para>
            <para>To set tags mid-stream (after encoding has begun), the BASS_WMA_ENCODE_SCRIPT flag needs to have been specified in the encoder's creation. A mid-stream tag typically used is "Caption", which get's displayed in Windows Media Player 9 and above (if the user has enabled captions).</para>
            <para>When using a network encoder, it should be noted that while all header tags are sent to newly connecting clients, prior mid-stream tags are not. So if, for example, you're using the "Caption" tag to indicate the current song title, it should be sent at fairly regular intervals (not only at the start of the song).</para>
            <para>On the playback side, mid-stream tags can be processed using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> (with BASS_TAG_WMA_META).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder does not have mid-stream tags enabled, so tags can not be set once encoding has begun.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="tag"/> and/or <paramref name="value"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Initialize encoding 44100hz 16-bit stereo sample data at 128kbps to a file called "out.wma", 
            and set the header tag "Title" to "Something".
            <code lang="C#">
            int encoder = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, 
                                  BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 128000, "out.wma");
            // set the title tag
            BassWma.BASS_WMA_EncodeSetTag(encoder, "Title", "Something", BASSWMATag.BASS_WMA_TAG_UNICODE);
            </code>
            <code lang="VB">
            Dim encoder As Integer = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, 
                                             BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 128000, "out.wma")
            ' set the title tag
            BassWma.BASS_WMA_EncodeSetTag(encoder, "Title", "Something", BASSWMATag.BASS_WMA_TAG_UNICODE)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTagUnicode(System.Int32,System.String,System.String,Un4seen.Bass.AddOn.Wma.BASSWMATag)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="tag"></param>
            <param name="value"></param>
            <param name="type"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.String,System.String,Un4seen.Bass.AddOn.Wma.BASSWMATag)">
            <summary>
            Sets a tag in a WMA encoding.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="tag">The tag to set.
            <para>The standard WMA header tags are as follows:</para>
            <list type="table">
            <item><term>Title</term><description>Content title.</description></item>
            <item><term>Author</term><description>Name of the content author (Artist).</description></item>
            <item><term>Description</term><description>Description of the content.</description></item>
            <item><term>Rating</term><description>Content rating.</description></item>
            <item><term>Copyright</term><description>Content copyright message.</description></item>
            <item><term>WM/AlbumTitle</term><description>Album title.</description></item>
            <item><term>WM/PromotionURL</term><description>URL to an HTML page containing related information.</description></item>
            <item><term>WM/AlbumCoverURL</term><description>URL to an HTML page containing an image of the album cover.</description></item>
            <item><term>WM/Genre</term><description>Genre of the music.</description></item>
            <item><term>WM/Year</term><description>Year of publication of the music.</description></item>
            </list>
            </param>
            <param name="value">The tag's text/data.</param>
            <param name="type">The format of the tag and value strings. One of the following (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMATag"/>):
            <list type="table">
            <item><term>BASS_WMA_TAG_ANSI</term><description>ANSI strings (actually not used and automatically converted to BASS_WMA_TAG_UNICODE).</description></item>
            <item><term>BASS_WMA_TAG_UNICODE</term><description>Unicode (UTF-16) strings (recommended for .Net).</description></item>
            <item><term>BASS_WMA_TAG_UTF8</term><description>UTF-8 strings.</description></item>
            </list>
            You don't actually need to set any flags here, since we automatically add the BASS_WMA_TAG_UNICODE flag, unless you explititly set the BASS_WMA_TAG_UTF8 flag.
            </param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Where the tags are located in the encoded stream depends on when this function is used. Calling this function before beginning encoding data puts the tags in the stream's header. Calling this function after encoding has begun puts the tags in the actual stream data, at the current encoding position.
            <para>Header tags must be set before encoding any data - no more header tags can be set once <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> has been called.</para>
            <para>To set tags mid-stream (after encoding has begun), the BASS_WMA_ENCODE_SCRIPT flag needs to have been specified in the encoder's creation. A mid-stream tag typically used is "Caption", which get's displayed in Windows Media Player 9 and above (if the user has enabled captions).</para>
            <para>When using a network encoder, it should be noted that while all header tags are sent to newly connecting clients, prior mid-stream tags are not. So if, for example, you're using the "Caption" tag to indicate the current song title, it should be sent at fairly regular intervals (not only at the start of the song).</para>
            <para>On the playback side, mid-stream tags can be processed using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> (with BASS_SYNC_META).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder does not have mid-stream tags enabled, so tags can not be set once encoding has begun.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="tag"/> and/or <paramref name="value"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Initialize encoding 44100hz 16-bit stereo sample data at 128kbps to a file called "out.wma", 
            and set the header tag "Title" to "Something" in UTF-8 format.
            <code lang="C#">
            int encoder = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, 
                                  BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 128000, "out.wma");
            // set the title tag
            BassWma.BASS_WMA_EncodeSetTag(encoder, "Title", "Something", BASSWMATag.BASS_WMA_TAG_UTF8);
            </code>
            <code lang="VB">
            Dim encoder As Integer = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, 
                                             BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 128000, "out.wma")
            ' set the title tag
            BassWma.BASS_WMA_EncodeSetTag(encoder, "Title", "Something", BASSWMATag.BASS_WMA_TAG_UTF8)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTagUnicode(System.Int32,System.String,System.IntPtr,Un4seen.Bass.AddOn.Wma.BASSWMATag)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="tag"></param>
            <param name="value"></param>
            <param name="type"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.String,System.IntPtr,System.Int32)">
            <summary>
            Sets a binary tag in a WMA encoding.
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="tag">The tag to set (e.g. "WM/Picture").</param>
            <param name="length">The number of bytes provided as binary data in the tag.</param>
            <param name="value">The pointer to the binary tag's data.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Where the tags are located in the encoded stream depends on when this function is used. Calling this function before beginning encoding data puts the tags in the stream's header. Calling this function after encoding has begun puts the tags in the actual stream data, at the current encoding position.
            <para>Header tags must be set before encoding any data - no more header tags can be set once <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> has been called.</para>
            <para>To set tags mid-stream (after encoding has begun), the BASS_WMA_ENCODE_SCRIPT flag needs to have been specified in the encoder's creation. A mid-stream tag typically used is "Caption", which get's displayed in Windows Media Player 9 and above (if the user has enabled captions).</para>
            <para>When using a network encoder, it should be noted that while all header tags are sent to newly connecting clients, prior mid-stream tags are not. So if, for example, you're using the "Caption" tag to indicate the current song title, it should be sent at fairly regular intervals (not only at the start of the song).</para>
            <para>On the playback side, mid-stream tags can be processed using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> (with BASS_SYNC_META).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder does not have mid-stream tags enabled, so tags can not be set once encoding has begun.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="tag"/> and/or <paramref name="value"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.String,System.String)">
            <summary>
            Sets a tag in a WMA encoding (Unicode version).
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="tag">The tag to set.
            <para>The standard WMA header tags are as follows:</para>
            <list type="table">
            <item><term>Title</term><description>Content title.</description></item>
            <item><term>Author</term><description>Name of the content author (Artist).</description></item>
            <item><term>Description</term><description>Description of the content.</description></item>
            <item><term>Rating</term><description>Content rating.</description></item>
            <item><term>Copyright</term><description>Content copyright message.</description></item>
            <item><term>WM/AlbumTitle</term><description>Album title.</description></item>
            <item><term>WM/PromotionURL</term><description>URL to an HTML page containing related information.</description></item>
            <item><term>WM/AlbumCoverURL</term><description>URL to an HTML page containing an image of the album cover.</description></item>
            <item><term>WM/Genre</term><description>Genre of the music.</description></item>
            <item><term>WM/Year</term><description>Year of publication of the music.</description></item>
            </list>
            </param>
            <param name="value">The tag's text/data.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Where the tags are located in the encoded stream depends on when this function is used. Calling this function before beginning encoding data puts the tags in the stream's header. Calling this function after encoding has begun puts the tags in the actual stream data, at the current encoding position.
            <para>Header tags must be set before encoding any data - no more header tags can be set once <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)"/> has been called.</para>
            <para>To set tags mid-stream (after encoding has begun), the BASS_WMA_ENCODE_SCRIPT flag needs to have been specified in the encoder's creation. A mid-stream tag typically used is "Caption", which get's displayed in Windows Media Player 9 and above (if the user has enabled captions).</para>
            <para>When using a network encoder, it should be noted that while all header tags are sent to newly connecting clients, prior mid-stream tags are not. So if, for example, you're using the "Caption" tag to indicate the current song title, it should be sent at fairly regular intervals (not only at the start of the song).</para>
            <para>On the playback side, mid-stream tags can be processed using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> (with BASS_SYNC_META).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The encoder does not have mid-stream tags enabled, so tags can not be set once encoding has begun.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="tag"/> and/or <paramref name="value"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Initialize encoding 44100hz 16-bit stereo sample data at 128kbps to a file called "out.wma", 
            and set the header tag "Title" to "Something".
            <code lang="C#">
            int encoder = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, 
                                  BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 128000, "out.wma");
            // set the title tag
            BassWma.BASS_WMA_EncodeSetTag(encoder, "Title", "Something");
            </code>
            <code lang="VB">
            Dim encoder As Integer = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, 
                                             BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 128000, "out.wma")
            ' set the title tag
            BassWma.BASS_WMA_EncodeSetTag(encoder, "Title", "Something")
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Encodes sample data, and writes it to the file or network.
            <para>This overload uses an IntPtr to point to the memory block containing the data.</para>
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="buffer">The buffer containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format.
            <para>There is generally no need to call this function if the BASS_WMA_ENCODE_SOURCE flag has been set on the encoder, as the encoder will automatically be fed the data that its source BASS channel produces.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>Stream what you are recording using a system-chosen port, and allowing up to 5 clients:
            <code lang="C#">
            private RECORDPROC _myRecProc;
            ...
            if ( Bass.BASS_RecordInit(-1) )
            {
              int enc = BassWma.BASS_WMA_EncodeOpenNetwork(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                128000, 0, 5);
              _myRecProc = new RECORDPROC(MyRecording);
              int recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, _myRecProc, new IntPtr(enc));
            }
            ...
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              if (length &gt; 0 &amp;&amp; buffer != IntPtr.Zero)
              {
                // write the recorded data to the encoder
                BassWma.BASS_WMA_EncodeWrite(user.ToInt32(), buffer, length);
              }
              return true;
            }
            </code>
            <code lang="VB">
            Private _myRecProc As RECORDPROC
            ...
            If Bass.BASS_RecordInit(-1) Then
              Dim enc As Integer = BassWma.BASS_WMA_EncodeOpenNetwork(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                           128000, 0, 5)
              _myRecProc = New RECORDPROC(AddressOf MyRecording)
              Dim recHandle As Integer = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, _myRecProc, New IntPtr(enc))
            End If
            ...
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              If length &gt; 0 AndAlso buffer &lt;&gt; IntPtr.Zero Then
                ' write the recorded data to the encoder
                BassWma.BASS_WMA_EncodeWrite(user.ToInt32(), buffer, length)
              End If
              Return True
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.Single[],System.Int32)">
            <summary>
            Encodes sample data, and writes it to the file or network.
            <para>This overload uses a managed float[] to handover sample data to the encoder.</para>
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="buffer">The buffer containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format.
            <para>There is generally no need to call this function if the BASS_WMA_ENCODE_SOURCE flag has been set on the encoder, as the encoder will automatically be fed the data that its source BASS channel produces.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See the overload taking a byte array for an example.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.Int32[],System.Int32)">
            <summary>
            Encodes sample data, and writes it to the file or network.
            <para>This overload uses a managed int[] to handover sample data to the encoder (Note: An int[] is 32-bit. When using 16-bit samples we can keep a stereo pair in here).</para>
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="buffer">The buffer containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format.
            <para>There is generally no need to call this function if the BASS_WMA_ENCODE_SOURCE flag has been set on the encoder, as the encoder will automatically be fed the data that its source BASS channel produces.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See the overload taking a byte array for an example.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.Int16[],System.Int32)">
            <summary>
            Encodes sample data, and writes it to the file or network.
            <para>This overload uses a managed short[] to handover sample data to the encoder (perfect for 16-bit samples).</para>
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="buffer">The buffer containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format.
            <para>There is generally no need to call this function if the BASS_WMA_ENCODE_SOURCE flag has been set on the encoder, as the encoder will automatically be fed the data that its source BASS channel produces.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See the overload taking a byte array for an example.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeWrite(System.Int32,System.Byte[],System.Int32)">
            <summary>
            Encodes sample data, and writes it to the file or network.
            <para>This overload uses a managed byte[] to handover sample data to the encoder (perfect for 8-bit samples).</para>
            </summary>
            <param name="handle">The encoder handle.</param>
            <param name="buffer">The buffer containing the sample data.</param>
            <param name="length">The number of BYTES in the buffer.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The WMA codec expects 16-bit or 24-bit sample data depending on the BASS_WMA_ENCODE_24BIT flag, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format.
            <para>There is generally no need to call this function if the BASS_WMA_ENCODE_SOURCE flag has been set on the encoder, as the encoder will automatically be fed the data that its source BASS channel produces.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Initialize encoding 44100hz 16-bit stereo sample data at 128kb/s to a file called "output.wma":
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("input.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE);
            if (stream != 0)
            {
              byte[] buffer = new byte[16384]; // 16KB decode buffer
              int enc = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                128000, "output.wma");
              while (Bass.BASS_ChannelIsActive(stream) == BASSActive.BASS_ACTIVE_PLAYING)
              {
                int len = Bass.BASS_ChannelGetData(stream, buffer, 16384);
                if (len > 0)
                  BassWma.BASS_WMA_EncodeWrite(enc, buffer, len);
              }
              BassWma.BASS_WMA_EncodeClose(enc);
            }
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("input.mp3", 0L, 0L, BASSFlag.BASS_STREAM_DECODE)
            If stream &lt;&gt; 0 Then
              Dim buffer(16384 - 1) As Byte ' 16KB decode buffer
              Dim enc As Integer = BassWma.BASS_WMA_EncodeOpenFile(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                           128000, "output.wma")
              While Bass.BASS_ChannelIsActive(stream) = BASSActive.BASS_ACTIVE_PLAYING
                Dim len As Integer = Bass.BASS_ChannelGetData(stream, buffer, 16384)
                If len > 0 Then
                  BassWma.BASS_WMA_EncodeWrite(enc, buffer, len)
                End If
              End While
              BassWma.BASS_WMA_EncodeClose(enc)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeClose(System.Int32)">
            <summary>
            Finishes encoding and closes the file or network port.
            </summary>
            <param name="handle">The encoder handle.</param>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BassWma.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the basswma.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BassWma.SupportedStreamName">
            <summary>
            Supported file format name of the basswma.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
            <example>
            Load BASS and BASSWMA from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassWma.LoadMe();
            ...
            // when not used anymore...
            BassWma.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSWMA from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassWma.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassWma.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wma.BassWma.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncode">
            <summary>
            WMA encoding flags for use with <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpen(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,Un4seen.Bass.AddOn.Wma.WMENCODEPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenFile(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String)"/>, <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenNetwork(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.Int32,System.Int32)"/>, <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenPublish(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String,System.String,System.String)"/> or <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeGetRates(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT">
            <summary>
            Default encoding, no tags.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_SAMPLE_8BITS">
            <summary>
            8 bit sample data.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_SAMPLE_FLOAT">
            <summary>
            32-bit floating-point sample data.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_STANDARD">
            <summary>
            Standard WMA encoding.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_PRO">
            <summary>
            WMA Professional encoding.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_24BIT">
            <summary>
             Enable 24-bit encoding.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_PCM">
            <summary>
            Save uncompressed PCM data.
            <para>When the sample data is floating-point (BASS_SAMPLE_FLOAT flag is used), the BASS_WMA_ENCODE_24BIT flag is considered; 24-bit data is written with it and 16-bit without. The "bitrate" parameter is ignored, except that it should be non-0.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_SCRIPT">
            <summary>
            Enable the specification of tags mid-stream (after encoding has begun).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_QUEUE">
            <summary>
            Queue data to feed encoder asynchronously
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_SOURCE">
            <summary>
            Use a BASS channel as source
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_VOICE">
            <summary>
            WMA Voice encoding.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_VOICE_MIXED">
            <summary>
            WMA Voice mixed mode encoding.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_RATES_VBR">
            <summary>
            GetRates: get available VBR quality settings.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_WMA_ENCODE_RATES_CBR">
            <summary>
            GetRates: get available CBR quality settings.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncode.BASS_UNICODE">
            <summary>
            file is a Unicode (16-bit characters) filename.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncodeCallback">
            <summary>
            WMA encoding callback flags for use with <see cref="T:Un4seen.Bass.AddOn.Wma.WMENCODEPROC"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncodeCallback.BASS_WMA_ENCODE_HEAD">
            <summary>
            The data in the buffer is the header.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncodeCallback.BASS_WMA_ENCODE_DATA">
            <summary>
            The data in the buffer is encoded sample data.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMAEncodeCallback.BASS_WMA_ENCODE_DONE">
            <summary>
            The encoding has finished... buffer and length will both be <see cref="F:System.IntPtr.Zero"/> resp. 0.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Wma.BASSWMATag">
            <summary>
            The "type" of the tag and values strings for use with <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetTag(System.Int32,System.IntPtr,System.IntPtr,Un4seen.Bass.AddOn.Wma.BASSWMATag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMATag.BASS_WMA_TAG_ANSI">
            <summary>
            ANSI strings.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMATag.BASS_WMA_TAG_UNICODE">
            <summary>
            Unicode (UTF-16) strings (recommended to be used with .Net).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMATag.BASS_WMA_TAG_UTF8">
            <summary>
            UTF-8 strings.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wma.BASSWMATag.BASS_WMA_TAG_BINARY">
            <summary>
            Write a binary tag.
            <para>When using that flag, the length of the binary data is given in the high word, eg. use Utils.MakeLong((int)BASSWMATag.BASS_WMA_TAG_BINARY, binaryLength).</para>
            <para>e.g. call: </para>
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Wma.CLIENTCONNECTPROC">
            <summary>
            User defined client connection notification callback function.
            </summary>
            <param name="handle">The encoder handle (as returned by <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetNotify(System.Int32,Un4seen.Bass.AddOn.Wma.CLIENTCONNECTPROC,System.IntPtr)"/>).</param>
            <param name="ip">The client is connecting?</param>
            <param name="connect">The client's IP address... "xxx.xxx.xxx.xxx:port".</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeSetNotify(System.Int32,Un4seen.Bass.AddOn.Wma.CLIENTCONNECTPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>
            A client connection notification can be used to keep track of who's connected, where they're from, and for long they've been connected.
            </para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
            <example>
            <code lang="C#">
            private CLIENTCONNECTPROC _myClientConnectProc;
            ...
            // set the notification callback
            _myClientConnectProc = new CLIENTCONNECTPROC(MyClientConnectNotify);
            BassWma.BASS_WMA_EncodeSetNotify(encoder, _myClientConnectProc, IntPtr.Zero);
            ...
            // the recording callback
            private void MyClientConnectNotify(int handle, bool connect, string ip, IntPtr user)
            {
              if (connect)
                Console.Writeln( "Connected: {0} at {1}", ip, DateTime.Now );
              else
                Console.Writeln( "Disconnected: {0} at {1}", ip, DateTime.Now );
            }
            </code>
            <code lang="VB">
            Private _myClientConnectProc As CLIENTCONNECTPROC
            ...
            ' set the notification callback
            _myClientConnectProc = New CLIENTCONNECTPROC(AddressOf MyClientConnectNotify)
            BassWma.BASS_WMA_EncodeSetNotify(encoder, _myClientConnectProc, IntPtr.Zero)
            ...
            ' the recording callback
            Private Sub MyClientConnectNotify(handle As Integer, connect As Boolean, ip As String, user As IntPtr)
              If connect Then
                Console.Writeln("Connected: {0} at {1}", ip, DateTime.Now)
              Else
                Console.Writeln("Disconnected: {0} at {1}", ip, DateTime.Now)
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Wma.WMENCODEPROC">
            <summary>
            Encoded data processing callback function.
            </summary>
            <param name="handle">The encoder handle (as returned by <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpen(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,Un4seen.Bass.AddOn.Wma.WMENCODEPROC,System.IntPtr)"/>).</param>
            <param name="type">The type of data to process, one of the following (see <see cref="T:Un4seen.Bass.AddOn.Wma.BASSWMAEncodeCallback"/>):
            <para>BASS_WMA_ENCODE_HEAD : The data in the buffer is the header.</para>
            <para>BASS_WMA_ENCODE_DATA : The data in the buffer is encoded sample data.</para>
            <para>BASS_WMA_ENCODE_DONE : The encoding has finished... buffer and length will both be intPtr.Zero resp. 0.</para>
            </param>
            <param name="buffer">The pointer to the data to process. The buffer can contain the sample data or the header (see above). The sample data is in standard Windows PCM format - 8-bit samples are unsigned, 16-bit samples are signed.</param>
            <param name="length">The number of bytes in the buffer.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpen(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,Un4seen.Bass.AddOn.Wma.WMENCODEPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>
            When encoding begins, an initial header is given. When encoding is completed, an updated header is given (with the duration info, etc.). 
            When encoding to a file (whether that's on disk or not), the initial header should be replaced by the updated one.
            </para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
            <example>
            <code lang="C#">
            // the encoding callback
            private WMENCODEPROC _myEndoderProc;
            private FileStream _fs;
            private byte[] _encbuffer = new byte[1048510]; // 1MB buffer, should be enough
            ...
            // open a wma file
            _fs = File.OpenRead("test.wma");
            // create the encoder (44kHz, stereo at 64kbps, no tags)
            _myEndoderProc = new WMENCODEPROC(MyEncodingWriter);
            int encoder = BassWma.BASS_WMA_EncodeOpen(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                  64000, _myEndoderProc, IntPtr.Zero); 
            ...
            private bool MyEncodingWriter(int handle, BASSWMAEncodeCallback type, IntPtr buffer, int length, IntPtr user)
            {
              if (type == BASSWMAEncodeCallback.BASS_WMA_ENCODE_HEAD)
              {
                // rewind to start of file to write the header	
                _fs.Position = 0L;
              }
            
              if (type == BASSWMAEncodeCallback.BASS_WMA_ENCODE_DONE)
              {
                // done encoding - close the file
                _fs.Flush();
                _fs.Close();
              }
              else
              {
                // copy the unmanaged buffer content to out managed buffer
                Marshal.Copy(buffer, _encbuffer, 0, length);
                // process the data in _encbuffer
                _fs.Write(_encbuffer, 0, length);
              }
            }
            </code>
            <code lang="VB">
            Private _myEndoderProc As WMENCODEPROC
            Private _fs As FileStream
            Private _encbuffer(1048510) As Byte ' 1MB buffer, should be enough
            ...
            ' open a wma file
            _fs = File.OpenRead("test.wma")
            ' create the encoder (44kHz, stereo at 64kbps, no tags)
            _myEndoderProc = New WMENCODEPROC(AddressOf MyEncodingWriter)
            Dim encoder As Integer = BassWma.BASS_WMA_EncodeOpen(44100, 2, BASSWMAEncode.BASS_WMA_ENCODE_DEFAULT, 
                                             64000, _myEndoderProc, IntPtr.Zero)
            ...
            Private Function MyEncodingWriter(handle As Integer, type As BASSWMAEncodeCallback, 
                                              buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              If type = BASSWMAEncodeCallback.BASS_WMA_ENCODE_HEAD Then
                ' rewind to start of file to write the header	
                _fs.Position = 0L.ToUInt32()
              End If
            
              If type = BASSWMAEncodeCallback.BASS_WMA_ENCODE_DONE Then
                ' done encoding - close the file
                _fs.Flush()
                _fs.Close()
              Else
                ' copy the unmanaged buffer content to out managed buffer
                Marshal.Copy(buffer, _encbuffer, 0, length)
                ' process the data in _encbuffer
                _fs.Write(_encbuffer, 0, length)
              End If
            End Function
            </code>
            NOTE: This is just an example. It's obviously simpler to use <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenFile(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String)"/> to encode to a file.
            </example>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Wv.BassWv">
            <summary>
            BASS.NET API wrapper for BASSWV.DLL
            <para>Requires: basswv.dll - WavPack Audio Format (WV) Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSWV is an extension to the BASS audio library, enabling the playback of WavPack files.</para>
            <para>WavPack is a completely open audio compression format providing lossless, high quality lossy, and an unique hybrid compression mode.
            In the default lossless mode WavPack acts just like a WinZip® compressor for audio files. Unlike MP3 or WMA encoding which can affect the sound quality,
            not a single bit of the original information is lost. The hybrid mode provides all the advantages of lossless compression with an additional bonus: instead of creating a single file, this mode creates both a
            relatively small, high quality lossy file that can be used all by itself, and a correction file that, when combined with the lossy file, provides full lossless restoration.</para>
            <para>The WavPack format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Wv.BassWv.BASS_WV_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> / User functions.</para>
            <para>More information can be found on <a href="http://www.wavpack.com">www.wavpack.com</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.BASS_WV_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.BASS_WV_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a WavPack file.
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.BASS_WV_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.BASS_WV_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from a WavPack memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.BASS_WV_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from a WavPack file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.BASS_WV_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.BASS_WV_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from an WavPack file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wv.BassWv.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the basswv.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Wv.BassWv.SupportedStreamName">
            <summary>
            Supported file format name of the basswv.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Wv.BassWv.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Wv.BassWv.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Wv.BassWv.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Adx.BassAdx">
            <summary>
            BASS.NET API wrapper for BASS_ADX.DLL
            <para>Requires: bass_adx.dll - ADX Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS_ADX is an extension to the BASS audio library, enabling the playback	of ADX streams.
            ADX is a lossy proprietary audio storage and compression format developed by CRI Middleware specifically for use in video games, it is derived from ADPCM.</para>
            <para>The ADX format is used in the same way as any of the built-in BASS stream formats. Simply call <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> to load the add-on into BASS and benefit the usage of the standard sample/stream/URL/user functions, or call the <see cref="M:Un4seen.Bass.AddOn.Adx.BassAdx.BASS_ADX_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> /URL/User functions.</para>
            <para>More information can be found on <a href="http://en.wikipedia.org/wiki/ADX_(file_format)">wikipedia</a> and here <a href="http://www.cri-mw.co.jp/products/product_adx_e.htm">ADX product page</a>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.BASS_ADX_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.BASS_ADX_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from an ADX file.
            <para>This overload implements UNICODE filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.BASS_ADX_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.BASS_ADX_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from an ADX memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory streams in bytes which should be played).</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> does - so for details look there.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.BASS_ADX_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from an ADX file via a user callback function.
            </summary>
            <param name="system">File system to use: see <see cref="T:Un4seen.Bass.BASSStreamSystem"/>.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="procs">The user defined file functions (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> does - so for details look there.</remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.BASS_ADX_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.BASS_ADX_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.BASS_ADX_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from an ADX file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
             <param name="url">URL of the file to stream. Should begin with "http://" or "ftp://".</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown.</param>
            <param name="flags">Any combination of these flags: see <see cref="T:Un4seen.Bass.BASSFlag"/>.</param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Works in the same way <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> does - so for details look there.</remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Adx.BassAdx.SupportedStreamExtensions">
            <summary>
            Supported file extensions of the bass_adx.dll
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Adx.BassAdx.SupportedStreamName">
            <summary>
            Supported file format name of the bass_adx.dll
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            <para>The disadvantage of this method is, that the standard plugin support for <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> is not working - so you would need to use the native add-on methods!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Adx.BassAdx.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Adx.BassAdx.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Adx.BassAdx.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Adx.BASS_ADX_TAG_LOOP">
            <summary>
            TAG structure of an ADX block to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            </summary>
            <remarks>Use 'Marshal.PtrToStructure' to convert a tag pointer to this structure.</remarks>
            <example>
            Getting the ADX tag info structure:
            <code lang="C#">
            IntPtr p = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ADX_LOOP);
            if (p != IntPtr.Zero)
            {
              BASS_ADX_TAG_LOOP adxLoop = (BASS_ADX_TAG_LOOP)Marshal.PtrToStructure(p, typeof(BASS_ADX_TAG_LOOP));
              ...
            }
            </code>
            <code lang="VB">
            Dim p As IntPtr = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ADX_LOOP) 
            If p &lt;&gt; IntPtr.Zero Then 
                Dim adxLoop As BASS_ADX_TAG_LOOP = DirectCast(Marshal.PtrToStructure(p, GetType(BASS_ADX_TAG_LOOP)), BASS_ADX_TAG_LOOP) 
                ...
            End If 
            </code>
            Setting a loop according to the ADX tag data (as given in adxLoop):
            <code lang="C#">
            private int _loopSync = 0;
            private SYNCPROC _loopSyncCallback;
            ...
            if (adxLoop.LoopEnabled)
            {
                _loopSyncCallback = new SYNCPROC(LoopSync);
                _loopSync = Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_POS | BASSSync.BASS_SYNC_MIXTIME, 
                                                     adxLoop.ByteEnd, _loopSyncCallback, new IntPtr(adxLoop.ByteStart));
            }
            ...
            // to remove the loop call this
            Bass.Bass.BASS_ChannelRemoveSync(stream, _loopSync);
            ...
            // the sync callback
            private void LoopSync(int syncHandle, int channel, int data, IntPtr user) 
            {
                // move the position to the start (which is given in the user data)
                Bass.BASS_ChannelSetPosition(channel, user.ToInt64());
            }
            </code>
            <code lang="VB">
            Private _loopSync As Integer = 0 
            Private _loopSyncCallback As SYNCPROC 
            ...
            If adxLoop.LoopEnabled Then 
                _loopSyncCallback = New SYNCPROC(AddressOf LoopSync);
                _loopSync = Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_POS Or BASSSync.BASS_SYNC_MIXTIME, 
                                                     adxLoop.ByteEnd, _loopSyncCallback, New IntPtr(adxLoop.ByteStart)) 
            End If
            ...
            ' to remove the loop call this
            Bass.Bass.BASS_ChannelRemoveSync(stream, _loopSync)
            ...
            ' the sync callback
            Private Sub LoopSync(ByVal handle As Integer, ByVal channel As Integer, 
                                 ByVal data As Integer, ByVal user As IntPtr)
                ' move the position to the start (which is given in the user data)
                Bass.BASS_ChannelSetPosition(channel, user.ToInt64())
            End Sub
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Adx.BASS_ADX_TAG_LOOP.LoopEnabled">
            <summary>
            <see langword="true"/>, if looping is enabled - else <see langword="false"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Adx.BASS_ADX_TAG_LOOP.SampleStart">
            <summary>
            The sample start position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Adx.BASS_ADX_TAG_LOOP.ByteStart">
            <summary>
            The byte start position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Adx.BASS_ADX_TAG_LOOP.SampleEnd">
            <summary>
            The sample end position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Adx.BASS_ADX_TAG_LOOP.ByteEnd">
            <summary>
            The byte end position.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Sfx.BassSfx">
            <summary>
            BASS.NET API wrapper for BASS_SPX.DLL
            <para>Requires: bass_sfx.dll - Winamp and Sonique Visualization plugins support Add-On - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BassSfx is an extention to the BASS audio library, providing a set of functions for rendering Sonique Visualization plugins or Winamp visualization plugins on a provided device context (hDC).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_GetVersion">
            <summary>
            Retrieves the version number of the BASS_SFX.DLL that is loaded.
            </summary>
            <returns>The BASS_SFX version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASS_SFX supports all the BASS_SFX functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.AddOn.Sfx.BassSfx.BASSSFXVERSION"/> to check the major revision.</para>
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            Checking the major version only:
            <code lang="C#">
            if ( Utils.HighWord(BassSfx.BASS_SFX_GetVersion()) != BassSfx.BASSSFXVERSION )
            {
              MessageBox.Show(this, "Wrong BassSfx Version!");
            }
            </code>
            <code lang="VB">
            If Utils.HighWord(BassSfx.BASS_SFX_GetVersion()) &lt;&gt; BassSfx.BASSSFXVERSION Then
              MessageBox.Show(Me, "Wrong BassSfx Version!")
            End If
            </code>
            Checking for full version "2.4.1.3":
            <code>
            if (BassSfx.BASS_SFX_GetVersion() &lt; Utils.MakeLong(0x0103, 0x0204))
            {
              MessageBox.Show(this, "Wrong BassSfx Version!");
            }
            </code>
            <code lang="VB">
            If BassSfx.BASS_SFX_GetVersion() &lt; Utils.MakeLong(&amp;H103, &amp;H204) Then
              MessageBox.Show(Me, "Wrong BassSfx Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASS_SFX.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASS_SFX version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASS_SFX supports all the BASS_SFX functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>Note: Calling this method will also automatically load the library into memory.</para>
            </remarks>
            <example>
            <code lang="C#">
            Version expectedVersion = new Version(2, 4);
            if (BassSfx.BASS_SFX_GetVersion(2) &lt; expectedVersion)
            {
              MessageBox.Show( this, "Wrong BassSfx Version!" );
            }
            </code>
            <code lang="VB">
            Dim expectedVersion As New Version(2, 4)
            If BassSfx.BASS_SFX_GetVersion(2) &lt; expectedVersion Then
              MessageBox.Show(Me, "Wrong BassSfx Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)">
            <summary>
            Initialize the SFX library. This will initialize the library for use.
            </summary>
            <param name="hInstance">Your application instance handle (i.e. Process.GetCurrentProcess().Handle).</param>
            <param name="hWnd">Your main windows form handle.</param>
            <returns>If an error occurred then <see langword="false"/> is returned, else <see langword="true"/> is returned.</returns>
            <remarks>Call this method prior to any other BASS_SFX methods.
            <para>Call <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Free"/> to free all resources and before your program exits.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_ALREADY</term><description>Already initialized.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BassSfx.BASS_SFX_Init();
            </code>
            <code lang="VB">
            BassSfx.BASS_SFX_Init()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Free">
            <summary>
            Frees all resources used by SFX.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>This function should be called before your program exits.</remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)">
            <summary>
            Creates a plugin object for use in the SFX.
            </summary>
            <param name="file">The filename and path of the plugin to load.</param>
            <param name="hWnd">The handle of the window where the plugin is to be rendered.</param>
            <param name="width">The initial width for the plugins rendering window.</param>
            <param name="height">The initial height for the plugins rendering window.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXFlag"/>):
            <list type="table">
            <item><term>BASS_SFX_SONIQUE_OPENGL</term><description>Render sonique plugins using OpenGL.</description></item>
            <item><term>BASS_SFX_SONIQUE_OPENGL_DOUBLEBUFFER</term><description>Use OpenGL double buffering with sonique plugins.</description></item>
            </list>
            </param>
            <returns>If successful, the new SFX plugin handle is returned, else 0 is returned.</returns>
            <remarks>
            Once you create a plugin using this function you can perform a number of different function calls on it.
            The <paramref name="width"/> and <paramref name="height"/> parameters are only useful for BassBox, WMP, and Sonique plugins.
            Winamp ignores these parameters so you can just pass in 0 for winamp plugins.
            Windows Media Player plugins can be created using the full path to a dll file or by using the CLSID GUID from the registry.
            <para>Mainly you might use the <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginStart(System.Int32)"/>, <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginSetStream(System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginRender(System.Int32,System.Int32,System.IntPtr)"/> methods.</para>
            <para>Note: This method uses the unicode overload of the native API (BASS_SFX_PluginCreateW).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_FILEOPEN</term><description>Can't open the plugin file.</description></item>
            <item><term>BASS_SFX_ERROR_FORMAT</term><description>Unsupported plugin format.</description></item>
            <item><term>BASS_SFX_ERROR_GUID</term><description>Can't open WMP plugin using specified GUID.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // create a plugin object
            int sfx = BassSfx.BASS_SFX_PluginCreate("corona.svp", pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height, BASSSFXFlag.BASS_SFX_DEFAULT);
            if (sfx != 0)
            {
                // loaded file successfully
                BASS_SFX_PluginStart(sfx);
            }
            </code>
            <code lang="VB">
            ' create a plugin object
            Dim sfx As Integer = BassSfx.BASS_SFX_PluginCreate("corona.svp", pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height, BASSSFXFlag.BASS_SFX_DEFAULT)
            If sfx &lt;&gt; 0 Then 
                ' loaded file successfully
                BASS_SFX_PluginStart(sfx);
            End If 
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginGetType(System.Int32)">
            <summary>
            Get the type of visual plugin loaded.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <returns>If successful, either <see cref="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_SONIQUE"/>, <see cref="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_WINAMP"/>, <see cref="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_WMP"/> or <see cref="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_BBP"/> is returned, else <see cref="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_UNKNOWN"/> is returned.</returns>
            <remarks>
            You must have created a plugin object using <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/> before you can use this function.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            if (BassSfx.BASS_SFX_PluginGetType(sfx) == BASSSFXPlugin.BASS_SFX_WINAMP)
            {
                // a winamp visual plugin was loaded
            }
            else if (BassSfx.BASS_SFX_PluginGetType(sfx) == BASSSFXPlugin.BASS_SFX_SONIQUE)
            {
                // a sonique visual plugin was loaded
            }
            else if (BassSfx.BASS_SFX_PluginGetType(sfx) == BASSSFXPlugin.BASS_SFX_WMP)
            {
                // a WMP visual plugin was loaded
            }
            else if (BassSfx.BASS_SFX_PluginGetType(sfx) == BASSSFXPlugin.BASS_SFX_BBP)
            {
                // a BassBox visual plugin was loaded
            }
            else
            {
                // we have either loaded nothing or an unsupported plugin
            }
            </code>
            <code lang="VB">
            If BassSfx.BASS_SFX_PluginGetType(sfx) = BASSSFXPlugin.BASS_SFX_WINAMP Then 
                ' a winamp visual plugin was loaded 
            ElseIf BassSfx.BASS_SFX_PluginGetType(sfx) = BASSSFXPlugin.BASS_SFX_SONIQUE Then 
                ' a sonique visual plugin was loaded 
            ElseIf BassSfx.BASS_SFX_PluginGetType(sfx) = BASSSFXPlugin.BASS_SFX_WMP Then 
                ' a WMP visual plugin was loaded 
            ElseIf BassSfx.BASS_SFX_PluginGetType(sfx) = BASSSFXPlugin.BASS_SFX_BBP Then 
                ' a BassBox visual plugin was loaded 
            Else 
                ' we have either loaded nothing or an unsupported plugin 
            End If 
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginSetStream(System.Int32,System.Int32)">
            <summary>
            Sets a BASS channel on a SFX plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <param name="channel">The BASS channel to render, can be a HSTREAM or HMUSIC handle.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX or channel handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // create a BASS channel
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT);
            // create a plugin object
            int sfx = BASS_SFX_PluginCreate("corona.svp", pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height, BASSSFXFlag.BASS_SFX_DEFAULT);
            if (sfx != 0 &amp;&amp; stream != 0)
            {
                // loaded file successfully
                if (BASS_SFX_PluginStart(sfx))
                    BASS_SFX_PluginSetStream(sfx, stream);
            }
            </code>
            <code lang="VB">
            ' create a BASS channel
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT);
            ' create a plugin object
            Dim sfx As Integer = BassSfx.BASS_SFX_PluginCreate("corona.svp", pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height, BASSSFXFlag.BASS_SFX_DEFAULT)
            If sfx &lt;&gt; 0 AndAlso stream &lt;&gt; 0 Then 
                ' loaded file successfully
                If BASS_SFX_PluginStart(sfx) Then 
                    BASS_SFX_PluginSetStream(sfx, stream) 
                End If 
            End If 
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginStart(System.Int32)">
            <summary>
            Starts a visual plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>Use <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginStop(System.Int32)"/> to stop a SFX plugin.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // create a BASS channel
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT);
            // create a plugin object
            int sfx = BassSfx.BASS_SFX_PluginCreate("corona.svp", pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height, BASSSFXFlag.BASS_SFX_DEFAULT); 
            if (sfx != 0 &amp;&amp; stream != 0)
            {
                // loaded file successfully
                if (BASS_SFX_PluginStart(sfx))
                    BASS_SFX_PluginSetStream(sfx, stream);
            }
            </code>
            <code lang="VB">
            ' create a BASS channel
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT);
            ' create a plugin object
            Dim sfx As Integer = BassSfx.BASS_SFX_PluginCreate("corona.svp", 320, 240)
            If sfx &lt;&gt; 0 AndAlso stream &lt;&gt; 0 Then 
                ' loaded file successfully
                If BASS_SFX_PluginStart(sfx) Then 
                    BASS_SFX_PluginSetStream(sfx, stream) 
                End If 
            End If 
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginStop(System.Int32)">
            <summary>
            Stops a visual plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>Use <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginStart(System.Int32)"/> to start a SFX plugin.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginFree(System.Int32)">
            <summary>
            Free a sonique visual plugin and resources from memory.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>It is very important to call this function after you are done using a plugin to avoid memory leaks.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginGetNameW(System.Int32)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginGetName(System.Int32)">
            <summary>
            Gets the name of a loaded SFX plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <returns>If successful, the name of the plugin is returned, else <see langword="null"/> is returned.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>Memory error.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // create a plugin object
            int sfx = BassSfx.BASS_SFX_PluginCreate("corona.svp", pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height, BASSSFXFlag.BASS_SFX_DEFAULT);
            if (sfx != 0)
            {
                // get the plugin name
                Console.WriteLine(BassSfx.BASS_SFX_PluginGetName(sfx));
            }
            </code>
            <code lang="VB">
            ' create a plugin object
            Dim sfx As Integer = BassSfx.BASS_SFX_PluginCreate("corona.svp", pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height, BASSSFXFlag.BASS_SFX_DEFAULT)
            If sfx &lt;&gt; 0 Then 
                ' get the plugin name
                Console.WriteLine(BassSfx.BASS_SFX_PluginGetName(sfx));
            End If 
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginConfig(System.Int32)">
            <summary>
            Shows the configuration dialog window for the SFX plugin (Winamp only).
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>Memory error.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginModuleGetCount(System.Int32)">
            <summary>
            Gets the number of modules available in the visual plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <returns>If successful, the number of modules is returned, else -1 is returned.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginModuleGetNameW(System.Int32,System.Int32)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <param name="module"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginModuleGetName(System.Int32,System.Int32)">
            <summary>
            Returns the name of a certain module of a loaded visual plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <param name="module">The module number to get the name from (the first module is 0).</param>
            <returns>The name of the module on success or <see langword="null"/> on error (or if no module with that number exists).</returns>
            <remarks>Visual plugins might provide multiple independent modules. You might get the number of available modules with <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginModuleGetCount(System.Int32)"/>.
            However, you can only start/activate one module at a time for a certain visual plugin.
            <para>Note: Sonique plugins only ever have 1 module. Winamp plugins can have multiple modules. So this call is really only useful for Winamp.</para>
            <para>You can use this method in a setup dialog to list all the available modules of a visual plugin.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>Memory error.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            string name;
            for (int n=0; (name = BassSfx.BASS_SFX_PluginModuleGetName(sfx, n)) != null; n++)
            {
              Console.WriteLine(name);
            }
            </code>
            <code lang="VB">
            Dim n As Integer = 0
            Dim name As String = ""
            While Not (name Is Nothing)
              name = BassSfx.BASS_SFX_PluginModuleGetName(sfx, n)
              n += 1
              If Not (name Is Nothing) Then
                Console.WriteLine(name)
              End If
            End While
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginModuleSetActive(System.Int32,System.Int32)">
            <summary>
            Sets the active module for a visual plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <param name="module">The module number to set active (the first module is 0).</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>Visual plugins might provide multiple independent modules. You might get the number of available modules with <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginModuleGetCount(System.Int32)"/>.
            However, you can only start/activate one module at a time for a certain visual plugin.
            <para>Note: Sonique plugins only ever have 1 module. Winamp plugins can have multiple modules. So this call is really only useful for Winamp.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle or invalid module index.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>Memory error.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginModuleGetActive(System.Int32)">
            <summary>
            Gets the active module for a visual plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <returns>If successful, the active module (zero based index) is returned, else -1 is returned.</returns>
            <remarks>Visual plugins might provide multiple independent modules. You might get the number of available modules with <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginModuleGetCount(System.Int32)"/>.
            However, you can only start/activate one module at a time for a certain visual plugin.
            <para>Note: Sonique plugins only ever have 1 module. Winamp plugins can have multiple modules. So this call is really only useful for Winamp.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginRender(System.Int32,System.Int32,System.IntPtr)">
            <summary>
            Renders a Sonique, BassBox or Windows Media Player visual plugin to a device context.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <param name="channel">The BASS channel to render, can be a HSTREAM or HMUSIC handle.</param>
            <param name="hDC">The device context handle of the control to which you want to render the plugin.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            Only for use with Sonique, BassBox or Windows Media Player plugins.
            <para>A device context handle (hDC) can be obtained using e.g. the System.Drawing.Graphics class.
            E.g. you might get a device context for any control by calling the <see cref="M:System.Windows.Forms.Control.CreateGraphics"/> method.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>Memory error.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginClicked(System.Int32,System.Int32,System.Int32)">
            <summary>
            Calls the 'clicked' function of a Sonique visual plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <param name="x">The x coordinate of the click relative to the top left of your visual window.</param>
            <param name="y">The y coordinate of the click relative to the top left of your visual window.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            This function is only valid for Sonique Visualization plugins.
            You must have created a plugin object using <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/> before you can use this function.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginResize(System.Int32,System.Int32,System.Int32)">
            <summary>
            Resizes a visual plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <param name="width">The new width of your visual window.</param>
            <param name="height">The new height of your visual window.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            You must have created a plugin object using <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/> before you can use this function.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginResizeMove(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            Resizes and moves a visual plugin.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <param name="left">The new left location of your visual window.</param>
            <param name="top">The new top location of your visual window.</param>
            <param name="width">The new width of your visual window.</param>
            <param name="height">The new height of your visual window.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            You must have created a plugin object using <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/> before you can use this function.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginFlags(System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)">
            <summary>
            Modifies and/or retrieves a plugin's flags.
            </summary>
            <param name="handle">The SFX plugin handle (as obtained by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>).</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXFlag"/>):
            <list type="table">
            <item><term>BASS_SFX_SONIQUE_OPENGL</term><description>Render sonique plugins using OpenGL.</description></item>
            <item><term>BASS_SFX_SONIQUE_OPENGL_DOUBLEBUFFER</term><description>Use OpenGL double buffering with sonique plugins.</description></item>
            </list>
            </param>
            <param name="mask">The flags (as above) to modify. Flags that are not included in this are left as they are, so it can be set to 0 (<see cref="F:Un4seen.Bass.AddOn.Sfx.BASSSFXFlag.BASS_SFX_DEFAULT"/>) in order to just retrieve the current flags.</param>
            <returns>If successful, the plugin's updated flags are returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_HANDLE</term><description>Invalid SFX handle.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // set OpenGL flag:
            BassSfx.BASS_SFX_PluginFlags(hsfx, BASSSFXFlag.BASS_SFX_SONIQUE_OPENGL, BASSSFXFlag.BASS_SFX_SONIQUE_OPENGL);
            
            // remove OpenGL flag:
            BassSfx.BASS_SFX_PluginFlags(hsfx, BASSSFXFlag.BASS_SFX_DEFAULT, BASSSFXFlag.BASS_SFX_SONIQUE_OPENGL);
            </code>
            <code lang="VB">
            ' set openGL flag:
            BassSfx.BASS_SFX_PluginFlags(hsfx, BASSSFXFlag.BASS_SFX_SONIQUE_OPENGL, BASSSFXFlag.BASS_SFX_SONIQUE_OPENGL)
            
            ' remove OpenGL flag:
            BassSfx.BASS_SFX_PluginFlags(hsfx, BASSSFXFlag.BASS_SFX_DEFAULT, BASSSFXFlag.BASS_SFX_SONIQUE_OPENGL)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_WMP_GetPluginW(System.Int32,Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO_INTERNAL@)">
            <summary>
            
            </summary>
            <param name="index"></param>
            <param name="info"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_WMP_GetPlugin(System.Int32,Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO)">
            <summary>
            Retrieves information on a registered windows media player plugin.
            </summary>
            <param name="index">The plugin to get the information of... 0 = first.</param>
            <param name="info"><see cref="T:Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO"/> instance where to store the plugin information at.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <remarks>
            This function can be used to enumerate all the available windows media player visualization plugins that are registered on the system.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>Memory error.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>Getting the plugin info:
            <code lang="C#">
            BASS_SFX_PLUGININFO info = new BASS_SFX_PLUGININFO();
            BassSfx.BASS_SFX_WMP_GetPlugin(0, info);
            Console.WriteLine( info.ToString() );
            </code>
            <code lang="VB">
            Dim info As New BASS_SFX_PLUGININFO()
            BassSfx.BASS_SFX_WMP_GetPlugin(0, info)
            Console.WriteLine(info.ToString())
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_WMP_GetPlugin(System.Int32)">
            <summary>
            Retrieves information on a registered windows media player plugin.
            </summary>
            <param name="index">The plugin to get the information of... 0 = first.</param>
            <returns>An instance of the <see cref="T:Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO"/> class on success - else <see langword="null"/>.</returns>
            <remarks>
            This function can be used to enumerate all the available windows media player visualization plugins that are registered on the system.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>Memory error.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>Getting the plugin info:
            <code lang="C#">
            BASS_SFX_PLUGININFO info = BassSfx.BASS_SFX_WMP_GetPlugin(0);
            Console.WriteLine( info.ToString() );
            </code>
            <code lang="VB">
            Dim info As BASS_SFX_PLUGININFO = Bass.BASS_SFX_WMP_GetPlugin(0)
            Console.WriteLine(info.ToString())
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_WMP_GetPluginCount">
            <summary>
            Returns the total number of WMP plugins currently available for use.
            </summary>
            <returns>Number of available windows media plugins.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_WMP_GetPlugin(System.Int32,Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO)"/> internally.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_SFX_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_SFX_ERROR_MEM</term><description>Memory error.</description></item>
            <item><term>BASS_SFX_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_ErrorGetCode">
            <summary>
            Retrieves the error code for the most recent BASS_SFX function call.
            </summary>
            <returns>If no error occured during the last BASS_SFX function call then BASS_SFX_OK is returned, else one of the <see cref="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError"/> values is returned. 
            See the function description for an explanation of what the error code means.</returns>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BassSfx.BASSSFXVERSION">
            <summary>
            Current BASS_SFX version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BassSfx.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Sfx.BASSSFXError">
            <summary>
            BASS_SFX error codes as returned by <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_ErrorGetCode"/> (int).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXError.BASS_SFX_OK">
            <summary>
            All is OK.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXError.BASS_SFX_ERROR_MEM">
            <summary>
            Memory error.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXError.BASS_SFX_ERROR_FILEOPEN">
            <summary>
            Can't open the file.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXError.BASS_SFX_ERROR_HANDLE">
            <summary>
            Invalid handle.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXError.BASS_SFX_ERROR_ALREADY">
            <summary>
            Already initialized.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXError.BASS_SFX_ERROR_FORMAT">
            <summary>
            Unsupported plugin format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXError.BASS_SFX_ERROR_INIT">
            <summary>
            <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_Init(System.IntPtr,System.IntPtr)"/> has not been successfully called.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXError.BASS_SFX_ERROR_GUID">
            <summary>
            Can't open WMP plugin using specified GUID.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXError.BASS_SFX_ERROR_UNKNOWN">
            <summary>
            Some other mystery problem.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin">
            <summary>
            Flag which identifies the type/kind of the visual plugin.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_SONIQUE">
            <summary>
            Sonique visual plugin.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_WINAMP">
            <summary>
            Winamp visual plugin.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_WMP">
            <summary>
            Windows Media Player visual plugin.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_BBP">
            <summary>
            BassBox visual plugin.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXPlugin.BASS_SFX_UNKNOWN">
            <summary>
            An unknown plugin type (not supported).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Sfx.BASSSFXFlag">
            <summary>
            Visual plugin's flags, to be used with <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginFlags(System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXFlag.BASS_SFX_DEFAULT">
            <summary>
            Default flags (use GDI rendering).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXFlag.BASS_SFX_SONIQUE_OPENGL">
            <summary>
            Render sonique plugins using OpenGL.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASSSFXFlag.BASS_SFX_SONIQUE_OPENGL_DOUBLEBUFFER">
            <summary>
            Use OpenGL double buffering.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_WMP_GetPlugin(System.Int32,Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO)"/> to retrieve information on a registered Windows Media Player plugin.
            </summary>
            <remarks>
            This function can be used to enumerate all the available windows media player visualization plugins that are registered on the system.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO.name">
            <summary>
            The description of the plugin.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO.clsid">
            <summary>
            The classid of the windows media player plugin that can be used with <see cref="M:Un4seen.Bass.AddOn.Sfx.BassSfx.BASS_SFX_PluginCreate(System.String,System.IntPtr,System.Int32,System.Int32,Un4seen.Bass.AddOn.Sfx.BASSSFXFlag)"/> to create the plugin for use in BASS_SFX.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.AddOn.Sfx.BASS_SFX_PLUGININFO.ToString">
            <summary>
            The description of the plugin.
            </summary>
            <returns>The description of the plugin.</returns>
        </member>
        <member name="T:Un4seen.Bass.BassNet">
            <summary>
            Bass.Net class.
            <para>Contains a few optional and global settings.</para>
            </summary>
            <remarks>
            <para>When you purchased a valid license for BASS.NET you will obtain a 'Registration-Key' together with your 'eMail'.
            Call the <see cref="M:Un4seen.Bass.BassNet.Registration(System.String,System.String)"/> method prior to any other BASS method with these 2 parameters in order to register your product.</para>
            </remarks>
            <example>
            Register BASS.NET:
            <code lang="C#">
            BassNet.Registration("your emai", "your registration code");
            ...
            Bass.Init(...);
            </code>
            Register BASS.NET, but show splash anyhow (for 30sec., center parent, 5% transparent):
            <code lang="C#">
            BassNet.Registration("your email", "your registration code");
            BassNet.ShowSplash(this, 30000, 0.95, 2);
            ...
            Bass.Init(...);
            </code>
            <code lang="VB">
            BassNet.Registration("your email", "your registration code") 
            BassNet.ShowSplash(Me, 30000, 0.95, 2) 
            ...
            Bass.Init(...) 
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.BassNet.#ctor">
            <summary>
            NOT needed - all members are static.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BassNet.#cctor">
            <summary>
            Base static contructor.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BassNet.InternalName">
            <summary>
            Gets the internal name, which the productname and version.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BassNet.OmitCheckVersion">
            <summary>
            Gets or Sets, if the version check should be omitted when initializing Bass, BassWaspi or BassAsio.
            </summary>
            <remarks>
            By default a version check is performed whenever Bass, BassWaspi or BassAsio is initialized.
            However, this automatic version check might sometimes not be desired,
            in such case you might want to set this property to <see langword="true"/>.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BassNet.UseBrokenLatin1Behavior">
            <summary>
            Gets or Sets whether or not to use a broken behavior for Latin-1 strings (e.g. common to ID3v1 and ID3v2 tags).
            </summary>
            <value>
            <see langword="true" /> if the broken behavior is to be used. Otherwise, <see langword="false" />.</value>
            <remarks>
            Many media players and taggers incorrectly treat Latin-1 fields as "default encoding" fields. As such, a
            tag may end up with Windows-1250 resp. Windows-1252 encoded text.
            While this problem would be apparent when moving a file from one computer to another, it would not be apparent on the original machine.
            By setting this property to <see langword="true" />, your program will behave like Windows Media Player and others,
            who read tags with this broken behavior.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BassNet.UseRiffInfoUTF8">
            <summary>
            Gets or Sets whether or not to use UTF-8 strings when reading RIFF INFO (LIST INFO) chunks.
            </summary>
            <value>
            <see langword="true" /> if UTF-8 is to be used. Otherwise, <see langword="false" />.</value>
            <remarks>
            Some media players and taggers incorrectly use UTF-8 strings for RIFF INFO (LIST INFO) chunks instead of "Latin1".
            By setting this property to <see langword="true" />, your program will read any RIFF INFO (LIST INFO) chunks as UTF-8 strings.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BassNet.Registration(System.String,System.String)">
            <summary>
            Registers your BASS.NET version and suppresses the freeware splash screen.
            </summary>
            <param name="eMail">Your eMail address for which you obtained a license.</param>
            <param name="registrationKey">The Registration-Key as obtained with the license.</param>
            <remarks>IMPORTANT: Make sure to call this method prior to any other BASS method!</remarks>
        </member>
        <member name="P:Un4seen.Bass.BassNet.IsRegistered">
            <summary>
            for internal use only
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Bass">
            <summary>
            BASS.NET API wrapper for BASS.DLL
            <para>Requires: bass.dll - Bass Audio Library - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASS is an audio library for use in Windows and MacOSX software. It's purpose is to provide the most powerful and efficient (yet easy to use),
            sample, stream, MOD music, and recording functions. All in a tiny DLL, under 100KB in size.</para>
            <para>BASS requires DirectX 3 or above for output. BASS does not require that a	soundcard with DirectSound/DirectSound3D hardware accelerated drivers is
            installed, but it does improve performance if there is one. BASS also takes advantage of MMX, which improves the performance of the MOD music playback</para>
            <para>There is no guarantee that all future BASS versions will be compatible with all previous versions, so your program should use <see cref="M:Un4seen.Bass.Bass.BASS_GetVersion"/> to check the version that is loaded. 
            This also means that you should put the BASS module in the same directory as your executable (not just somewhere in the path), to avoid the possibility of a wrong version being loaded.</para>
            <para>There is no need to create an instance of this class, since all Bass methods are declared as static.</para>
            </remarks>
            <example>My first BASS application:
            <code lang="C#">
            using System;
            using Un4seen.Bass;
            
            namespace MyFirstBass
            {
              class Program
              {
                static void Main(string[] args)
                {
                  // init BASS using the default output device
                  if ( Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero) )
                  {
                    // create a stream channel from a file
                    int stream = Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT);
                    if (stream != 0)
                    {
                      // play the stream channel
                      Bass.BASS_ChannelPlay(stream, false);
                    }
                    else
                    {
                      // error creating the stream
                      Console.WriteLine("Stream error: {0}", Bass.BASS_ErrorGetCode());
                    }
            
                    // wait for a key
                    Console.WriteLine("Press any key to exit");
                    Console.ReadKey(false);
            
                    // free the stream
                    Bass.BASS_StreamFree(stream);
                    // free BASS
                    Bass.BASS_Free();
                  }
                }
              }
            }
            </code>
            <code lang="VB">
            Imports System
            Imports Un4seen.Bass
            
            Namespace MyFirstBass
              Class Program
                Shared  Sub Main(ByVal args() As String)
                  ' init BASS using the default output device
                  If Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero) Then
                    ' create a stream channel from a file
                    Dim stream As Integer =  Bass.BASS_StreamCreateFile("test.mp3", 0L, 0L, BASSFlag.BASS_DEFAULT) 
                    If stream &lt;&gt; 0 Then
                      ' play the stream channel
                      Bass.BASS_ChannelPlay(stream, False)
                    Else 
                      ' error creating the stream
                      Console.WriteLine("Stream error: {0}", Bass.BASS_ErrorGetCode())
                    End If
            
                    ' wait for a key
                    Console.WriteLine("Press any key to exit")
                    Console.ReadKey(False)
            
                    ' free the stream
                    Bass.BASS_StreamFree(stream)
                    ' free BASS
                    Bass.BASS_Free()
                  End If
                End Sub
              End Class
            End Namespace
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.#cctor">
            <summary>
            Base static contructor.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Bass.UsesMediaFoundation">
            <summary>
            Gets, if BASS leverages additional Windows Media Foundation audio codecs as installed with the OS.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Bass.UsesCoreAudio">
            <summary>
            Gets, if BASS leverages additional Apple Core Audio Format audio codecs as installed with the OS (MacOSX only).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="device"></param>
            <param name="freq"></param>
            <param name="flags"></param>
            <param name="win"></param>
            <param name="clsid"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr)">
            <summary>
            Initializes an output device.
            </summary>
            <param name="device">The device to use... -1 = default device, 0 = no sound, 1 = first real output device.
            <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceCount"/> can be used to get the total number of devices.
            </param>
            <param name="freq">Output sample rate.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSInit"/>):
            <list type="table">
            <item><term>BASS_DEVICE_16BITS</term><description>Limit the output to 16-bit.</description></item>
            <item><term>BASS_DEVICE_MONO</term><description>Use mono, else stereo.</description></item>
            <item><term>BASS_DEVICE_STEREO</term><description>Limit the output to stereo, saving some CPU if the device has more speakers available.</description></item>
            <item><term>BASS_DEVICE_NOSPEAKER</term><description>Ignore 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.</description></item>
            <item><term>BASS_DEVICE_FREQ</term><description>Set the device's output rate to <paramref name="freq"/>, otherwise leave it as it is.</description></item>
            <item><term>BASS_DEVICE_DSOUND</term><description>Initialize the device to use the old DirectSound output system instead of WASAPI. If WASAPI is not available (pre-Vista Windows), then this will be applied automatically.</description></item>
            <item><term>BASS_DEVICE_AUDIOTRACK</term><description>Initialize the device to use AudioTrack output instead of OpenSL ES. If OpenSL ES is not available (pre-2.3 Android), then this will be applied automatically.</description></item>
            <item><term>BASS_DEVICE_DMIX</term><description>Linux only: Initialize the device using the ALSA "dmix" plugin, else initialize the device for exclusive access.</description></item>
            <item><term>BASS_DEVICE_SOFTWARE</term><description>Disable hardware/fastpath output.</description></item>
            <item><term>BASS_DEVICE_REINIT</term><description>Reinitialize the device while retaining the device's existing BASS channels and 3D settings. This flag cannot be used with device -1.</description></item>
            </list>
            </param>
            <param name="win">The application's main window... <see cref="F:System.IntPtr.Zero"/> = the desktop window (use this for console applications).</param>
            <returns>If the device was successfully initialized, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>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.</para>
            <para>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. <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.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.</para>
            <para>When using the default device (device = -1), <see cref="M:Un4seen.Bass.Bass.BASS_GetDevice"/> can be used to find out which device it was mapped to.</para>
            <para>The <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DEV_BUFFER"/> and <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DEV_PERIOD"/> config options determine how much data is buffered for the device and how often it is updated.</para>
            <para>When the BASS_DEVICE_REINIT flag is specified to request reinitialization, any BASS channels that were playing prior will continue to do so, if successful. But there is likely to be a small interruption to the sound, so it is best to reinitialize while nothing is playing. 
            If reinitialization fails then playback will be paused and the device will be left in a partially-freed state. Reinitialization could be tried again with different parameters or <see cref="M:Un4seen.Bass.Bass.BASS_Free"/> used to fully free the device. Until <see cref="M:Un4seen.Bass.Bass.BASS_Free"/> is used, the device's BASS channels will still exist and can be moved to another device via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDevice(System.Int32,System.Int32)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DX</term><description>DirectX (or ALSA) is not installed.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>The device has already been initialized. You must call <see cref="M:Un4seen.Bass.Bass.BASS_Free"/> before you can initialize it again.</description></item>
            <item><term>BASS_ERROR_DRIVER</term><description>There is no available device driver... the device may already be in use.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The specified format is not supported by the device. Try changing the <paramref name="freq"/> and <paramref name="flags"/> parameters.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The device has no 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The sample format specified in the freq and flags parameters has no effect on the output on macOS or iOS, or Windows Vista and above - the device's native sample format is automatically used. On Linux, the output device will use the specified format if possible, but will otherwise use a format as close to it as possible. On Android, the device's native sample rate (as reported by the AudioTrack getNativeOutputSampleRate method) will be used unless the BASS_DEVICE_FREQ flag is specified, in which case the freq parameter will be used (this only affects BASS's output format, not the device's output format). If the BASS_DEVICE_FREQ flag is specified on macOS or iOS 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 can be used to check what the output format actually is.</para>
            <para>On Android, when the BASS_DEVICE_AUDIOTRACK flag is not specified, AAudio or OpenSL ES output may be used depending on the BASS_CONFIG_ANDROID_AAUDIO config option setting. AAudio has a low latency mode, which will be enabled when BASS_CONFIG_DEV_BUFFER is set below 50.</para>
            <para>The win parameter is only used with DirectSound output on Windows and is ignored in all other cases. The BASS_DEVICE_STEREO flag is ignored on macOS and Windows, except when using DirectSound output.</para>
            <para>The BASS_DEVICE_SOFTWARE flag is only used on Windows to disable DirectSound hardware mixing and on Android to disable AAudio fastpath output.</para>
            <para>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 and the initflags.</para>
            </remarks>
            <example>
            Initialize BASS with the current form window handle:
            <code lang="C#">
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
            </code>
            <code lang="VB">
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_IsStarted">
            <summary>
            Checks if the output has been started and is active.
            </summary>
            <returns>If the device has not been started, 0 is returned. If the device has been started, 1 is returned if it is currently active and 2 is returned if it is inactive (nothing is playing and <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DEV_NONSTOP"/> is disabled).</returns>
            <remarks>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.
            <para><b>Platform-specific:</b> On iOS, the return value may be 3 to indicate that the app's audio is currently interrupted, but only if the output was started prior to the interruption.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetDeviceInfoInternal(System.Int32,Un4seen.Bass.BASS_DEVICEINFO_INTERNAL@)">
            <summary>
            
            </summary>
            <param name="device"></param>
            <param name="info"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)">
            <summary>
            Retrieves information on an output device.
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <param name="info">An instance of the <see cref="T:Un4seen.Bass.BASS_DEVICEINFO"/> class to store the information at.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function can be used to enumerate the available devices for a setup dialog. 
            Device 0 is always the "no sound" device, so if you should start at device 1 if you only want to list real devices.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>On Linux, a "Default" device is hardcoded to device number 1, which uses the default output set in the ALSA config, and the real devices start at number 2.
            That is also the case on Windows when the BASS_CONFIG_DEV_DEFAULT option is enabled (default).</para>
            <para>On OSX, the BASS_DEVICES_AIRPLAY flag can be used in the <paramref name="device"/> paramater to enumerate Airplay receivers instead of soundcards. 
            A shared buffer is used for the Airplay receiver name information, which gets overwritten each time Airplay receiver information is requested, so it should be copied if needed. 
            The BASS_CONFIG_AIRPLAY config option can be used to change which of the receiver(s) are used.</para>
            </remarks>
            <example>
            List all available devices:
            <code lang="C#">
            BASS_DEVICEINFO info = new BASS_DEVICEINFO();
            for (int n=0; Bass.BASS_GetDeviceInfo(n, info); n++)
            {
              Console.WriteLine(info.ToString());
            }
            </code>
            <code lang="VB">
            Dim n As Integer = 0
            Dim info As New BASS_DEVICEINFO()
            While (Bass.BASS_GetDeviceInfo(n, info))
              Console.WriteLine(info.ToString())
              n += 1
            End While
            </code>
            Or use the <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfos"/> method for more convenience.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32)">
            <summary>
            Retrieves information on an output device.
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <returns>If successful, then an instance of the <see cref="T:Un4seen.Bass.BASS_DEVICEINFO"/> class is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function can be used to enumerate the available devices for a setup dialog. 
            Device 0 is always the "no sound" device, so if you should start at device 1 if you only want to list real devices.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>On Linux, a "Default" device is hardcoded to device number 1, which uses the default output set in the ALSA config, and the real devices start at number 2.</para>
            </remarks>
            <example>Find the system default device:
            <code lang="C#">
            int defDevice = -1;
            BASS_DEVICEINFO info;
            for (int n = 0; (info = Bass.BASS_GetDeviceInfo(n)) != null; n++)
            {
              if (info.IsDefault)
              {
                defDevice = n;
                break;
              }
            }
            </code>
            <code lang="VB">
            Dim defDevice As Integer = -1
            Dim n As Integer = 0
            Dim info As New BASS_DEVICEINFO()
            While Not (info Is Nothing)
              info = Bass.BASS_GetDeviceDescription(n)
              If Not (info Is Nothing) And info.IsDefault Then
                defDevice = n
                Exit While
              End If
              n += 1
            End While
            </code>
            Or use the <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfos"/> method for more convenience.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetDeviceInfos">
            <summary>
            Returns all available output devices.
            </summary>
            <returns>An array of <see cref="T:Un4seen.Bass.BASS_DEVICEINFO"/> elements representing the available output devices.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetDeviceCount">
            <summary>
            Returns the total number of available output devices.
            </summary>
            <returns>Number of real output devices available.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)">
            <summary>
            Retrieves information on the device being used.
            </summary>
            <param name="info">An instance of the <see cref="T:Un4seen.Bass.BASS_INFO"/> class to store the information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            if ( Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle) )
            {
              BASS_INFO info = new BASS_INFO();
              if (Bass.BASS_GetInfo(info))
                Console.WriteLine( info.ToString() );
            }
            </code>
            <code lang="VB">
            If Bass.BASS_Init(- 1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle) Then
              Dim info As New BASS_INFO()
              If Bass.BASS_GetInfo(info) Then
                Console.WriteLine(info.ToString())
              End If
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetInfo">
            <summary>
            Retrieves information on the device being used.
            </summary>
            <returns>An instance of the <see cref="T:Un4seen.Bass.BASS_INFO"/> class on success - or <see langword="null"/> on error.</returns>
            <remarks>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Check if the current device has DirectSound support:
            <code lang="C#">
            if ( Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle) )
            {
              BASS_INFO info = Bass.BASS_GetInfo();
              if (info != null &amp;&amp; !info.SupportsDirectSound)
                Console.WriteLine("Device does NOT have DirectSound support");
            }
            </code>
            <code lang="VB">
            If Bass.BASS_Init(- 1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle) Then
              Dim info As BASS_INFO = Bass.BASS_GetInfo()
              If info IsNot Nothing AndAlso Not info.SupportsDirectSound Then
                Console.WriteLine("Device does NOT have DirectSound support")
              End If
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ErrorGetCode">
            <summary>
            Retrieves the error code for the most recent BASS function call in the current thread.
            </summary>
            <returns>If no error occured during the last BASS function call then BASS_OK is returned, else one of the <see cref="T:Un4seen.Bass.BASSError"/> values is returned. 
            See the function description for an explanation of what the error code means.</returns>
            <remarks>Error codes are stored for each thread. So if you happen to call 2 or more BASS functions at the same time, they will not interfere with eachother's error codes.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Stop">
            <summary>
            Stops the output, stopping all musics/samples/streams.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function can be used after <see cref="M:Un4seen.Bass.Bass.BASS_Pause"/> to stop the paused channels, so that they will not be resumed the next time <see cref="M:Un4seen.Bass.Bass.BASS_Start"/> is called.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Free">
            <summary>
            Frees all resources used by the output device, including all it's samples, streams, and MOD musics.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function should be called for all initialized devices before your program exits. It's not necessary to individually free the samples/streams/musics as these are all automatically freed by this function.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // init device 1 and 2
            Bass.BASS_Init(1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
            Bass.BASS_Init(2, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
            ...
            // create the stream for device 1
            Bass.BASS_SetDevice(1);
            int stream = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            ...
            // create the stream for device 2
            Bass.BASS_SetDevice(2);
            int stream = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            ...
            // free any initialized device
            Bass.BASS_SetDevice(1);
            Bass.BASS_Free();
            Bass.BASS_SetDevice(2);
            Bass.BASS_Free();
            </code>
            <code lang="VB">
            ' init device 1 and 2
            Bass.BASS_Init(1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
            Bass.BASS_Init(2, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
            ...
            ' create the stream for device 1
            Bass.BASS_SetDevice(1)
            Dim stream As Integer = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            ' create the stream for device 2
            Bass.BASS_SetDevice(2)
            Dim stream As Integer = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            ...
            ' free any initialized device
            Bass.BASS_SetDevice(1)
            Bass.BASS_Free()
            Bass.BASS_SetDevice(2)
            Bass.BASS_Free()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetVersion">
            <summary>
            Retrieves the version number of the BASS.DLL that is loaded.
            </summary>
            <returns>The BASS version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASS supports all the BASS functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.Bass.Bass.BASSVERSION"/> to check the major revision.</para>
            </remarks>
            <example>
            Checking the major version only:
            <code lang="C#">
            if ( Utils.HighWord(Bass.BASS_GetVersion()) != Bass.BASSVERSION )
            {
              MessageBox.Show(this, "Wrong Bass Version!");
            }
            </code>
            <code lang="VB">
            If Utils.HighWord(Bass.BASS_GetVersion()) &lt;&gt; Bass.BASSVERSION Then
              MessageBox.Show(Me, "Wrong Bass Version!")
            End If
            </code>
            Checking for full version "2.4.1.3":
            <code>
            if (Bass.BASS_GetVersion() &lt; Utils.MakeLong(0x0103, 0x0204))
            {
              MessageBox.Show(this, "Wrong Bass Version!");
            }
            </code>
            <code lang="VB">
            If Bass.BASS_GetVersion() &lt; Utils.MakeLong(&amp;H103, &amp;H204) Then
              MessageBox.Show(Me, "Wrong Bass Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASS.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASS version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASS supports all the BASS functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.</remarks>
            <example>
            <code lang="C#">
            Version expectedVersion = new Version(2, 4);
            if (Bass.BASS_GetVersion(2) &lt; expectedVersion)
            {
              MessageBox.Show( this, "Wrong Bass Version!" );
            }
            </code>
            <code lang="VB">
            Dim expectedVersion As New Version(2, 4)
            If Bass.BASS_GetVersion(2) &lt; expectedVersion Then
              MessageBox.Show(Me, "Wrong Bass Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)">
            <summary>
            Sets the device to use for subsequent calls in the current thread.
            </summary>
            <param name="device">The device to use... 0 = no sound, 1 = first real output device.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>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. The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.</para>
            <para>The functions that use the device selection are the following: 
            <see cref="M:Un4seen.Bass.Bass.BASS_Free"/>, <see cref="M:Un4seen.Bass.Bass.BASS_GetDSoundObject(System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Start"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Pause"/>, <see cref="M:Un4seen.Bass.Bass.BASS_SetVolume(System.Single)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_GetVolume"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Set3DFactors(System.Single,System.Single,System.Single)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Get3DFactors(System.Single@,System.Single@,System.Single@)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Set3DPosition(Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Get3DPosition(Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>. 
            It also determines which device is used by a new sample/stream/music: <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_SampleLoad(System.String,System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, etc...</para>
            <para>When one of the above functions (or <see cref="M:Un4seen.Bass.Bass.BASS_GetDevice"/>) is called, BASS will check the current thread's device setting, and if no device is selected (or the selected device is not initialized), BASS will automatically select the lowest device that is initialized. This means that when using a single device, there is no need to use this function; BASS will automatically use the device that is initialized. Even if you free the device, and initialize another, BASS will automatically switch to the one that is initialized.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="device"/> is invalid.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The device has not been initialized.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // init device 1 and 2
            Bass.BASS_Init(1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
            // now device 1 is the current one
            Bass.BASS_Init(2, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
            // now device 2 is the current one
            ...
            // create the stream for device 1
            Bass.BASS_SetDevice(1);
            // now device 1 is the current one
            int stream = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            ...
            // create the stream for device 2
            Bass.BASS_SetDevice(2);
            // now device 2 is the current one
            int stream = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            ...
            // free any initialized device
            Bass.BASS_SetDevice(1);
            Bass.BASS_Free();
            Bass.BASS_SetDevice(2);
            Bass.BASS_Free();
            </code>
            <code lang="VB">
            ' init device 1 and 2
            Bass.BASS_Init(1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
            ' now device 1 is the current one
            Bass.BASS_Init(2, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
            ' now device 2 is the current one
            ...
            ' create the stream for device 1
            Bass.BASS_SetDevice(1)
            ' now device 1 is the current one
            Dim stream As Integer = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            ' create the stream for device 2
            Bass.BASS_SetDevice(2)
            ' now device 2 is the current one
            Dim stream As Integer = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            ...
            ' free any initialized device
            Bass.BASS_SetDevice(1)
            Bass.BASS_Free()
            Bass.BASS_SetDevice(2)
            Bass.BASS_Free()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetDevice">
            <summary>
            Retrieves the device setting in the current thread.
            </summary>
            <returns>If successful, the device number is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/>to get the error code.</returns>
            <remarks>See also <seealso cref="M:Un4seen.Bass.Bass.BASS_ChannelGetDevice(System.Int32)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called - there are no initialized devices.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetDSoundObject(System.Int32)">
            <summary>
            Retrieves a pointer to a DirectSound object interface.
            <para>Not recommended to be used by managed applications!</para>
            </summary>
            <param name="handle">The interface to retrieve.
            <para>This can be a HMUSIC / HSTREAM / HCHANNEL handle, in which case an IDirectSoundBuffer interface is returned, or one of the following (see <see cref="T:Un4seen.Bass.BASSDirectSound"/>):</para>
            <list type="table">
            <item><term>BASS_OBJECT_DS</term><description>Retrieve the IDirectSound interface.</description></item>
            <item><term>BASS_OBJECT_DS3DL</term><description>Retrieve the IDirectSound3DListener interface.</description></item>
            </list>
            </param>
            <returns>If succesful, then a pointer to the requested object is returned, otherwise <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function allows those that are familiar with DirectSound to access the internal DirectSound object interfaces, so that extra external functionality can be "plugged" into BASS. If you create any objects through a retrieved interface, make sure you release the objects before calling <see cref="M:Un4seen.Bass.Bass.BASS_Free"/>.</para>
            <para>See the DirectX SDK for information on the DirectSound interfaces.</para>
            <para>When using multiple devices, and requesting either the BASS_OBJECT_DS or BASS_OBJECT_DS3DL object interfaces, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="handle"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested object is not available with the current device.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetDSoundObject(Un4seen.Bass.BASSDirectSound)">
            <summary>
            Retrieves a pointer to a DirectSound object interface.
            <para>Not recommended to be used by managed applications!</para>
            </summary>
            <param name="dsobject">The interface to retrieve.
            <para>This can be a HMUSIC / HSTREAM / HCHANNEL handle, in which case an IDirectSoundBuffer interface is returned, or one of the following (see <see cref="T:Un4seen.Bass.BASSDirectSound"/>):</para>
            <list type="table">
            <item><term>BASS_OBJECT_DS</term><description>Retrieve the IDirectSound interface.</description></item>
            <item><term>BASS_OBJECT_DS3DL</term><description>Retrieve the IDirectSound3DListener interface.</description></item>
            </list>
            </param>
            <returns>If succesful, then a pointer to the requested object is returned, otherwise <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function allows those that are familiar with DirectSound to access the internal DirectSound object interfaces, so that extra external functionality can be "plugged" into BASS. If you create any objects through a retrieved interface, make sure you release the objects before calling <see cref="M:Un4seen.Bass.Bass.BASS_Free"/>.</para>
            <para>See the DirectX SDK for information on the DirectSound interfaces.</para>
            <para>When using multiple devices, and requesting either the BASS_OBJECT_DS or BASS_OBJECT_DS3DL object interfaces, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="dsobject"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested object is not available with the current device.</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>DirectSound is a Windows thing, so this function is not available on other platforms.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)">
            <summary>
            "Manually" updates the HSTREAM and HMUSIC channel buffers.
            </summary>
            <param name="length">The amount to render, in milliseconds.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            When automatic updating is disabled, this function (or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/>) needs to be called to keep the playback buffers updated. 
            The length parameter should include some safety margin, in case the next update cycle gets delayed. 
            For example, if calling this function every 100ms, 200 would be a reasonable length parameter.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Updating is already in progress.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetCPU">
            <summary>
            Retrieves the current CPU usage of BASS.
            </summary>
            <returns>The BASS CPU usage as a percentage of total CPU time.</returns>
            <remarks>
            <para>This function includes the time taken to render stream (HSTREAM) and MOD music (HMUSIC) channels during playback, and any DSP functions set on those channels. Also, any FX that are not using the "with FX flag" DX8 effect implementation.</para>
            <para>The rendering of some add-on stream formats may not be entirely included, if they use additional decoding threads. See the add-on documentation for details.</para>
            <para>This function does not strictly tell the CPU usage, but rather how timely the buffer updates are. For example, if it takes 10ms to render 100ms of data, that would be 10%. If the reported usage gets to 100%, that means the channel data is being played faster than it can be rendered, and buffer underruns are likely to occur.</para>
            <para>If automatic updating is disabled, then the value returned by this function is only updated after each call to <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/>. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> usage is not included.</para>
            <para><b>Platform-specific</b></para>
            <para>On Windows, the CPU usage does not include sample channels (HCHANNEL), which are mixed by the output device/drivers (hardware mixing) or Windows (software mixing). On other platforms, the CPU usage does include sample playback as well as the generation of the final output mix.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Start">
            <summary>
            Starts (or resumes) the output.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The output is automatically started by <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>, so there is no need to use this function unless you've stopped or paused the output.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Pause">
            <summary>
            Stops the output, pausing all musics/samples/streams.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_Start"/> to resume the output and paused channels.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SetVolume(System.Single)">
            <summary>
            Sets the output master volume.
            </summary>
            <param name="volume">The volume level... 0 (silent) to 1 (max).</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            The actual volume level may not be exactly the same as requested, due to underlying precision differences. 
            <see cref="M:Un4seen.Bass.Bass.BASS_GetVolume"/> can be used to confirm what the volume is.
            <para>This function affects the volume level of all applications using the same output device. 
            If you wish to only affect the level of your app's sounds, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/> and/or the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_GVOL_MUSIC / BASS_CONFIG_GVOL_SAMPLE / BASS_CONFIG_GVOL_STREAM</see> config options should be used instead.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There is no volume control when using the "no sound" device.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="volume"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetVolume">
            <summary>
            Retrieves the current master volume level.
            </summary>
            <returns>If successful, the volume level is returned, else -1.0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The volume level... 0 (silent) to 1 (max) will be returned.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There is no volume control when using the "no sound" device.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">
            <summary>
            Sets the value of a config option.
            </summary>
            <param name="option">The option to set the value of... one of the following (<see cref="T:Un4seen.Bass.BASSConfig"/>).</param>
            <param name="newvalue">The new option value (as an int). See the option's documentation for details on the possible values.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Other config options may be supported by Add-Ons, see the documentation.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="option"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Setting the playback buffer to 100ms and the update period to 20ms:
            <code lang="C#">
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER, 100);
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_UPDATEPERIOD, 20);
            </code>
            <code lang="VB">
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER, 100)
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_UPDATEPERIOD, 20)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Boolean)">
            <summary>
            Sets the value of a config option.
            </summary>
            <param name="option">The option to set the value of... one of the following (<see cref="T:Un4seen.Bass.BASSConfig"/>).</param>
            <param name="newvalue">The new option value (as a bool). See the option's documentation for details on the possible values.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Other config options may be supported by Add-Ons, see the documentation.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="option"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Setting the DSP processing to 32-bit float:
            <code lang="C#">
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_FLOATDSP, true);
            </code>
            <code lang="VB">
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_FLOATDSP, True)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SetConfigPtr(Un4seen.Bass.BASSConfig,System.IntPtr)">
            <summary>
            Sets the value of a pointer config option.
            </summary>
            <param name="option">The option to set the value of... one of the following (<see cref="T:Un4seen.Bass.BASSConfig"/>).</param>
            <param name="newvalue">The new option value (as an IntPtr). See the option's documentation for details on the possible values.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Other config options may be supported by Add-Ons, see the documentation.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="option"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            As the BASS_CONFIG_NET_PROXY and BASS_CONFIG_NET_AGENT options take a pointer to an ANSI string as an argument (unless you add the BASS_UNICODE flag).
            Alternatively you might also use the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfigString(Un4seen.Bass.BASSConfig,System.String)"/> method, which always supports unicode.
            <para>The following example copies the contents of a managed String into unmanaged memory:</para>
            <code lang="C#">
            // create an unmanaged pointer containing a copy of the string
            IntPtr myUserAgentPtr = Marshal.StringToHGlobalAnsi("radio42");
            Bass.BASS_SetConfigPtr(BASSConfig.BASS_CONFIG_NET_AGENT, myUserAgentPtr);
            // make sure to free the myUserAgentPtr!
            Marshal.FreeHGlobal(myUserAgentPtr);
            </code>
            <code lang="VB">
            ' create an unmanaged pointer containing a copy of the string
            Dim myUserAgentPtr As IntPtr = Marshal.StringToHGlobalAnsi("radio42")
            Bass.BASS_SetConfigPtr(BASSConfig.BASS_CONFIG_NET_AGENT, myUserAgentPtr)
            ' make sure to free the myUserAgentPtr!
            Marshal.FreeHGlobal(myUserAgentPtr)
            </code>
            If you need to dynamically change the BASS_CONFIG_NET_PROXY or BASS_CONFIG_NET_AGENT option, 
            you will need to call <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> each time again!
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SetConfigString(Un4seen.Bass.BASSConfig,System.String)">
            <summary>
            Sets the value of a string config option.
            </summary>
            <param name="option">The option to set the value of... one of the following (<see cref="T:Un4seen.Bass.BASSConfig"/>; the BASS_UNICODE flag is added automatically).</param>
            <param name="newvalue">The new option value (as a unicode string). See the option's documentation for details on the possible values.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Other config options may be supported by Add-Ons, see the documentation.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="option"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_SetConfigPtr(BASSConfig.BASS_CONFIG_NET_AGENT, "radio42");
            </code>
            <code lang="VB">
            Bass.BASS_SetConfigPtr(BASSConfig.BASS_CONFIG_NET_AGENT, "radio42")
            </code>
            If you need to change the BASS_CONFIG_NET_PROXY or BASS_CONFIG_NET_AGENT option, 
            you will need to call <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> again!
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)">
            <summary>
            Retrieves the value of a config option.
            </summary>
            <param name="option">The option to get the value of... one of the following (<see cref="T:Un4seen.Bass.BASSConfig"/>).</param>
            <returns>If successful, the value of the requested config option is returned (as an int), else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Other config options may be supported by Add-Ons, see the documentation.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="option"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Getting the current playback buffer length:
            <code lang="C#">
            int bufLen = Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER);
            </code>
            <code lang="VB">
            Dim bufLen As Integer = Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetConfigBool(Un4seen.Bass.BASSConfig)">
            <summary>
            Retrieves the value of a config option as a bool.
            </summary>
            <param name="option">The option to get the value of... one of the following (<see cref="T:Un4seen.Bass.BASSConfig"/>).</param>
            <returns>If successful, the value of the requested config option is returned (as a bool). Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Other config options may be supported by Add-Ons, see the documentation.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="option"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Getting the DSP processing option:
            <code lang="C#">
            bool floatDSP = Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_FLOATDSP);
            </code>
            <code lang="VB">
            Dim floatDSP As Boolean = Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_FLOATDSP)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetConfigPtr(Un4seen.Bass.BASSConfig)">
            <summary>
            Retrieves the value of a pointer config option.
            </summary>
            <param name="option">The option to get the value of...(see <see cref="T:Un4seen.Bass.BASSConfig"/>).</param>
            <returns>If successful, the value of the requested config option is returned (as an IntPtr). Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Other config options may be supported by Add-Ons, see the documentation.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="option"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Getting the current user agent header:
            <code lang="C#">
            string userAgent = String.Empty;
            IntPtr p = Bass.BASS_GetConfigPtr(BASSConfig.BASS_CONFIG_NET_AGENT);
            if (p != IntPtr.Zero)
            {
              userAgent = Utils.IntPtrAsStringAnsi(p);
            }
            </code>
            <code lang="VB">
            Dim userAgent As String = [String].Empty
            Dim p As IntPtr = Bass.BASS_GetConfigPtr(BASSConfig.BASS_CONFIG_NET_AGENT)
            If p &lt;&gt; IntPtr.Zero Then
              userAgent = Utils.IntPtrAsStringAnsi(p)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_GetConfigString(Un4seen.Bass.BASSConfig)">
            <summary>
            Retrieves the value of a pointer config option as an Ansi string.
            </summary>
            <param name="option">The option to get the value of... one of the following (<see cref="T:Un4seen.Bass.BASSConfig"/>).</param>
            <returns>If successful, the value of the requested config option is returned (as an Ansi String). Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Other config options may be supported by Add-Ons, see the documentation.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="option"/> is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Getting the current user agent header:
            <code lang="C#">
            string userAgent = Bass.BASS_GetConfigString(BASSConfig.BASS_CONFIG_NET_AGENT);
            if (userAgent != null)
            {
              ...
            }
            </code>
            <code lang="VB">
            Dim userAgent As String = Bass.BASS_GetConfigString(BASSConfig.BASS_CONFIG_NET_AGENT)
            If Not (userAgent Is Nothing) Then
              ...
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_PluginLoadUnicode(System.String,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="file"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)">
            <summary>
            Plugs on "add-on" into the standard stream and sample creation functions.
            <para>This overload implements the Unicode version for the file name.</para>
            </summary>
            <param name="file">Filename of the add-on/plugin. If only a name is provided then the platform's standard library prefix and suffix/extension will be added to it.</param>
            <returns>If successful, the loaded plugin's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>There are 2 ways in which add-ons can provide support for additional formats. They can provide dedicated functions to create streams of the specific format(s) they support and/or they can plug into the standard stream creation functions: 
            <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>, and <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>. This function enables the latter method. Both methods can be used side by side. 
            The obvious advantage of the plugin system is convenience, while the dedicated functions can provide extra options that are not possible via the shared function interfaces. See an add-on's documentation for more specific details on it.</para>
            <para>As well as the stream creation functions, plugins also add their additional format support to <see cref="M:Un4seen.Bass.Bass.BASS_SampleLoad(System.String,System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>.</para>
            <para>Information on what file formats a plugin supports is available via the <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)"/> function.</para>
            <para>When using multiple plugins, the stream/sample creation functions will try each of them in the order that they were loaded via this function, until one that accepts the file is found.
            When an add-on is already loaded (eg. if you are using functions from it), the plugin system will use the same instance (the reference count will just be incremented); there will not be 2 copies of the add-on in memory.</para>
            <para>Note: Only stream/music add-ons are loaded (e.g. bass_fx.dll or bassmix.dll are NOT loaded).</para>
            <para><b>Platform-specific:</b></para>
            <para>Dynamic libraries are not permitted on iOS, so add-ons are provided as static libraries instead, which means this function has to work a little differently. The add-on needs to be linked into the executable, and a "plugin" symbol declared and passed to this function (instead of a filename).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The <paramref name="file"/> could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The <paramref name="file"/> is not a plugin.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>The <paramref name="file"/> is already plugged in.</description></item>
            <item><term>BASS_ERROR_VERSION</term><description>The plugin requires a different BASS version. Due to the use of the 'stdcall' calling-convention, and so risk of stack faults from unexpected API differences, an add-on won't load at all on Windows if the BASS version is unsupported, and a BASS_ERROR_FILEFORM error will be generated instead of this.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Add-On residing in same directory:
            <code lang="C#">
            // load the FLAC add-on
            int pluginFlac = Bass.BASS_PluginLoad("bassflac.dll");
            ...
            // use the add-on
            int stream = Bass.BASS_StreamCreateFile("file.flac", 0, 0, BASSFlag.BASS_DEFAULT);
            ...
            // un-load the FLAC add-on
            Bass.BASS_PluginFree(pluginFlac);
            </code>
            <code lang="VB">
            ' load the FLAC add-on
            Dim pluginFlac As Integer = Bass.BASS_PluginLoad("bassflac.dll")
            ...
            ' use the add-on
            Dim stream As Integer = Bass.BASS_StreamCreateFile("file.flac", 0, 0, BASSFlag.BASS_DEFAULT)
            ...
            ' un-load the FLAC add-on
            Bass.BASS_PluginFree(pluginFlac)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_PluginFree(System.Int32)">
            <summary>
            Unplugs an add-on.
            </summary>
            <param name="handle">The plugin handle... 0 = all plugins.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>If there are streams created by a plugin in existence when it is being freed, the streams will automatically be freed too. Samples loaded by the plugin are unaffected as the plugin has nothing to do with them once they are loaded (the sample data is already fully decoded).
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Add-On residing in same directory:
            <code lang="C#">
            // load the FLAC add-on
            int pluginFlac = Bass.BASS_PluginLoad("bassflac.dll");
            ...
            // use the add-on
            int stream = Bass.BASS_StreamCreateFile("file.flac", 0, 0, BASSFlag.BASS_DEFAULT);
            ...
            // un-load the FLAC add-on
            Bass.BASS_PluginFree(pluginFlac);
            </code>
            <code lang="VB">
            ' load the FLAC add-on
            Dim pluginFlac As Integer = Bass.BASS_PluginLoad("bassflac.dll")
            ...
            ' use the add-on
            Dim stream As Integer = Bass.BASS_StreamCreateFile("file.flac", 0, 0, BASSFlag.BASS_DEFAULT)
            ...
            ' un-load the FLAC add-on
            Bass.BASS_PluginFree(pluginFlac)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_PluginEnable(System.Int32,System.Boolean)">
            <summary>
            Enables or disables an add-on.
            </summary>
            <param name="handle">The plugin handle.</param>
            <param name="enable">Enable the plugin?</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function allows a plugin to be excluded from subsequent stream/sample creation calls without affecting any existing streams that are currently using it.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_PluginLoadDirectory(System.String)">
            <summary>
            Tries to loads all BASS add-ons (bass*.dll) contained in the specified directory.
            </summary>
            <param name="dir">The directory in which to search for BASS add-ons (bass*.dll).</param>
            <returns>A hash table containing all successfully loaded BASS add-ons.
            <para>The hash table will be constructed as: Key=pluginHandle and Value=filename.</para>
            <para>Note: Only stream/music add-ons are loaded (e.g. bass_fx.dll or bassenc.dll are NOT loaded).</para>
            </returns>
            <remarks>Internally the <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> method will be used to load all add-ons contained in the specified directory folder (sub-folders are not scanned as well).</remarks>
            <example>
            <code lang="C#">
            Dictionary&lt;int, string&gt; loadedPlugIns = Bass.BASS_PluginLoadDirectory("C:\\BASS");
            if (loadedPlugIns != null)
            {
              foreach (string file in loadedPlugIns.Values)
                Console.Writeln( file );
            }
            </code>
            <code lang="VB">
            Dim loadedPlugIns As Dictionary(Of Integer, String) = Bass.BASS_PluginLoadDirectory("C:\BASS")
            If Not (loadedPlugIns Is Nothing) Then
              Dim file As String
              For Each file In loadedPlugIns.Values
                Console.Writeln(file)
              Next file
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_PluginLoadDirectory(System.String,System.Collections.Generic.List{System.String})">
            <summary>
            Tries to loads all BASS add-ons (bass*.dll) contained in the specified directory.
            </summary>
            <param name="dir">The directory in which to search for BASS add-ons (bass*.dll).</param>
            <param name="exclude">An optional list of file names (without path and extension) to exclude (e.g. "basswma").</param>
            <returns>A hash table containing all successfully loaded BASS add-ons.
            <para>The hash table will be constructed as: Key=pluginHandle and Value=filename.</para>
            <para>Note: Only stream/music add-ons are loaded (e.g. bass_fx.dll or bassenc.dll are NOT loaded).</para>
            </returns>
            <remarks>Internally the <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/> method will be used to load all add-ons contained in the specified directory folder (sub-folders are not scanned as well).</remarks>
            <example>
            <code lang="C#">
            Dictionary&lt;int, string&gt; loadedPlugIns = Bass.BASS_PluginLoadDirectory("C:\\BASS");
            if (loadedPlugIns != null)
            {
              foreach (string file in loadedPlugIns.Values)
                Console.Writeln( file );
            }
            </code>
            <code lang="VB">
            Dim loadedPlugIns As Dictionary(Of Integer, String) = Bass.BASS_PluginLoadDirectory("C:\BASS")
            If Not (loadedPlugIns Is Nothing) Then
              Dim file As String
              For Each file In loadedPlugIns.Values
                Console.Writeln(file)
              Next file
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_PluginGetInfoPtr(System.Int32)">
            <summary>
            
            </summary>
            <param name="handle"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)">
            <summary>
            Retrieves information on a plugin.
            </summary>
            <param name="handle">The plugin handle - or 0 to retrieve native BASS information.</param>
            <returns>If successful, an instance of <see cref="T:Un4seen.Bass.BASS_PLUGININFO"/> is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The plugin information does not change, so the returned info remains valid for as long as the plugin is loaded.
            <para>Note: There is no guarantee that the check is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>List the formats supported by a plugin:
            <code lang="C#">
            int pluginFlac = Bass.BASS_PluginLoad("bassflac.dll");
            BASS_PLUGININFO info = Bass.BASS_PluginGetInfo(pluginFlac);
            foreach (BASS_PLUGINFORM f in info.formats)
              Console.WriteLine("Type={0}, Name={1}, Exts={2}", f.ctype, f.name, f.exts);
            </code>
            <code lang="VB">
            Dim pluginFlac As Integer = Bass.BASS_PluginLoad("bassflac.dll")
            Dim info As BASS_PLUGININFO = Bass.BASS_PluginGetInfo(pluginFlac)
            Dim f As BASS_PLUGINFORM
            For Each f In info.formats
              Console.WriteLine("Type={0}, Name={1}, Exts={2}", f.ctype, f.name, f.exts)
            Next f
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Apply3D">
            <summary>
            Applies changes made to the 3D system.
            </summary>
            <remarks>
            <para>This must be called to apply any changes made with <see cref="M:Un4seen.Bass.Bass.BASS_Set3DFactors(System.Single,System.Single,System.Single)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Set3DPosition(Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DAttributes(System.Int32,Un4seen.Bass.BASS3DMode,System.Single,System.Single,System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DPosition(System.Int32,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>. 
            It improves performance to have DirectSound do all the required recalculating at the same time like this, rather than recalculating after every little change is made.</para>
            <para>This function applies 3D changes on all the initialized devices - there's no need to re-call it for each individual device when using multiple devices.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Set3DFactors(System.Single,System.Single,System.Single)">
            <summary>
            Sets the factors that affect the calculations of 3D sound.
            </summary>
            <param name="distf">The distance factor... less than 0.0 = leave current... examples: 1.0 = use meters, 0.9144 = use yards, 0.3048 = use feet. By default BASS measures distances in meters, you can change this setting if you are using a different unit of measurement.</param>
            <param name="rollf">The rolloff factor, how fast the sound quietens with distance... 0.0 (min) - 10.0 (max), less than 0.0 = leave current... examples: 0.0 = no rolloff, 1.0 = real world, 2.0 = 2x real.</param>
            <param name="doppf">The doppler factor... 0.0 (min) - 10.0 (max), less than 0.0 = leave current... examples: 0.0 = no doppler, 1.0 = real world, 2.0 = 2x real. The doppler effect is the way a sound appears to change pitch when it is moving towards or away from you (say hello to Einstein!). The listener and sound velocity settings are used to calculate this effect, this doppf value can be used to lessen or exaggerate the effect.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>As with all 3D functions, use <see cref="M:Un4seen.Bass.Bass.BASS_Apply3D"/> to apply the changes.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The device was not initialized with 3D support.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            To use yards as the distance measurement unit, while leaving the current rolloff and doppler factors untouched:
            <code lang="C#">
            Bass.BASS_Set3DFactors(0.9144f, -1f, -1f);
            Bass.BASS_Apply3D(); // apply the change
            </code>
            <code lang="VB">
            Bass.BASS_Set3DFactors(0.9144F, -1F, -1F)
            Bass.BASS_Apply3D() ' apply the change
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Get3DFactors(System.Single@,System.Single@,System.Single@)">
            <summary>
            Retrieves the factors that affect the calculations of 3D sound.
            <para>This overload allows you to only get all three values at a time.</para>
            </summary>
            <param name="distf">The distance factor.</param>
            <param name="rollf">The rolloff factor.</param>
            <param name="doppf">The doppler factor.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The device was not initialized with 3D support.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            float distf = 0f;
            float rollf = 0f;
            float doppf = 0f;
            Bass.BASS_Get3DFactors(ref distf, ref rollf, ref doppf);
            </code>
            <code lang="VB">
            Dim distf As Single = 0F
            Dim rollf As Single = 0F
            Dim doppf As Single = 0F
            Bass.BASS_Get3DFactors(distf, rollf, doppf)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Get3DFactors(System.Object,System.Object,System.Object)">
            <summary>
            Retrieves the factors that affect the calculations of 3D sound.
            <para>This overload uses objects (so you can pass <see langword="null"/> in order to NOT retrieve a value). However a requested return value needs to be casted back into a float after getting it.</para>
            </summary>
            <param name="distf">The distance factor... <see langword="null"/> = don't retrieve it.</param>
            <param name="rollf">The rolloff factor... <see langword="null"/> = don't retrieve it.</param>
            <param name="doppf">The doppler factor... <see langword="null"/> = don't retrieve it.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The device was not initialized with 3D support.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Only get the distance factor:
            <code lang="C#">
            object distf = 0f;
            Bass.BASS_Get3DFactors(distf, null, null);
            float distanceFactor = (float)distf;
            </code>
            <code lang="VB">
            Dim distf As Object = 0F
            Bass.BASS_Get3DFactors(distf, Nothing, Nothing)
            Dim distanceFactor As Single = CSng(distf)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Set3DPosition(Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)">
            <summary>
            Retrieves the position, velocity, and orientation of the listener.
            </summary>
            <param name="pos">The position of the listener... <see langword="null"/> = don't retrieve it.</param>
            <param name="vel">The listener's velocity... <see langword="null"/> = don't retrieve it.</param>
            <param name="front">The direction that the listener's front is pointing... <see langword="null"/>=don't retrieve it.</param>
            <param name="top">The direction that the listener's top is pointing... <see langword="null"/> = don't retrieve it.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The <paramref name="front"/> and <paramref name="top"/> parameters must both be retrieved in a single call, they can not be retrieved individually.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The device was not initialized with 3D support.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set the current listener position only:
            <code lang="C#">
            BASS_3DVECTOR pos = new BASS_3DVECTOR();
            Bass.BASS_Set3DPosition(pos, null, null, null);
            </code>
            <code lang="VB">
            Dim pos As New BASS_3DVECTOR()
            Bass.BASS_Set3DPosition(pos, Nothing, Nothing, Nothing)
            </code>
            Updates the position, velocity and top of the listener:
            <code lang="C#">
            BASS_3DVECTOR position = new BASS_3DVECTOR(camera.RealPosition.x, camera.RealPosition.y, camera.RealPosition.z);
            BASS_3DVECTOR direction = new BASS_3DVECTOR(camera.RealDirection.x, camera.RealDirection.y, camera.RealDirection.z);
            BASS_3DVECTOR up = new BASS_3DVECTOR(-camera.RealUp.x, -camera.RealUp.y, -camera.RealUp.z);
            
            if (!Bass.BASS_Set3DPosition(position, velocity, direction, up))
                throw new AudioException("Could not set the 3d position of the listener", "listener", Bass.BASS_ErrorGetCode());
                
            Bass.BASS_Apply3D();
            </code>
            <code lang="VB">
            Dim position As New BASS_3DVECTOR(camera.RealPosition.x, camera.RealPosition.y, camera.RealPosition.z)
            Dim direction As New BASS_3DVECTOR(camera.RealDirection.x, camera.RealDirection.y, camera.RealDirection.z)
            Dim up As New BASS_3DVECTOR(-camera.RealUp.x, -camera.RealUp.y, -camera.RealUp.z)
            
            If Not Bass.BASS_Set3DPosition(position, velocity, direction, up) Then
                Throw New AudioException("Could not set the 3d position of the listener", "listener", Bass.BASS_ErrorGetCode())
            End If
            
            Bass.BASS_Apply3D()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_Get3DPosition(Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)">
            <summary>
            Retrieves the position, velocity, and orientation of the listener.
            </summary>
            <param name="pos">The position of the listener... <see langword="null"/> = don't retrieve it.</param>
            <param name="vel">The listener's velocity... <see langword="null"/> = don't retrieve it.</param>
            <param name="front">The direction that the listener's front is pointing... <see langword="null"/>=don't retrieve it.</param>
            <param name="top">The direction that the listener's top is pointing... <see langword="null"/> = don't retrieve it.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The <paramref name="front"/> and <paramref name="top"/> parameters must both be retrieved in a single call, they can not be retrieved individually.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The device was not initialized with 3D support.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the current listener position only:
            <code lang="C#">
            BASS_3DVECTOR pos = new BASS_3DVECTOR();
            Bass.BASS_Get3DPosition(pos, null, null, null);
            </code>
            <code lang="VB">
            Dim pos As New BASS_3DVECTOR()
            Bass.BASS_Get3DPosition(pos, Nothing, Nothing, Nothing)
            </code>
            Updates the position, velocity and top of the listener:
            <code lang="C#">
            BASS_3DVECTOR position = new BASS_3DVECTOR(camera.RealPosition.x, camera.RealPosition.y, camera.RealPosition.z);
            BASS_3DVECTOR direction = new BASS_3DVECTOR(camera.RealDirection.x, camera.RealDirection.y, camera.RealDirection.z);
            BASS_3DVECTOR up = new BASS_3DVECTOR(-camera.RealUp.x, -camera.RealUp.y, -camera.RealUp.z);
            
            if (!Bass.BASS_Set3DPosition(position, velocity, direction, up))
                throw new AudioException("Could not set the 3d position of the listener", "listener", Bass.BASS_ErrorGetCode());
                
            Bass.BASS_Apply3D();
            </code>
            <code lang="VB">
            Dim position As New BASS_3DVECTOR(camera.RealPosition.x, camera.RealPosition.y, camera.RealPosition.z)
            Dim direction As New BASS_3DVECTOR(camera.RealDirection.x, camera.RealDirection.y, camera.RealDirection.z)
            Dim up As New BASS_3DVECTOR(-camera.RealUp.x, -camera.RealUp.y, -camera.RealUp.z)
            
            If Not Bass.BASS_Set3DPosition(position, velocity, direction, up) Then
                Throw New AudioException("Could not set the 3d position of the listener", "listener", Bass.BASS_ErrorGetCode())
            End If
            
            Bass.BASS_Apply3D()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleLoadUnicode(System.Boolean,System.String,System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="file"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="max"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleLoad(System.String,System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Loads a WAV, AIFF, MP3, MP2, MP1, OGG or plugin supported sample.
            <para>This overload uses Unicode file names! A BASS_UNICODE flag will automatically be added.</para>
            </summary>
            <param name="file">The file name to load the sample from.</param>
            <param name="offset">File offset to load the sample from.</param>
            <param name="length">Data length... 0 = use all data up to the end of file. If length over-runs the end of the file, it'll automatically be lowered to the end of the file.</param>
            <param name="max">Maximum number of simultaneous playbacks... 1 (min) - 65535 (max)... use one of the BASS_SAMPLE_OVER flags to choose the override decider, in the case of there being no free channel available for playback (ie. the sample is already playing max times).</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data (not really recommended for samples). WDM drivers are required to use this flag in Windows. See Floating-point channels for more info.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Looped? Note that only complete sample loops are allowed, you can't loop just a part of the sample. More fancy looping can be achieved by streaming the file.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Convert the sample (MP3/MP2/MP1 only) to mono, if it's not already. This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the sample to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_VAM</term><description>requires DirectX 7 or above: Enables the DX7 voice allocation and management features on the sample, which allows the sample to be played in software or hardware. This flag is ignored if the BASS_SAMPLE_SOFTWARE flag is also specified.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D samples must be mono.</description></item>
            <item><term>BASS_SAMPLE_MUTEMAX</term><description>Mute the sample when it is at (or beyond) it's max distance (3D samples only).</description></item>
            <item><term>BASS_SAMPLE_OVER_VOL</term><description>Override: the channel with the lowest volume is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_POS</term><description>Override: the longest playing channel is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_DIST</term><description>Override: the channel furthest away (from the listener) is overriden (3D samples only).</description></item>
            <item><term>BASS_UNICODE</term><description>file is a Unicode (16-bit characters) filename (no need to set this for this overload).</description></item>
            </list>
            </param>
            <returns>If successful, the loaded sample's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Additional format support is available via the plugin system (see <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>).</para>
            <para>Unless the BASS_SAMPLE_SOFTWARE flag is used, the sample will use hardware mixing if hardware resources are available. Use <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/> to see if there are hardware mixing resources available, and which sample formats are supported by the hardware. 
            The BASS_SAMPLE_VAM flag allows a sample to be played by both hardware and software, with the decision made when the sample is played rather than when it's loaded. A sample's VAM options are set via <see cref="M:Un4seen.Bass.Bass.BASS_SampleSetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.</para>
            <para>To play a sample, first a channel must be obtained using <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/>, which can then be played using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>.</para>
            <para>If you want to play a large or one-off sample, then it would probably be better to stream it instead with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Sample functions are not available when using the "no sound" device.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="max"/> and/or <paramref name="length"/> is invalid. The <paramref name="length"/> must be specified when loading from memory.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The <paramref name="file"/> could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The <paramref name="file"/>'s format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The file uses a codec that's not available/supported. This can apply to WAV and AIFF files, and also MP3 files when using the "MP3-free" BASS version.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the sample is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The BASS_SAMPLE_VAM flag requires DirectX 7 (or above). Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary.</para>
            <para>On Windows and Windows CE, ACM codecs are supported with compressed WAV files. On iOS and OSX, CoreAudio codecs are supported, adding support for any file formats that have a codec installed.</para>
            </remarks>
            <example>
            Play a sample with it's default settings:
            <code lang="C#">
            int sample = Bass.BASS_SampleLoad("test.wav", 0L, 0, 1, BASSFlag.BASS_DEFAULT);
            int channel = Bass.BASS_SampleGetChannel(sample, false); // get a sample channel
            Bass.BASS_ChannelPlay(channel, false); // play it
            </code>
            <code lang="VB">
            Dim sample As Integer = Bass.BASS_SampleLoad("test.wav", 0L.ToUInt32(), 0, 1, BASSFlag.BASS_DEFAULT)
            Dim channel As Integer = Bass.BASS_SampleGetChannel(sample, False) ' get a sample channel
            Bass.BASS_ChannelPlay(channel, False) ' play it
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleLoadMemory(System.Boolean,System.IntPtr,System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="max"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleLoad(System.IntPtr,System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Loads a WAV, AIFF, MP3, MP2, MP1, OGG or plugin supported sample.
            <para>This overload uses an unmanaged IntPtr and implements loading a sample from memory.</para>
            </summary>
            <param name="memory">An unmanaged IntPtr to the allocated memory block at which the sample data resides.</param>
            <param name="offset">File offset to load the sample from (NOT used here!).</param>
            <param name="length">Data length. Should be set to the length of the data contained in memory.</param>
            <param name="max">Maximum number of simultaneous playbacks... 1 (min) - 65535 (max)... use one of the BASS_SAMPLE_OVER flags to choose the override decider, in the case of there being no free channel available for playback (ie. the sample is already playing max times).</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data (not really recommended for samples). WDM drivers are required to use this flag in Windows. See Floating-point channels for more info.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Looped? Note that only complete sample loops are allowed, you can't loop just a part of the sample. More fancy looping can be achieved by streaming the file.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Convert the sample (MP3/MP2/MP1 only) to mono, if it's not already. This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the sample to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_VAM</term><description>requires DirectX 7 or above: Enables the DX7 voice allocation and management features on the sample, which allows the sample to be played in software or hardware. This flag is ignored if the BASS_SAMPLE_SOFTWARE flag is also specified.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D samples must be mono.</description></item>
            <item><term>BASS_SAMPLE_MUTEMAX</term><description>Mute the sample when it is at (or beyond) it's max distance (3D samples only).</description></item>
            <item><term>BASS_SAMPLE_OVER_VOL</term><description>Override: the channel with the lowest volume is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_POS</term><description>Override: the longest playing channel is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_DIST</term><description>Override: the channel furthest away (from the listener) is overriden (3D samples only).</description></item>
            </list>
            </param>
            <returns>If successful, the loaded sample's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Additional format support is available via the plugin system (see <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>).</para>
            <para>Unless the BASS_SAMPLE_SOFTWARE flag is used, the sample will use hardware mixing if hardware resources are available. Use <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/> to see if there are hardware mixing resources available, and which sample formats are supported by the hardware. 
            The BASS_SAMPLE_VAM flag allows a sample to be played by both hardware and software, with the decision made when the sample is played rather than when it's loaded. A sample's VAM options are set via <see cref="M:Un4seen.Bass.Bass.BASS_SampleSetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.</para>
            <para>To play a sample, first a channel must be obtained using <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/>, which can then be played using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>.</para>
            <para>If you want to play a large or one-off sample, then it would probably be better to stream it instead with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>.</para>
            <para>There is no need to pin the memory buffer for this method, since after loading a sample from memory, the memory can safely be discarded, as a copy is made.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Sample functions are not available when using the "no sound" device.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="max"/> and/or <paramref name="length"/> is invalid. The <paramref name="length"/> must be specified when loading from memory.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The <paramref name="memory"/> could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The <paramref name="memory"/>'s format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The file uses a codec that's not available/supported. This can apply to WAV and AIFF files, and also MP3 files when using the "MP3-free" BASS version.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the sample is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The BASS_SAMPLE_VAM flag requires DirectX 7 (or above). Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary.</para>
            <para>On Windows and Windows CE, ACM codecs are supported with compressed WAV files. On iOS and OSX, CoreAudio codecs are supported, adding support for any file formats that have a codec installed.</para>
            </remarks>
            <example>
            See <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>for examples on how to load data from memory.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleLoadMemory(System.Boolean,System.Byte[],System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            
            </summary>
            <param name="mem"></param>
            <param name="memory"></param>
            <param name="offset"></param>
            <param name="length"></param>
            <param name="max"></param>
            <param name="flags"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleLoad(System.Byte[],System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Loads a WAV, AIFF, MP3, MP2, MP1, OGG or plugin supported sample.
            <para>This overload uses an unmanaged IntPtr and implements loading a sample from memory.</para>
            </summary>
            <param name="memory">A managed byte[] containing the sample data to load.</param>
            <param name="offset">File offset to load the sample from (NOT used here!).</param>
            <param name="length">Data length. Should be set to the length of the data contained in memory.</param>
            <param name="max">Maximum number of simultaneous playbacks... 1 (min) - 65535 (max)... use one of the BASS_SAMPLE_OVER flags to choose the override decider, in the case of there being no free channel available for playback (ie. the sample is already playing max times).</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data (not really recommended for samples). WDM drivers are required to use this flag in Windows. See Floating-point channels for more info.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Looped? Note that only complete sample loops are allowed, you can't loop just a part of the sample. More fancy looping can be achieved by streaming the file.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Convert the sample (MP3/MP2/MP1 only) to mono, if it's not already. This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the sample to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_VAM</term><description>requires DirectX 7 or above: Enables the DX7 voice allocation and management features on the sample, which allows the sample to be played in software or hardware. This flag is ignored if the BASS_SAMPLE_SOFTWARE flag is also specified.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D samples must be mono.</description></item>
            <item><term>BASS_SAMPLE_MUTEMAX</term><description>Mute the sample when it is at (or beyond) it's max distance (3D samples only).</description></item>
            <item><term>BASS_SAMPLE_OVER_VOL</term><description>Override: the channel with the lowest volume is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_POS</term><description>Override: the longest playing channel is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_DIST</term><description>Override: the channel furthest away (from the listener) is overriden (3D samples only).</description></item>
            </list>
            </param>
            <returns>If successful, the loaded sample's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Additional format support is available via the plugin system (see <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>).</para>
            <para>Unless the BASS_SAMPLE_SOFTWARE flag is used, the sample will use hardware mixing if hardware resources are available. Use <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/> to see if there are hardware mixing resources available, and which sample formats are supported by the hardware. 
            The BASS_SAMPLE_VAM flag allows a sample to be played by both hardware and software, with the decision made when the sample is played rather than when it's loaded. A sample's VAM options are set via <see cref="M:Un4seen.Bass.Bass.BASS_SampleSetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.</para>
            <para>To play a sample, first a channel must be obtained using <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/>, which can then be played using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>.</para>
            <para>If you want to play a large or one-off sample, then it would probably be better to stream it instead with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>.</para>
            <para>There is no need to pin the memory buffer for this method, since BASS creates a copy of the data internally, 
            so the buffer provided will not be used anymore when the method returns.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Sample functions are not available when using the "no sound" device.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="max"/> and/or <paramref name="length"/> is invalid. The <paramref name="length"/> must be specified when loading from memory.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The <paramref name="memory"/> could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The <paramref name="memory"/>'s format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The file uses a codec that's not available/supported. This can apply to WAV and AIFF files, and also MP3 files when using the "MP3-free" BASS version.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the sample is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The BASS_SAMPLE_VAM flag requires DirectX 7 (or above). Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary.</para>
            <para>On Windows and Windows CE, ACM codecs are supported with compressed WAV files. On iOS and OSX, CoreAudio codecs are supported, adding support for any file formats that have a codec installed.</para>
            </remarks>
            <example>
            See <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> for examples on how to load data from memory.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleCreate(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Initiates the creation of a user generated sample.
            </summary>
            <param name="length">The sample's length, in bytes.</param>
            <param name="freq">The default sample rate.</param>
            <param name="chans">The number of channels... 1 = mono, 2 = stereo, etc... More than stereo requires WDM drivers in Windows.</param>
            <param name="max">Maximum number of simultaneous playbacks... 1 (min) - 65535 (max)... use one of the BASS_SAMPLE_OVER flags to choose the override decider, in the case of there being no free channel available for playback (ie. the sample is already playing max times).</param>
            <param name="flags">A combination of these flags (<see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data (not really recommended for samples). WDM drivers are required to use this flag in Windows. See Floating-point channels for more info.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Looped? Note that only complete sample loops are allowed, you can't loop just a part of the sample. More fancy looping can be achieved via streaming.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the sample to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_VAM</term><description>requires DirectX 7 or above: Enables the DX7 voice allocation and management features on the sample, which allows the sample to be played in software or hardware. This flag is ignored if the BASS_SAMPLE_SOFTWARE flag is also specified.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D samples must be mono (use BASS_SAMPLE_MONO).</description></item>
            <item><term>BASS_SAMPLE_MUTEMAX</term><description>Mute the sample when it is at (or beyond) it's max distance (software 3D samples only).</description></item>
            <item><term>BASS_SAMPLE_OVER_VOL</term><description>Override: the channel with the lowest volume is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_POS</term><description>Override: the longest playing channel is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_DIST</term><description>Override: the channel furthest away (from the listener) is overriden (3D samples only).</description></item>
            </list>
            </param>
            <returns>If successful, the new sample's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The sample's initial content is undefined. <see cref="M:Un4seen.Bass.Bass.BASS_SampleSetData(System.Int32,System.IntPtr)"/> should be used to set the sample's data.</para>
            <para>Unless the BASS_SAMPLE_SOFTWARE flag is used, the sample will use hardware mixing if hardware resources are available. 
            Use <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/> to see if there are hardware mixing resources available, and which sample formats are supported by the hardware. 
            The BASS_SAMPLE_VAM flag allows a sample to be played by both hardware and software, with the decision made when the sample is played rather than when it's loaded. 
            A sample's VAM options are set via <see cref="M:Un4seen.Bass.Bass.BASS_SampleSetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.</para>
            <para>To play a sample, first a channel must be obtained using <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/>, which can then be played using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>.</para>
            <para>If you want to play a large or one-off sample, then it would probably be better to stream it instead with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Sample functions are not available when using the "no sound" device.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="max"/> is invalid..</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the sample is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The BASS_SAMPLE_VAM flag requires DirectX 7 (or above). Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary.</para>
            </remarks>
            <example>
            Create a 440Hz sine-wave, 16-bit, mono:
            <code lang="C#">
            // create the sample
            int sample = Bass.BASS_SampleCreate(256, 28160, 1, 1, 
                              BASSFlag.BASS_SAMPLE_LOOP | BASSFlag.BASS_SAMPLE_OVER_POS );
            // the data buffer (256 byte = 128 Int16)
            short[] data = new short[128];
            // create the sine wave
            for (int a=0; a&lt;128; a++)
              data[a] = (short)(32767.0 * Math.Sin((double)a * 6.283185 / 64d));
            // set the sample's data 
            Bass.BASS_SampleSetData(sample, data);
            // get a sample channel
            int channel = Bass.BASS_SampleGetChannel(sample, false);
            // play it
            Bass.BASS_ChannelPlay(channel, false);
            </code>
            <code lang="VB">
            ' create the sample
            Dim sample As Integer = Bass.BASS_SampleCreate(256, 28160, 1, 1, BASSFlag.BASS_SAMPLE_LOOP Or BASSFlag.BASS_SAMPLE_OVER_POS)
            ' the data buffer (256 byte = 128 Int16)
            Dim data(128 - 1) As Short
            ' create the sine wave
            Dim a As Integer
            For a = 0 To 127
              data(a) = CShort(32767.0 * Math.Sin((CDbl(a) * 6.283185 / 64.0)))
            Next a 
            ' set the sample's data 
            Bass.BASS_SampleSetData(sample, data)
            ' get a sample channel
            Dim channel As Integer = Bass.BASS_SampleGetChannel(sample, False)
            ' play it
            Bass.BASS_ChannelPlay(channel, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleSetData(System.Int32,System.IntPtr)">
            <summary>
            Sets a sample's data.
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">Pointer to the data to set.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The required length and format of the data can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>A sample's data can be set at any time, including during playback.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="M:Un4seen.Bass.Bass.BASS_SampleCreate(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleSetData(System.Int32,System.Single[])">
            <summary>
            Sets a sample's data.
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">The array of float values representing the sample data to set.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The required length and format of the data can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>A sample's data can be set at any time, including during playback.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="M:Un4seen.Bass.Bass.BASS_SampleCreate(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleSetData(System.Int32,System.Int32[])">
            <summary>
            Sets a sample's data.
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">The array of Int32 values representing the sample data to set (Caution: Int32=2xInt16, so this overload can e.g. be used to provide a stereo sample containing of two 16-bit values).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The required length and format of the data can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>A sample's data can be set at any time, including during playback.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="M:Un4seen.Bass.Bass.BASS_SampleCreate(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleSetData(System.Int32,System.Int16[])">
            <summary>
            Sets a sample's data.
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">The array of Int16 values representing the sample data to set.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The required length and format of the data can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>A sample's data can be set at any time, including during playback.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="M:Un4seen.Bass.Bass.BASS_SampleCreate(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleSetData(System.Int32,System.Byte[])">
            <summary>
            Sets a sample's data.
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">The array of byte values representing the sample data to set.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The required length and format of the data can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>A sample's data can be set at any time, including during playback.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>See <see cref="M:Un4seen.Bass.Bass.BASS_SampleCreate(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetData(System.Int32,System.IntPtr)">
            <summary>
            Retrieves a copy of a sample's data.
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">Pointer to a buffer to receive the data.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The buffer must be big enough to receive the sample's data, the size of which can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetData(System.Int32,System.Single[])">
            <summary>
            Retrieves a copy of a sample's data.
            <para>This overload uses a managed float[] to reference the buffer data as 32-bit!
            SHOULD ONLY BE USED, if the sample was created with BASS_SAMPLE_FLOAT!</para>
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">The array (float[]) to receive the data, use BASS_SAMPLE_FLOAT when creating the sample!</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The buffer must be big enough to receive the sample's data, the size of which can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_SAMPLE info = Bass.BASS_SampleGetInfo(sample);
            float[] buffer = new float[info.length/4];
            Bass.BASS_SampleGetData(sample, buffer);
            </code>
            <code lang="VB">
            Dim info As BASS_SAMPLE = Bass.BASS_SampleGetInfo(sample)
            Dim buffer(info.length/4 - 1) As Single
            Bass.BASS_SampleGetData(sample, buffer)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetData(System.Int32,System.Int32[])">
            <summary>
            Retrieves a copy of a sample's data.
            <para>This overload uses a managed int[] to reference the buffer data (Note: if we expect to receive 16-bit data, a single Int32 value will contain 2 x 16-bit, left and right channel)!
            SHOULD ONLY BE USED, if the sample was created WITHOUT BASS_SAMPLE_FLOAT or BASS_SAMPLE_8BITS!</para>
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">The array (int[]) to receive the data, e.g. when creating the sample with default setting, meaning 16-bit samples, an Int32 value contains 2 channels (left and right)!</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The buffer must be big enough to receive the sample's data, the size of which can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetData(System.Int32,System.Int16[])">
            <summary>
            Retrieves a copy of a sample's data.
            <para>This overload uses a managed short[] to reference the buffer data as 16-bit!
            SHOULD ONLY BE USED, if the sample was created WITHOUT BASS_SAMPLE_FLOAT or BASS_SAMPLE_8BITS!</para>
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">The array (short[]) to receive the data, do not use BASS_SAMPLE_FLOAT or BASS_SAMPLE_8BITS when creating the sample!</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The buffer must be big enough to receive the sample's data, the size of which can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_SAMPLE info = Bass.BASS_SampleGetInfo(sample);
            short[] buffer = new short[info.length/2];
            Bass.BASS_SampleGetData(sample, buffer);
            </code>
            <code lang="VB">
            Dim info As BASS_SAMPLE = Bass.BASS_SampleGetInfo(sample)
            Dim buffer(info.length/2 - 1) As Short
            Bass.BASS_SampleGetData(sample, buffer)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetData(System.Int32,System.Byte[])">
            <summary>
            Retrieves a copy of a sample's data.
            <para>This overload uses a managed byte[] to reference the buffer data as 8-bit!
            SHOULD ONLY BE USED, if the sample was created with or BASS_SAMPLE_8BITS!</para>
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="buffer">The array array (byte[]) to receive the data, use or BASS_SAMPLE_8BITS when creating the sample!</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The buffer must be big enough to receive the sample's data, the size of which can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_SAMPLE info = Bass.BASS_SampleGetInfo(sample);
            byte[] buffer = new byte[info.length];
            Bass.BASS_SampleGetData(sample, buffer);
            </code>
            <code lang="VB">
            Dim info As BASS_SAMPLE = Bass.BASS_SampleGetInfo(sample)
            Dim buffer(info.length - 1) As Byte
            Bass.BASS_SampleGetData(sample, buffer)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleFree(System.Int32)">
            <summary>
            Frees a sample's resources.
            </summary>
            <param name="handle">The sample handle.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play a sample with it's default settings:
            <code lang="C#">
            int sample = Bass.BASS_SampleLoad("test.wav", 0L, 0, 1, BASSFlag.BASS_DEFAULT);
            int channel = Bass.BASS_SampleGetChannel(sample, false); // get a sample channel
            Bass.BASS_ChannelPlay(channel, false); // play it
            ...
            // when done
            Bass.BASS_SampleFree(sample);
            </code>
            <code lang="VB">
            Dim sample As Integer = Bass.BASS_SampleLoad("test.wav", 0L.ToUInt32(), 0, 1, BASSFlag.BASS_DEFAULT)
            Dim channel As Integer = Bass.BASS_SampleGetChannel(sample, False) ' get a sample channel
            Bass.BASS_ChannelPlay(channel, False) ' play it
            ...
            ' when done
            Bass.BASS_SampleFree(sample)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)">
            <summary>
            Retrieves a sample's default attributes and other information.
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="info">An instance of the <see cref="T:Un4seen.Bass.BASS_SAMPLE"/> class to store the sample information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_SAMPLE info = new BASS_SAMPLE();
            bool ok = Bass.BASS_SampleGetInfo(sample, info);
            </code>
            <code lang="VB">
            Dim info As New BASS_SAMPLE()
            Dim ok As Boolean = Bass.BASS_SampleGetInfo(sample, info)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32)">
            <summary>
            Retrieves a sample's default attributes and other information.
            </summary>
            <param name="handle">The sample handle.</param>
            <returns>An instance of the <see cref="T:Un4seen.Bass.BASS_SAMPLE"/> class on success - else <see langword="null"/>.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_SAMPLE info = Bass.BASS_SampleGetInfo(sample);
            </code>
            <code lang="VB">
            Dim info As BASS_SAMPLE = Bass.BASS_SampleGetInfo(sample)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleSetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)">
            <summary>
            Sets a sample's default attributes.
            </summary>
            <param name="handle">The sample handle.</param>
            <param name="info">An instance of the <see cref="T:Un4seen.Bass.BASS_SAMPLE"/> class containing the sample information to set.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Use this function and <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/> to edit a sample's default attributes. 
            Changing a sample's default attributes does not affect any existing channels, it only affects channels subsequently created via <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/>. 
            The exception is the VAM settings, changes to that apply to all the sample's channels at their next playback (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>). 
            Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DAttributes(System.Int32,Un4seen.Bass.BASS3DMode,System.Single,System.Single,System.Int32,System.Int32,System.Int32)"/> to change the attributes of an existing sample channel.</para>
            <para>The sample's maximum number of simultaneous playbacks can be changed via the max member of the BASS_SAMPLE structure. If the new maximum is lower than the existing number of channels, the channels will remain existing until they are stopped.</para>
            <para>The <i>length</i>, <i>origres</i> and <i>chans</i> members of the <see cref="T:Un4seen.Bass.BASS_SAMPLE"/> structure can't be modified - any changes are ignored. 
            The BASS_SAMPLE_8BITS, BASS_SAMPLE_MONO, BASS_SAMPLE_3D, BASS_SAMPLE_MUTEMAX, BASS_SAMPLE_SOFTWARE and BASS_SAMPLE_VAM flags also cannot be changed.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Use one of the BASS_SAMPLE constructors to set the values:
            <code lang="C#">
            BASS_SAMPLE info = new BASS_SAMPLE(44100, 100, 0, ...);
            bool ok = Bass.BASS_SampleSetInfo(sample, info);
            </code>
            <code lang="VB">
            Dim info As New BASS_SAMPLE(44100, 100, 0, ...)
            Dim ok As Boolean = Bass.BASS_SampleSetInfo(sample, info)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates/initializes a playback channel for a sample.
            </summary>
            <param name="handle">Handle of the sample to play.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMCHAN_NEW</term><description>Do not recycle/override one of the sample's existing channels.</description></item>
            <item><term>BASS_SAMCHAN_STREAM</term><description>Create a stream (HSTREAM) rather than a sample channel (HCHANNEL).</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Looped? Note that only complete sample loops are allowed, you can't loop just a part of the sample. More fancy looping can be achieved by streaming the file.</description></item>
            <item><term>BASS_SAMPLE_OVER_VOL</term><description>Override: the channel with the lowest volume is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_POS</term><description>Override: the longest playing channel is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_DIST</term><description>Override: the channel furthest away (from the listener) is overriden (3D samples only).</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            </list>
            </param>
            <returns>If successful, the handle of the new channel is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>A sample can be played in two ways: with a sample channel (HCHANNEL) or a stream (HSTREAM). A sample channel is a bit more CPU and memory efficient, while a stream has more features available, eg. DSP/FX and synchronization. In either case, they all share the same sample data, and just have their own individual state information (volume/position/etc).</para>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_SampleSetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/> to set a sample's default attributes, which are used when creating a channel. 
            After creation, a channel's attributes can be changed via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DAttributes(System.Int32,Un4seen.Bass.BASS3DMode,System.Single,System.Single,System.Int32,System.Int32,System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DPosition(System.Int32,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>. 
            <see cref="M:Un4seen.Bass.Bass.BASS_Apply3D"/> should be called before starting playback of a 3D sample, even if you just want to use the default settings.</para>
            <para>The number of sample streams (HSTREAM) is unlimited. The number of sample channels (HCHANNEL) is limited to the sample's max value (set during creation or via <see cref="M:Un4seen.Bass.Bass.BASS_SampleSetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>), and existing channels can be overridden when needed for new ones. When channel overriding has been enabled (via a BASS_SAMPLE_OVER flag) and there are multiple candidates for overriding (eg. with identical volume), the oldest of them will be chosen to make way for the new channel.</para>
            <para>If a sample has a maximum number of simultaneous playbacks of 1 (the max parameter was 1 when calling <see cref="M:Un4seen.Bass.Bass.BASS_SampleLoad(System.String,System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_SampleCreate(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>), then the HCHANNEL handle returned will be identical to the HSAMPLE handle. 
            That means you can use the HSAMPLE handle with functions that usually require a HCHANNEL handle, but you must still call this function first to initialize the channel.</para>
            <para>A sample channel is automatically freed when it's overridden by a new channel, or when stopped manually via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_SampleStop(System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>. 
            If you wish to stop a channel and re-use it, it should be paused (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPause(System.Int32)"/>) instead of stopped. 
            Determining whether a channel still exists can be done by trying to use the handle in a function call, eg. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/>.</para>
            <para>When channel overriding has been enabled via a BASS_SAMPLE_OVER flag and there are multiple candidates for overriding (eg. with identical volume), the oldest of them will be chosen to make way for the new channel.</para>
            <para>A new sample channel (HCHANNEL) will have an initial state of being paused (BASS_ACTIVE_PAUSED). This prevents the channel being claimed by another call of this function before it has been played, unless it gets overridden due to a lack of free channels.</para>
            <para>All of a sample's channels share the same sample data, and just have their own individual playback state information (volume/position/etc).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid sample handle.</description></item>
            <item><term>BASS_ERROR_NOCHAN</term><description>The sample has no free channels... the maximum number of simultaneous playbacks has been reached, and no BASS_SAMPLE_OVER flag was specified for the sample or onlynew = <see langword="true"/>.</description></item>
            <item><term>BASS_ERROR_TIMEOUT</term><description>The sample's minimum time gap (<see cref="T:Un4seen.Bass.BASS_SAMPLE"/>) has not yet passed since the last channel was created.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_STREAM_AUTOFREE flag cannot be combined with the BASS_STREAM_DECODE flag.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Play a sample with it's default settings:
            <code lang="C#">
            int sample = Bass.BASS_SampleLoad("test.wav", 0L, 0, 1, BASSFlag.BASS_DEFAULT);
            int channel = Bass.BASS_SampleGetChannel(sample, false); // get a sample channel
            Bass.BASS_ChannelPlay(channel, false); // play it
            </code>
            <code lang="VB">
            Dim sample As Integer = Bass.BASS_SampleLoad("test.wav", 0L.ToUInt32(), 0, 1, BASSFlag.BASS_DEFAULT)
            Dim channel As Integer = Bass.BASS_SampleGetChannel(sample, False) ' get a sample channel
            Bass.BASS_ChannelPlay(channel, False) ' play it
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetChannels(System.Int32,System.Int32[])">
            <summary>
            Retrieves all a sample's existing channels.
            </summary>
            <param name="handle">Handle of the sample.</param>
            <param name="channels">The array (int[])to put the sample's channel handles in. The array should be the same size as the sample's max setting when the sample was created, which can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/>. 
            <see langword="null"/> can be used to just check how many channels exist.</param>
            <returns>If successful, the number of existing channels is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>For ease of use you might also use the second overload, which directly returns an integer array to get the channels directly.
            <para>If you need to determine whether a particular sample channel still exists, it is simplest to just try it in a function call, eg. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid sample handle.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set the sample rate of all a sample's channels to 10000Hz:
            <code lang="C#">
            // get sample info for "max" value
            BASS_SAMPLE info = Bass.BASS_SampleGetInfo(handle);
            // allocate channels array
            int[] chans = new int[info.max];
            // get the channels
            int count = Bass.BASS_SampleGetChannels(handle, chans);
            // go through them all and...
            for (int a=0; a&lt;count; a++)
            {
              // set the sample rate to 10000
              Bass.BASS_ChannelSetAttribute(chans[a], BASSAttribute.BASS_ATTRIB_FREQ, 10000f);
            }
            </code>
            <code lang="VB">
            ' get sample info for "max" value
            Dim info As BASS_SAMPLE = Bass.BASS_SampleGetInfo(handle)
            ' allocate channels array
            Dim chans(info.max) As Integer
            ' get the channels
            Dim count As Integer = Bass.BASS_SampleGetChannels(handle, hGC.AddrOfPinnedObject())
            ' go through them all and...
            Dim a As Integer
            For a = 0 To count - 1
              ' set the sample rate to 10000
              Bass.BASS_ChannelSetAttribute(chans(a), BASSAttribute.BASS_ATTRIB_FREQ, 10000F)
            Next a
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetChannels(System.Int32)">
            <summary>
            Retrieves all a sample's existing channels.
            </summary>
            <param name="handle">Handle of the sample.</param>
            <returns>If successful, the array of existing channels is returned (which might have zero elements), else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This overload only returns the existing channels in the array.
            <para>If you need to determine whether a particular sample channel still exists, it is simplest to just try it in a function call, eg. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid sample handle.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set the sample rate of all a sample's channels to 10000hz:
            <code lang="C#">
            int[] chans = Bass.BASS_SampleGetChannels(handle);
            if (chans != null)
            {
              // go through them all and...
              for (int a=0; a&lt;chans.Length; a++)
              {
                // set the sample rate to 10000
                Bass.BASS_ChannelSetAttribute(chans[a], BASSAttribute.BASS_ATTRIB_FREQ, 10000f);
              }
            }
            </code>
            <code lang="VB">
            Dim chans As Integer() = Bass.BASS_SampleGetChannels(handle)
            If Not (chans Is Nothing) Then
              ' go through them all and...
              Dim a As Integer
              For a = 0 To chans.Length - 1
                ' set the sample rate to 10000
                Bass.BASS_ChannelSetAttribute(chans(a), BASSAttribute.BASS_ATTRIB_FREQ, 10000F)
              Next a
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleGetChannelCount(System.Int32)">
            <summary>
            Retrieves the number of existing sample's channels.
            </summary>
            <param name="handle">Handle of the sample.</param>
            <returns>If successful, the number of existing channels is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>If you need to determine whether a particular sample channel still exists, it is simplest to just try it in a function call, eg. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid sample handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_SampleStop(System.Int32)">
            <summary>
            Stops all instances of a sample.
            </summary>
            <param name="handle">The sample handle.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>If a sample is playing simultaneously multiple times, calling this function will stop them all, which is obviously simpler than calling <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> multiple times.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid sample handle.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)">
            <summary>
            Creates a user sample stream.
            </summary>
            <param name="freq">The default sample rate. The sample rate can be changed using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</param>
            <param name="chans">The number of channels... 1 = mono, 2 = stereo, 4 = quadraphonic, 6 = 5.1, 8 = 7.1. More than stereo requires WDM drivers, and the SPEAKER flags are ignored.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the stream is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono (chans=1). The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            </list>
            </param>
            <param name="proc">The user defined stream writing function (see <see cref="T:Un4seen.Bass.STREAMPROC"/>).
            <para>To create a DUMMY stream use the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateDummy(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/> method.</para>
            <para>To create a PUSH stream use the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/> method.</para>
            <para>To create a DEVICE stream use the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateDevice(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/> method.</para>
            </param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Sample streams allow any sample data to be played through BASS, and are particularly useful for playing a large amount of sample data without requiring a large amount of memory.
            If you wish to play a sample format that BASS does not support, then you can create a stream and decode the sample data into it.</para>
            <para>BASS can automatically stream MP3, MP2, MP1, OGG, WAV and AIFF files, using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>, and also from HTTP and FTP servers, 
            using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> allows streaming from other sources too.</para>
            <para>However, the callback method must deliver PCM sample data as specified, so opening an MP3 file and just passing that file data will not work here.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            </remarks>
            <example>
            A callback function to stream a file, in 44100hz 16-bit stereo:
            <code lang="C#">
            private STREAMPROC _myStreamCreate;  // make it global, so that the GC can not remove it
            private byte[] _data = null; // our local buffer
            ...
            _myStreamCreate = new STREAMPROC(MyFileProc);
            FileStream fs = File.OpenRead("test.raw");
            int channel = Bass.BASS_StreamCreate(44100, 2, 
                               BASSFlag.BASS_DEFAULT, _myStreamCreate, IntPtr.Zero);
            Bass.BASS_ChannelPlay(channel, false);
            ...
            private int MyFileProc(int handle, IntPtr buffer, int length, IntPtr user)
            {
              // implementing the callback for BASS_StreamCreate...
              // here we need to deliver PCM sample data
            
              // increase the data buffer as needed
              if (_data == null || _data.Length &lt; length)
                _data = new byte[length];
            
              int bytesread = _fs.Read( _data, 0, length ); 
              Marshal.Copy( _data, 0, buffer, bytesread );
              if ( bytesread &lt; length )
              {
                // set indicator flag
                bytesread |= (int)BASSStreamProc.BASS_STREAMPROC_END;
                _fs.Close();
              }
              return bytesread;
            }
            </code>
            <code lang="VB">
            Private _myStreamCreate As STREAMPROC  ' make it global, so that the GC can not remove it
            Private _data As Byte() = Nothing  ' our local buffer
            ...
            _myStreamCreate = New STREAMPROC(AddressOf MyFileProc)
            Dim fs As FileStream =  File.OpenRead("test.raw")
            Dim channel As Integer =  Bass.BASS_StreamCreate(44100, 2, 
                                           BASSFlag.BASS_DEFAULT, _myStreamCreate, IntPtr.Zero) 
            Bass.BASS_ChannelPlay(channel, False)
            ...
            Private Function MyFileProc(ByVal handle As Integer, ByVal buffer As IntPtr, 
                                        ByVal length As Integer, ByVal user As IntPtr) As Integer
              ' implementing the callback for BASS_StreamCreate...
              ' here we need to deliver PCM sample data
            
              ' increase the data buffer as needed
              If _data = Nothing OrElse _data.Length &lt; length Then
                _data = New Byte(length) {}
              End If
            
              Dim bytesread As Integer = _fs.Read(_data, 0, length) 
              Marshal.Copy(_data, 0, buffer, bytesread)
              If bytesread &lt; length Then
                bytesread = bytesread Or CInt(BASSStreamProc.BASS_STREAMPROC_END) ' set indicator flag
                _fs.Close()
              EndIf
              Return bytesread
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreatePtr(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="freq"></param>
            <param name="chans"></param>
            <param name="flags"></param>
            <param name="procPtr"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSStreamProc)">
            <summary>
            Creates a "dummy" stream.
            </summary>
            <param name="freq">The default sample rate. The sample rate can be changed using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</param>
            <param name="chans">The number of channels... 1 = mono, 2 = stereo, 4 = quadraphonic, 6 = 5.1, 8 = 7.1. More than stereo requires WDM drivers, and the SPEAKER flags are ignored.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the stream is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono (chans=1). The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            </list>
            </param>
            <param name="proc">One of the following (see <see cref="T:Un4seen.Bass.BASSStreamProc"/>):
            <list type="table">
            <item><term>STREAMPROC_DUMMY</term><description>Create a "dummy" stream. A dummy stream doesn't have any sample data of its own, but a decoding dummy stream (with <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> flag) can be used to apply DSP/FX processing to any sample data, by setting DSP/FX on the stream and feeding the data through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>. The dummy stream should have the same sample format as the data being fed through it.</description></item>
            <item><term>STREAMPROC_PUSH</term><description>Create a "push" stream. Instead of BASS pulling data from a STREAMPROC function, data is pushed to BASS via <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.IntPtr,System.Int32)"/>.</description></item>
            <item><term>STREAMPROC_DEVICE</term><description>Create a "dummy" stream for the device's final output mix. This allows DSP/FX to be applied to all channels that are playing on the device, rather than individual channels. DSP/FX parameter change latency is also reduced because channel playback buffering is avoided. The stream is created with the device's current output sample format; the freq, chans, and flags parameters are ignored. It will always be floating-point except on platforms/architectures that do not support floating-point (see BASS_CONFIG_FLOAT), where it will be 16-bit instead.</description></item>
            </list>
            </param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>A dummy stream doesn't have any sample data of its own, but a decoding dummy stream (with BASS_STREAM_DECODE flag) can be used to apply DSP/FX processing to any sample data, 
            by setting DSP/FX on the stream and feeding the data through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>. 
            <para>The dummy stream should have the same sample format as the data being fed through it.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateDummy(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)">
            <summary>
            Creates a "dummy" stream (using the STREAMPROC_DUMMY option).
            </summary>
            <param name="freq">The default sample rate. The sample rate can be changed using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</param>
            <param name="chans">The number of channels... 1 = mono, 2 = stereo, 4 = quadraphonic, 6 = 5.1, 8 = 7.1. More than stereo requires WDM drivers, and the SPEAKER flags are ignored.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the stream is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono (chans=1). The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            </list>
            </param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>A dummy stream doesn't have any sample data of its own, but a decoding dummy stream (with BASS_STREAM_DECODE flag) can be used to apply DSP/FX processing to any sample data, 
            by setting DSP/FX on the stream and feeding the data through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>. 
            <para>The dummy stream should have the same sample format as the data being fed through it.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)">
            <summary>
            Creates a "push" stream (using the STREAMPROC_PUSH option).
            </summary>
            <param name="freq">The default sample rate. The sample rate can be changed using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</param>
            <param name="chans">The number of channels... 1 = mono, 2 = stereo, 4 = quadraphonic, 6 = 5.1, 8 = 7.1. More than stereo requires WDM drivers, and the SPEAKER flags are ignored.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the stream is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono (chans=1). The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            </list>
            </param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Instead of BASS pulling data from a <see cref="T:Un4seen.Bass.STREAMPROC"/> function, data is pushed to BASS via <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.IntPtr,System.Int32)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            </remarks>
            <example>
            Creating a stream duplicate:
            <code lang="C#">
            private DSPPROC _dupCallback;
            ...
            // create stream on device 1
            Bass.BASS_SetDevice(1);
            int orig = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP);
            Bass.BASS_ChannelPlay(orig, false);
            ...
            // create a clone on device 2
            BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(stream);
            Bass.BASS_SetDevice(2);
            int clone = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero);
            // pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream);
            int c = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, (int)BASSData.BASS_DATA_AVAILABLE);
            byte[] buf = new byte[c];
            Bass.BASS_ChannelGetData(stream, buf, c);
            Bass.BASS_StreamPutData(clone, buf, c);
            // set DSP to copy new data from source stream
            _dupCallback = new DSPPROC(DupDSP);
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, new IntPtr(clone), 0);
            Bass.BASS_ChannelPlay(orig, false); // resume source
            Bass.BASS_ChannelPlay(clone, false); // play clone
            ...
            private void DupDSP(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Private _dupCallback As DSPPROC
            ...
            ' create stream on device 1
            Bass.BASS_SetDevice(1)
            Dim orig As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP)
            Bass.BASS_ChannelPlay(orig, False)
            ...
            ' create a clone on device 2
            Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(stream)
            Bass.BASS_SetDevice(2)
            Dim clone As Integer = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero)
            ' pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream)
            Dim c As Integer = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, CInt(BASSData.BASS_DATA_AVAILABLE))
            Dim buf(c) As Byte
            Bass.BASS_ChannelGetData(stream, buf, c)
            Bass.BASS_StreamPutData(clone, buf, c)
            ' set DSP to copy new data from source stream
            _dupCallback = New DSPPROC(DupDSP)
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, New IntPtr(clone), 0)
            Bass.BASS_ChannelPlay(orig, False) ' resume source
            Bass.BASS_ChannelPlay(clone, False) ' play clone
            ...
            Private Sub DupDSP(handle As Integer, channel As Integer, 
                               buffer As IntPtr, length As Integer, user As IntPtr)
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateDevice(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)">
            <summary>
            Create a "dummy" stream for the device's final output mix (using the STREAMPROC_DEVICE option).
            </summary>
            <param name="freq">Ignored.</param>
            <param name="chans">Ignored.</param>
            <param name="flags">Ignored.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the device's final output mix stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This allows DSP/FX to be applied to all channels that are playing on the device, rather than individual channels. 
            DSP/FX parameter change latency is also reduced because channel playback buffering is avoided. 
            The stream is created with the device's current output sample format; the freq, chans, and flags parameters are ignored. 
            It will always be floating-point except on platforms/architectures that do not support floating-point (see BASS_CONFIG_FLOAT), where it will be 16-bit instead. 
            <para>Each device has a single final output mix stream, which can be used to apply DSP/FX to the device output. 
            Multiple requests for a final output mix stream (using STREAMPROC_DEVICE) on the same device will receive the same stream handle, which cannot be freed via <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/>. 
            It will automatically be freed if the device's output format (sample rate or channel count) changes. A BASS_SYNC_FREE sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be notified when this happens, at which point a new stream with the device's new format could be created.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The STREAMPROC_DEVICE option is not available when using DirectSound output on Windows because BASS does not produce the final output mix then.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateDevice3D(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)">
            <summary>
            Create a "dummy" stream for the device's final output mix (using the STREAMPROC_DEVICE_3D option).
            </summary>
            <param name="freq">Ignored.</param>
            <param name="chans">Ignored.</param>
            <param name="flags">Ignored.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the device's final output mix stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This allows DSP/FX to be applied to all channels that are playing on the device, rather than individual channels. 
            DSP/FX parameter change latency is also reduced because channel playback buffering is avoided. 
            The stream is created with the device's current output sample format; the freq, chans, and flags parameters are ignored. 
            It will always be floating-point except on platforms/architectures that do not support floating-point (see BASS_CONFIG_FLOAT), where it will be 16-bit instead. 
            <para>Each device has a single final output mix stream, which can be used to apply DSP/FX to the device output. 
            Multiple requests for a final output mix stream (using STREAMPROC_DEVICE) on the same device will receive the same stream handle, which cannot be freed via <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/>. 
            It will automatically be freed if the device's output format (sample rate or channel count) changes. A BASS_SYNC_FREE sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be notified when this happens, at which point a new stream with the device's new format could be created.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The STREAMPROC_DEVICE_3D option is not available when using DirectSound output on Windows because BASS does not produce the final output mix then.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)">
            <summary>
            Creates a sample stream from an MP3, MP2, MP1, OGG, WAV, AIFF or plugin supported file via user callback functions.
            </summary>
            <param name="system">File system to use (one of the <see cref="T:Un4seen.Bass.BASSStreamSystem"/>):
            <list type="table">
            <item><term>STREAMFILE_NOBUFFER</term><description>Unbuffered.</description></item>
            <item><term>STREAMFILE_BUFFER</term><description>Buffered.</description></item>
            <item><term>STREAMFILE_BUFFERPUSH</term><description>Buffered, with the data pushed to BASS via <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.IntPtr,System.Int32)"/>.</description></item>
            </list>
            </param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>. This flag is ignored when streaming in blocks (BASS_STREAM_BLOCK).</description></item>
            <item><term>BASS_STREAM_PRESCAN</term><description>Enable pin-point accurate seeking (to the exact byte) on the MP3/MP2/MP1 stream. This also increases the time taken to create the stream, due to the entire file being pre-scanned for the seek points. This flag is ignored with "buffered" streams (buffered=<see langword="true"/>).</description></item>
            <item><term>BASS_STREAM_RESTRATE</term><description>Restrict the download rate of the file to the rate required to sustain playback. If this flag is not used, then the file will be downloaded as quickly as possible. This flag has no effect on "unbuffered" streams (buffered=<see langword="false"/>).</description></item>
            <item><term>BASS_STREAM_BLOCK</term><description>Download and play the file in smaller chunks. Uses a lot less memory than otherwise, but it's not possible to seek or loop the stream - once it's ended, the file must be opened again to play it again. This flag will automatically be applied when the file length is unknown. This flag also has the effect of resticting the download rate. This flag has no effect on "unbuffered" streams (buffered=<see langword="false"/>).</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_ASYNCFILE</term><description>Read the file asynchronously. When enabled, the file is read and buffered in parallel with the decoding, to reduce the chances of the decoder being affected by I/O delays. This can be particularly useful with slow storage media and/or low latency output. The size of the file buffer is determined by the BASS_CONFIG_ASYNCFILE_BUFFER config option. This flag only applies when using the STREAMFILE_NOBUFFER system.</description></item>
            </list>
            </param>
            <param name="procs">The user defined file function (see <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).</param>
            <param name="user">User instance data to pass to the callback functions.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The buffered file system (STREAMFILE_BUFFER) is what is used by <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>. As the name suggests, data from the file is buffered so that it is readily available for decoding; BASS creates a thread dedicated to 'downloading' the data. This is ideal for when the data is coming from a source that has high latency, like the internet. It is not possible to seek in buffered file streams, until the download has reached the requested position; it is not possible to seek at all if it is being streamed in blocks. When streaming in blocks, it may be possible to reset the stream via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> with the BASS_POS_RESET flag, so that it is ready to process new data.</para>
            <para>The push buffered file system (STREAMFILE_BUFFERPUSH) is the same, except that instead of the file data being pulled from the <see cref="T:Un4seen.Bass.FILEREADPROC"/> function in a "download" thread, the data is pushed to BASS via <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.IntPtr,System.Int32)"/>. A <see cref="T:Un4seen.Bass.FILEREADPROC"/> function is still required, to get the initial data used in the creation of the stream (see example below).</para>
            <para>The unbuffered file system (STREAMFILE_NOBUFFER) is what is used by <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>. In this system, BASS does not do any intermediate buffering - it simply requests data from the file as and when it needs it. This means that reading (<see cref="T:Un4seen.Bass.FILEREADPROC"/>) must be quick, otherwise the decoding will be delayed and playback buffer underruns (old data repeated) are a possibility. It's not so important for seeking (<see cref="T:Un4seen.Bass.FILESEEKPROC"/>) to be fast, as that is generally not required during decoding, except when looping a file.</para>
            <para>In all cases, BASS will automatically stall playback of the stream when insufficient data is available, and resume it when enough data does become available.</para>
            <para>A copy is made of the procs callback function table, so it does not have to persist beyond this function call. 
            This means it is not required to pin the <paramref name="procs"/> instance, but it is still required to keep a reference as long as BASS uses the callback delegates in order to prevent the callbacks from being garbage collected.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="system"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_UNSTREAMABLE</term><description>The file cannot be streamed using the buffered file system. This could be because an MP4 file's 'mdat' atom comes before its 'moov' atom.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The file does not contain audio, or it also contains video and videos are disabled.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The file uses a codec that's not available/supported. This can apply to WAV and AIFF files, and also MP3 files when using the "MP3-free" BASS version.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            <para>On Windows and Windows CE, ACM codecs are supported with compressed WAV files. Media Foundation codecs are also supported on Windows 7 and updated versions of Vista, including support for AAC/MP4 and WMA. On iOS and OSX, CoreAudio codecs are supported, adding support for any file formats that have a codec installed. Media Foundation and CoreAudio codecs are only tried after the built-in decoders and any plugins have rejected the file.</para>
            </remarks>
            <example>STREAMFILE_BUFFERPUSH:
            The first thing to note is that <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.IntPtr,System.Int32)"/> needs a stream handle. You don't have that until the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> call returns, 
            so some other way is needed for BASS to get the inital file data that it uses to detect the format/etc. That other way is the <see cref="T:Un4seen.Bass.BASS_FILEPROCS">FILEREADPROC</see>. 
            After the stream has been created, the <see cref="T:Un4seen.Bass.BASS_FILEPROCS">FILEREADPROC</see> is never called again, and the remaining file data is fed to the stream via <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.IntPtr,System.Int32)"/>.
            E.g. a function receiving the data from the Internet would need to buffer the received data until the stream has been created, at which point it can start using <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.IntPtr,System.Int32)"/> instead.
            The <see cref="T:Un4seen.Bass.BASS_FILEPROCS">FILEREADPROC</see> would read data from that buffer, and wait for the data to arrive if necessary. After the stream has been created, any buffered data that's remaining should be fed to the stream, before starting to feed newly arriving data. 
            You'll need some synchronization (eg. a mutex) to enforce that order of things. Something like this (pseudo-code):
            <code lang="null">
            void Connect()
            {
                bufferobj = new Buffer();
                stream = BASS_StreamCreateFileUser(STREAMFILE_BUFFERPUSH, ...);
                lock 
                {
                    BASS_StreamPutFileData(stream, ...); // feed remaining buffered data
                    bufferobj = NULL; // don't need the buffer anymore
                }
            }
            
            void OnReceiveData(pointer buffer, int length)
            {
                lock
                {
                    if (bufferobj)
                        bufferobj.Write(buffer, length);
                    else
                        BASS_StreamPutFileData(stream, buffer, length);
                }
            }
            
            int FileReadProc(pointer buffer, int length, pointer user)
            {
            	int todo = length;
            	while (TRUE) 
            	{
            		lock
            		{
            		    done = bufferobj.Read(buffer, todo);
            		}
            		buffer += done; // move pointer
            		todo -= done;
            		if (todo == 0)
            		    break;
            		if (!bufferobj.WaitForData(timeout)) // wait for more data
            		    break; // timed-out (or perhaps EOF)
            	}
            	return length - todo;
            }
            </code>
            </example>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUnicode(System.Boolean,System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Only used internal! See the file overload of <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> for details!
            </summary>
            <param name="mem">Needs to be set to <see langword="true"/></param>
            <param name="file">The file name to open</param>
            <param name="offset">Set to 0 to start the stream from the beginning</param>
            <param name="length">Data length... 0 = use all data</param>
            <param name="flags">See <see cref="T:Un4seen.Bass.BASSFlag"/> for possible flags</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from an MP3, MP2, MP1, OGG, WAV, AIFF or plugin supported file.
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically, since all .Net strings are always unicode.</para>
            </summary>
            <param name="file">Filename for which a stream should be created.</param>
            <param name="offset">File offset to begin streaming from.</param>
            <param name="length">Data length... 0 = use all data up to the end of the file.</param>
            <param name="flags">Any combination of these flags <see cref="T:Un4seen.Bass.BASSFlag"/>:
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_STREAM_PRESCAN</term><description>Enable pin-point accurate seeking (to the exact byte) on the MP3/MP2/MP1 stream. This also increases the time taken to create the stream, due to the entire file being pre-scanned for the seek points.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            <item><term>BASS_ASYNCFILE</term><description>Read the file asynchronously. When enabled, the file is read and buffered in parallel with the decoding, to reduce the chances of the decoder being affected by I/O delays. This can be particularly useful with slow storage media and/or low latency output. The size of the file buffer is determined by the BASS_CONFIG_ASYNCFILE_BUFFER config option.</description></item>
            <item><term>BASS_UNICODE</term><description>file is a Unicode (16-bit characters) filename (automatically set with this overload).</description></item>
            </list>
            </param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>BASS has built-in support for MPEG, OGG, WAV and AIFF files. Support for additional formats is available via add-ons, which can be downloaded from the BASS website: <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            <para>MPEG 1.0, 2.0 and 2.5 layer 3 (MP3) files are supported, layers 1 (MP1) and 2 (MP2) are also supported. Standard RIFF and RF64 WAV files are supported, with the sample data in a PCM format or compressed with an ACM codec, but the codec is required to be installed on the user's system for the WAV to be decoded. So you should either distribute the codec with your software, or use a codec that comes with Windows (eg. Microsoft ADPCM).
            All PCM formats from 8 to 32-bit are supported in WAV and AIFF files, but the output will be restricted to 16-bit unless the BASS_SAMPLE_FLOAT flag is used. 64-bit floating-point WAV and AIFF files are also supported, but are rendered in 16-bit or 32-bit floating-point depending on the flags.
            The file's original resolution is available via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/>.</para>
            <para>Chained OGG files containing multiple logical bitstreams are supported, but seeking within them is only fully supported if the BASS_STREAM_PRESCAN flag is used (or the BASS_CONFIG_OGG_PRESCAN config option is enabled) to have them pre-scanned.
            Without pre-scanning, seeking will only be possible back to the start. The BASS_POS_OGG "mode" can be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> to get the number of bitstreams and with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> to seek to a particular one.
            A BASS_SYNC_OGG_CHANGE sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be informed of when a new bitstream begins during decoding/playback.</para>
            <para>Multi-channel (ie. more than stereo) OGG, WAV and AIFF files are supported.</para>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>.</para>
            <para>If length = 0 (use all data up to the end of the file), and the file length increases after creating the stream (ie. the file is still being written), then BASS will play the extra data too, but the length returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> will not be updated until the end is reached. The <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> return values will be updated during playback of the extra data though.</para>
            <para>To stream a file from the internet, use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>. To stream from other locations, see <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The file does not contain audio, or it also contains video and videos are disabled.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The file uses a codec that's not available/supported. This can apply to WAV and AIFF files, and also MP3 files when using the "MP3-free" BASS version.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            <para>On Windows and Windows CE, ACM codecs are supported with compressed WAV files. Media Foundation codecs are also supported on Windows 7 and updated versions of Vista, including support for AAC/MP4 and WMA. On iOS and OSX, CoreAudio codecs are supported, adding support for any file formats that have a codec installed. Media Foundation and CoreAudio codecs are only tried after the built-in decoders and any plugins have rejected the file.</para>
            </remarks>
            <example>
            The following example demonstrates how to stream from a file (floating-point):
            <code lang="C#">
            // Init Bass
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            // create the stream
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                              BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_PRESCAN);
            if (stream != 0 &amp;&amp; Bass.BASS_ChannelPlay(stream, false) )
            {
              // playing
            }
            else
            {
              Console.WriteLine("Error={0}", Bass.BASS_ErrorGetCode());
            }
            </code>
            <code lang="VB">
            ' Init Bass
            Bass.BASS_Init(- 1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            ' create the stream
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                                         BASSFlag.BASS_SAMPLE_FLOAT Or BASSFlag.BASS_STREAM_PRESCAN)
            If stream &lt;&gt; 0 AndAlso Bass.BASS_ChannelPlay(stream, False) Then
              ' playing
            Else
              Console.WriteLine("Error={0}", Bass.BASS_ErrorGetCode())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateFileMemory(System.Boolean,System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Only used internal! See the memory overload of <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> for details!
            </summary>
            <param name="mem">Needs to be set to <see langword="true"/></param>
            <param name="memory">The IntPtr to the unmananged buffer containing the stream data</param>
            <param name="offset">Set to 0 to start the stream from the beginning</param>
            <param name="length">Needs to be set to the total length of the buffer data</param>
            <param name="flags">See <see cref="T:Un4seen.Bass.BASSFlag"/> for possible flags</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.IntPtr,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)">
            <summary>
            Creates a sample stream from an MP3, MP2, MP1, OGG, WAV, AIFF or plugin supported memory IntPtr.
            <para>This overload implements streaming from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">Offset to begin streaming from (unused for memory streams, set to 0).</param>
            <param name="length">Data length (needs to be set to the length of the memory stream in bytes which should be played).</param>
            <param name="flags">Any combination of these flags <see cref="T:Un4seen.Bass.BASSFlag"/>, needs to casted into an (int) because we needed another method signature here.
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</description></item>
            <item><term>BASS_STREAM_PRESCAN</term><description>Enable pin-point accurate seeking (to the exact byte) on the MP3/MP2/MP1 stream. This also increases the time taken to create the stream, due to the entire file being pre-scanned for the seek points.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            </list>
            </param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>BASS has built-in support for MPEG, OGG, WAV and AIFF files. Support for additional formats is available via add-ons, which can be downloaded from the BASS website: <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            <para>MPEG 1.0, 2.0 and 2.5 layer 3 (MP3) files are supported, layers 1 (MP1) and 2 (MP2) are also supported. Standard RIFF and RF64 WAV files are supported, with the sample data in a PCM format or compressed with an ACM codec, but the codec is required to be installed on the user's system for the WAV to be decoded. So you should either distribute the codec with your software, or use a codec that comes with Windows (eg. Microsoft ADPCM). All PCM formats from 8 to 32-bit are supported in WAV and AIFF files, but the output will be restricted to 16-bit unless the BASS_SAMPLE_FLOAT flag is used. 64-bit floating-point WAV and AIFF files are also supported, but are rendered in 16-bit or 32-bit floating-point depending on the flags. The file's original resolution is available via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/>.</para>
            <para>Chained OGG files containing multiple logical bitstreams are supported, but seeking within them is only fully supported if the BASS_STREAM_PRESCAN flag is used (or the BASS_CONFIG_OGG_PRESCAN config option is enabled) to have them pre-scanned.
            Without pre-scanning, seeking will only be possible back to the start. The BASS_POS_OGG "mode" can be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> to get the number of bitstreams and with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> to seek to a particular one.
            A BASS_SYNC_OGG_CHANGE sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be informed of when a new bitstream begins during decoding/playback.</para>
            <para>Multi-channel (ie. more than stereo) OGG, WAV and AIFF files are supported.</para>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>.</para>
            <para>If length = 0 (use all data up to the end of the file), and the file length increases after creating the stream (ie. the file is still being written), then BASS will play the extra data too, but the length returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> will not be updated until the end is reached. The <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> return values will be updated during playback of the extra data though.</para>
            <para>When streaming from memory, the memory must not be freed before the stream is freed. There may be exceptions to that with some add-ons (see the documentation).</para>
            <para>To stream a file from the internet, use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>. To stream from other locations, see <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>.</para>
            <para>Don't forget to pin your memory object when using this overload.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="length"/> must be specified when streaming from memory.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The file does not contain audio, or it also contains video and videos are disabled.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The file uses a codec that's not available/supported. This can apply to WAV and AIFF files, and also MP3 files when using the "MP3-free" BASS version.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            <para>On Windows and Windows CE, ACM codecs are supported with compressed WAV files. Media Foundation codecs are also supported on Windows 7 and updated versions of Vista, including support for AAC/MP4 and WMA. On iOS and OSX, CoreAudio codecs are supported, adding support for any file formats that have a codec installed. Media Foundation and CoreAudio codecs are only tried after the built-in decoders and any plugins have rejected the file.</para>
            </remarks>
            <example>
            The following example demontrates how to stream from memory:
            <code lang="C#">
            private GCHandle _hGCFile;
            ...
            // open a file
            FileStream fs = File.OpenRead( "test.mp3" );
            // get the legth of the file
            long length = fs.Length;
            // create the buffer which will keep the file in memory
            byte[] buffer = new byte[length];
            // read the file into the buffer
            fs.Read(buffer, 0, (int)length);
            // buffer is filled, file can be closed
            fs.Close();
            
            // now create a pinned handle, so that the Garbage Collector will not move this object
            _hGCFile = GCHandle.Alloc( buffer, GCHandleType.Pinned );
            // create the stream (AddrOfPinnedObject delivers the necessary IntPtr)
            int stream = Bass.BASS_StreamCreateFile(_hGCFile.AddrOfPinnedObject(),
                              0L, length, BASSFlag.BASS_SAMPLE_FLOAT);
            
            if (stream != 0 &amp;&amp; Bass.BASS_ChannelPlay(stream, false) )
            {
            	// playing...
            }
            else
            {
            	Console.WriteLine("Error = {0}", Bass.BASS_ErrorGetCode());
            }
            ...
            // when playback has ended and the pinned object is not needed anymore, 
            // we need to free the handle!
            // Note: calling this method to early will crash the application, 
            // since the buffer would be stolen from BASS while still playing!
            _hGCFile.Free();
            </code>
            <code lang="VB">
            Private _hGCFile As GCHandle
            ...
            ' open a file
            Dim fs As FileStream = File.OpenRead("test.mp3")
            ' get the legth of the file
            Dim length As Long = fs.Length
            ' create the buffer which will keep the file in memory
            Dim buffer(length - 1) As Byte
            ' read the file into the buffer
            fs.Read(buffer, 0, length)
            ' buffer is filled, file can be closed
            fs.Close()
            
            ' now create a pinned handle, so that the Garbage Collector will not move this object
            _hGCFile = GCHandle.Alloc(buffer, GCHandleType.Pinned)
            ' create the stream (AddrOfPinnedObject delivers the necessary IntPtr)
            Dim stream As Integer = Bass.BASS_StreamCreateFile(_hGCFile.AddrOfPinnedObject(),
                                         0L, length, BASSFlag.BASS_SAMPLE_FLOAT)
            
            If stream &lt;&gt; 0 AndAlso Bass.BASS_ChannelPlay(stream, False) Then
              ' playing...
            Else
              Console.WriteLine("Error = {0}", Bass.BASS_ErrorGetCode())
            End If
            ...
            ' when playback has ended and the pinned object is not needed anymore, 
            ' we need to free the handle!
            ' Note: calling this method to early will crash the application, 
            ' since the buffer would be stolen from BASS while still playing!
            _hGCFile.Free()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateURLUnicode(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateURLAscii(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="url"></param>
            <param name="offset"></param>
            <param name="flags"></param>
            <param name="proc"></param>
            <param name="user"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)">
            <summary>
            Creates a sample stream from an MP3, MP2, MP1, OGG, WAV, AIFF or plugin supported file on the internet, optionally receiving the downloaded data in a callback.
            </summary>
            <param name="url">URL of the file to stream. Should begin with "http://", "https://" or "ftp://", or another add-on supported protocol.
            The URL can be followed by custom HTTP request headers to be sent to the server; the URL and each header should be terminated with a carriage return and line feed ("\r\n").</param>
            <param name="offset">File position to start streaming from. This is ignored by some servers, specifically when the file length is unknown, for example a Shout/Icecast server.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D streams must be mono. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>. This flag is ignored when streaming in blocks (BASS_STREAM_BLOCK).</description></item>
            <item><term>BASS_STREAM_RESTRATE</term><description>Restrict the download rate of the file to the rate required to sustain playback. If this flag is not used, then the file will be downloaded as quickly as the user's internet connection allows.</description></item>
            <item><term>BASS_STREAM_BLOCK</term><description>Download and play the file in smaller chunks, instead of downloading the entire file to memory. Uses a lot less memory than otherwise, but it is not possible to seek or loop the stream; once it has ended, the file must be opened again to play it again. This flag will automatically be applied when the file length is unknown, for example with Shout/Icecast streams. This flag also has the effect of restricting the download rate.</description></item>
            <item><term>BASS_STREAM_STATUS</term><description>Pass status info (HTTP/ICY tags) from the server to the <see cref="T:Un4seen.Bass.DOWNLOADPROC"/> callback during connection. This can be useful to determine the reason for a failure.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the stream when it ends. This allows you to stream a file and forget about it, as BASS will automatically free the stream's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. The BASS_SAMPLE_SOFTWARE, BASS_SAMPLE_3D, BASS_SAMPLE_FX, BASS_STREAM_AUTOFREE and SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>.</description></item>
            </list>
            </param>
            <param name="proc">Callback function to receive the file as it is downloaded... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new stream's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on the format (sample rate, resolution, channels) of the stream. The playback length of the stream can be retrieved using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>.</para>
            <para>When playing the stream, BASS will stall the playback if there is insufficient data to continue playing. Playback will automatically be resumed when sufficient data has been downloaded. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to check if the playback is stalled, and the progress of the file download can be checked with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/>.</para>
            <para>When streaming in blocks (BASS_STREAM_BLOCK flag), be careful not to stop/pause the stream for too long, otherwise the connection may timeout due to there being no activity and the stream will end prematurely.</para>
            <para>When streaming from Shoutcast servers, metadata (track titles) may be sent by the server. The data can be retrieved with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>. A sync can also be set (using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>) so that you are informed when metadata is received. A BASS_SYNC_OGG_CHANGE sync can be used to be informed of when a new logical bitstream begins in an Icecast/OGG stream.</para>
            <para>When using an <paramref name="offset"/>, the file length returned by <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> can be used to check that it was successful by comparing it with the original file length. Another way to check is to inspect the HTTP headers retrieved with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.</para>
            <para>Custom HTTP request headers may be ignored by some plugins, notably BASSWMA.</para>
            <para><b>Platform-specific:</b> On Windows and Windows CE, ACM codecs are supported with compressed WAV files. Media Foundation codecs are also supported on Windows 7 and updated versions of Vista, including support for AAC and WMA. On iOS and macOS, CoreAudio codecs are supported, including support for AAC and ALAC. Android's media codecs are also supported, including support for AAC. In all cases, the OS's codecs are only tried after BASS's built-in decoders and any plugins have rejected the file. Built-in support for IMA and Microsoft ADPCM WAV files is provided on Linux/Android/Windows CE, while they are supported via ACM and CoreAudio codecs on Windows and macOS/iOS.</para>
            <para>On iOS 7 and above, this function can be used to open files in the iPod Library ("ipod-library://" URLs). The offset and proc and user parameters are ignored then, as are the BASS_STREAM_RESTRATE and BASS_STREAM_BLOCK and BASS_STREAM_STATUS flags. The files are played using CoreAudio codecs and BASS does not have direct access to the files itself, so the only tags available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> will be BASS_TAG_CA_CODEC tags; the MPMediaItem properties could be used to get more info.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels (BASS_STREAM_DECODE) are allowed when using the "no sound" device. The BASS_STREAM_AUTOFREE flag is also unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_NONET</term><description>No internet connection could be opened. Can be caused by a bad <see cref="T:Un4seen.Bass.BASSConfig">proxy setting</see>.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="url"/> is not a valid URL.</description></item>
            <item><term>BASS_ERROR_PROTOCOL</term><description>The protocol in <paramref name="url"/> is not supported.</description></item>
            <item><term>BASS_ERROR_SSL</term><description>SSL/HTTPS support is not available. See <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_LIBSSL"/>.</description></item>
            <item><term>BASS_ERROR_TIMEOUT</term><description>The server did not respond to the request within the timeout period, as set with the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_NET_TIMEOUT</see> config option.</description></item>
            <item><term>BASS_ERROR_DENIED</term><description>A valid username/password is required.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_UNSTREAMABLE</term><description>The file cannot be streamed. This could be because an MP4 file's 'mdat' atom comes before its 'moov' atom.</description></item>
            <item><term>BASS_ERROR_NOTAUDIO</term><description>The file does not contain audio, or it also contains video and videos are disabled.</description></item>
            <item><term>BASS_ERROR_CODEC</term><description>The file uses a codec that's not available/supported. This can apply to WAV and AIFF files, and also MP3 files when using the "MP3-free" BASS version.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            <para>On Windows and Windows CE, ACM codecs are supported with compressed WAV files. Media Foundation codecs are also supported on Windows 7 and updated versions of Vista, including support for AAC and WMA. On iOS and OSX, CoreAudio codecs are supported, including support for AAC and ALAC. Media Foundation and CoreAudio codecs are only tried after the built-in decoders and any plugins have rejected the file. Built-in support for IMA and Microsoft ADPCM WAV files is provided on Linux/Android/Windows CE, while they are supported via ACM and CoreAudio codecs on Windows and OSX/iOS.</para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            int channel = Bass.BASS_StreamCreateURL("http://someurl.com:8000", 0, 
                               BASSFlag.BASS_DEFAULT, null, IntPtr.Zero);
            Bass.BASS_ChannelPlay(channel, false);
            </code>
            <code lang="VB">
            Bass.BASS_Init(- 1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            Dim channel As Integer = Bass.BASS_StreamCreateURL("http://someurl.com:8000", 0, 
                                          BASSFlag.BASS_DEFAULT, Nothing, IntPtr.Zero)
            Bass.BASS_ChannelPlay(channel, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)">
            <summary>
            Retrieves the decoding/download/end position of a file stream.
            </summary>
            <param name="handle">The stream's handle.</param>
            <param name="mode">The file position to retrieve. One of the following (<see cref="T:Un4seen.Bass.BASSStreamFilePosition"/>):
            <list type="table">
            <item><term>BASS_FILEPOS_ASYNCBUF</term><description>The amount of data in the asynchronous file reading buffer. This requires that the BASS_ASYNCFILE flag was used at the stream's creation.</description></item>
            <item><term>BASS_FILEPOS_AVAILABLE</term><description>The amount of data currently available to read from the current position.</description></item>
            <item><term>BASS_FILEPOS_BUFFER</term><description>The amount of data in the buffer of an internet file stream or "buffered" user file stream. Unless streaming in blocks, this is the same as BASS_FILEPOS_DOWNLOAD.</description></item>
            <item><term>BASS_FILEPOS_BUFFERING</term><description>The percentage of buffering remaining before playback of an internet file stream or 'buffered' user file stream can resume.</description></item>
            <item><term>BASS_FILEPOS_CONNECTED</term><description>Internet file stream or "buffered" user file stream is still connected? 0 = no, 1 = yes.</description></item>
            <item><term>BASS_FILEPOS_CURRENT</term><description>Position that is to be decoded for playback next. This will be a bit ahead of the position actually being heard due to buffering.</description></item>
            <item><term>BASS_FILEPOS_DOWNLOAD</term><description>Download progress of an internet file stream or "buffered" user file stream.</description></item>
            <item><term>BASS_FILEPOS_END</term><description>End of the file, in other words the file length. When streaming in blocks, the file length is unknown, so the download buffer length is returned instead.</description></item>
            <item><term>BASS_FILEPOS_SIZE</term><description>Total size of the file.</description></item>
            <item><term>BASS_FILEPOS_START</term><description>Start of stream data in the file.</description></item>
            </list>
            <i>Other modes may be supported by add-ons, see the documentation.</i>
            </param>
            <returns>If succesful, then the requested file position is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>ID3 tags (both v1 and v2) and WAVE headers, as well as any other rubbish at the start of the file, are excluded from the BASS_FILEPOS_CURRENT, BASS_FILEPOS_DOWNLOAD, and BASS_FILEPOS_END positions. 
            The BASS_FILEPOS_START position can be added to get the actual file position.</para>
            <para>When streaming a file from the internet or a 'buffered' user file stream, the entire file is downloaded even if the audio data ends before that, in case there are tags to be read. This means that the BASS_FILEPOS_DOWNLOAD position may go beyond the BASS_FILEPOS_END position.</para>
            <para>It's unwise to use this function (with mode = BASS_FILEPOS_CURRENT) for syncing purposes because it returns the position that's being decoded, not the position that's being heard.
            Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> for syncing instead.</para>
            <para><b>Platform-specific:</b> When an Android media codec (except AAC/ADTS) is used by a stream, only the BASS_FILEPOS_SIZE mode is supported, as the file reading will not be handled by BASS.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTFILE</term><description>The stream is not a file stream.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested file position/status is not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the percentage downloaded of an internet file stream, 
            or the buffering progress when streaming in blocks:
            <code lang="C#">
            float progress;
            // file length
            int len = Bass.BASS_StreamGetFilePosition(stream, BASSStreamFilePosition.BASS_FILEPOS_END);
            // download progress
            int down = Bass.BASS_StreamGetFilePosition(stream, BASSStreamFilePosition.BASS_FILEPOS_DOWNLOAD);
            // get channel info
            BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(stream);
            // streaming in blocks?
            if (info.flags &amp; BASSFlag.BASS_STREAM_BLOCK != BASSFlag.BASS_DEFAULT)
            { 
              // decode position
              int dec = BASS_StreamGetFilePosition(stream, BASSStreamFilePosition.BASS_FILEPOS_CURRENT);
              // percentage of buffer used
              progress = (down-dec)*100f / len;
              if (progress &gt; 100)
                progress = 100; // restrict to 100 (can be higher)
            } 
            else
            {
              // percentage of file downloaded
              progress = down*100f / len;
            }
            </code>
            <code lang="VB">
            Dim progress As Single
            ' file length
            Dim len As Integer = Bass.BASS_StreamGetFilePosition(stream, BASSStreamFilePosition.BASS_FILEPOS_END)
            ' download progress
            Dim down As Integer = Bass.BASS_StreamGetFilePosition(stream, BASSStreamFilePosition.BASS_FILEPOS_DOWNLOAD)
            ' get channel info
            Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(stream)
            ' streaming in blocks?
            If info.flags And BASSFlag.BASS_STREAM_BLOCK &lt;&gt; BASSFlag.BASS_DEFAULT Then
              ' decode position
              Dim dec As Integer = BASS_StreamGetFilePosition(stream, BASSStreamFilePosition.BASS_FILEPOS_CURRENT)
              ' percentage of buffer used
              progress =(down - dec) * 100F / len
              If progress &gt; 100 Then
                progress = 100 ' restrict to 100 (can be higher)
              End If
            Else
              ' percentage of file downloaded
              progress = down * 100F / len
            End If
            </code>
            Get the average bitrate of a file:
            <code lang="C#">
            // playback duration
            double time = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));
            // file length
            long len = Bass.BASS_StreamGetFilePosition(stream, BASSStreamFilePosition.BASS_FILEPOS_END);
            // bitrate (kbps)
            int bitrate = (int)(len/(125*time)+0.5d);
            </code>
            <code lang="VB">
            ' playback duration
            Dim time As Double = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream))
            ' file length
            Dim len As Long = Bass.BASS_StreamGetFilePosition(stream, BASSStreamFilePosition.BASS_FILEPOS_END)
            ' bitrate (kbps)
            Dim bitrate As Integer = CInt(len /(125 * time) + 0.5)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)">
            <summary>
            Frees a sample stream's resources, including any SYNC/DSP/FX it has.
            </summary>
            <param name="handle"> The stream handle.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Adds sample data to a "push" stream.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/>).</param>
            <param name="buffer">Pointer to the sample data (<see langword="null"/> = allocate space in the queue buffer so that there is at least length bytes of free space).</param>
            <param name="length">The amount of data in bytes, optionally using the <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> flag to signify the end of the stream. 0 can be used to just check how much data is queued.</param>
            <returns>If successful, the amount of queued data is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>As much data as possible will be placed in the stream's playback buffer, and any remainder will be queued for when more space becomes available, ie. as the buffered data is played. 
            With a decoding channel, there is no playback buffer, so all data is queued in that case. There is no limit to the amount of data that can be queued, besides available memory.
            The queue buffer will be automatically enlarged as required to hold the data, but it can also be enlarged in advance. The queue buffer is freed when the stream ends or is reset, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> (with restart = TRUE) or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> (with pos = 0).</para>
            <para>DSP/FX are applied when the data reaches the playback buffer, or the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> call in the case of a decoding channel.</para>
            <para>Data should be provided at a rate sufficent to sustain playback. If the buffer gets exhausted, BASS will automatically stall playback of the stream, until more data is provided. 
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check the buffer level, and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to check if playback has stalled. 
            A BASS_SYNC_STALL sync can also be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the push system.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid, it must equate to a whole number of samples.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Creating a stream duplicate:
            <code lang="C#">
            private DSPPROC _dupCallback;
            ...
            // create stream on device 1
            Bass.BASS_SetDevice(1);
            int orig = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP);
            Bass.BASS_ChannelPlay(orig, false);
            ...
            // create a clone on device 2
            BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(stream);
            Bass.BASS_SetDevice(2);
            int clone = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero);
            // pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream);
            int c = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, (int)BASSData.BASS_DATA_AVAILABLE);
            byte[] buf = new byte[c];
            Bass.BASS_ChannelGetData(stream, buf, c);
            Bass.BASS_StreamPutData(clone, buf, c);
            // set DSP to copy new data from source stream
            _dupCallback = new DSPPROC(DupDSP);
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, new IntPtr(clone), 0);
            Bass.BASS_ChannelPlay(orig, false); // resume source
            Bass.BASS_ChannelPlay(clone, false); // play clone
            ...
            private void DupDSP(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Private _dupCallback As DSPPROC
            ...
            ' create stream on device 1
            Bass.BASS_SetDevice(1)
            Dim orig As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP)
            Bass.BASS_ChannelPlay(orig, False)
            ...
            ' create a clone on device 2
            Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(stream)
            Bass.BASS_SetDevice(2)
            Dim clone As Integer = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero)
            ' pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream)
            Dim c As Integer = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, CInt(BASSData.BASS_DATA_AVAILABLE))
            Dim buf(c) As Byte
            Bass.BASS_ChannelGetData(stream, buf, c)
            Bass.BASS_StreamPutData(clone, buf, c)
            ' set DSP to copy new data from source stream
            _dupCallback = New DSPPROC(DupDSP)
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, New IntPtr(clone), 0)
            Bass.BASS_ChannelPlay(orig, False) ' resume source
            Bass.BASS_ChannelPlay(clone, False) ' play clone
            ...
            Private Sub DupDSP(handle As Integer, channel As Integer, 
                               buffer As IntPtr, length As Integer, user As IntPtr)
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.Single[],System.Int32)">
            <summary>
            Adds sample data to a "push" stream.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/>).</param>
            <param name="buffer">The array of float sample data to provide (<see langword="null"/> = allocate space in the queue buffer so that there is at least length bytes of free space).</param>
            <param name="length">The amount of data in bytes! (buffer.Length*4), optionally using the <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> flag to signify the end of the stream. 0 can be used to just check how much data is queued.</param>
            <returns>If successful, the amount of queued data is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>As much data as possible will be placed in the stream's playback buffer, and any remainder will be queued for when more space becomes available, ie. as the buffered data is played. 
            With a decoding channel, there is no playback buffer, so all data is queued in that case. There is no limit to the amount of data that can be queued, besides available memory.
            The queue buffer will be automatically enlarged as required to hold the data, but it can also be enlarged in advance. The queue buffer is freed when the stream ends or is reset, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> (with restart = TRUE) or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> (with pos = 0).</para>
            <para>DSP/FX are applied when the data reaches the playback buffer, or the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> call in the case of a decoding channel.</para>
            <para>Data should be provided at a rate sufficent to sustain playback. If the buffer gets exhausted, BASS will automatically stall playback of the stream, until more data is provided. 
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check the buffer level, and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to check if playback has stalled. 
            A BASS_SYNC_STALL sync can also be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the push system.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid, it must equate to a whole number of samples.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Creating a stream duplicate:
            <code lang="C#">
            private DSPPROC _dupCallback;
            ...
            // create stream on device 1
            Bass.BASS_SetDevice(1);
            int orig = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP);
            Bass.BASS_ChannelPlay(orig, false);
            ...
            // create a clone on device 2
            BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(stream);
            Bass.BASS_SetDevice(2);
            int clone = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero);
            // pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream);
            int c = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, (int)BASSData.BASS_DATA_AVAILABLE);
            byte[] buf = new byte[c];
            Bass.BASS_ChannelGetData(stream, buf, c);
            Bass.BASS_StreamPutData(clone, buf, c);
            // set DSP to copy new data from source stream
            _dupCallback = new DSPPROC(DupDSP);
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, new IntPtr(clone), 0);
            Bass.BASS_ChannelPlay(orig, false); // resume source
            Bass.BASS_ChannelPlay(clone, false); // play clone
            ...
            private void DupDSP(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Private _dupCallback As DSPPROC
            ...
            ' create stream on device 1
            Bass.BASS_SetDevice(1)
            Dim orig As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP)
            Bass.BASS_ChannelPlay(orig, False)
            ...
            ' create a clone on device 2
            Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(stream)
            Bass.BASS_SetDevice(2)
            Dim clone As Integer = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero)
            ' pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream)
            Dim c As Integer = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, CInt(BASSData.BASS_DATA_AVAILABLE))
            Dim buf(c) As Byte
            Bass.BASS_ChannelGetData(stream, buf, c)
            Bass.BASS_StreamPutData(clone, buf, c)
            ' set DSP to copy new data from source stream
            _dupCallback = New DSPPROC(DupDSP)
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, New IntPtr(clone), 0)
            Bass.BASS_ChannelPlay(orig, False) ' resume source
            Bass.BASS_ChannelPlay(clone, False) ' play clone
            ...
            Private Sub DupDSP(handle As Integer, channel As Integer, 
                               buffer As IntPtr, length As Integer, user As IntPtr)
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.Int32[],System.Int32)">
            <summary>
            Adds sample data to a "push" stream.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/>).</param>
            <param name="buffer">The array of Int32 sample data to provide (<see langword="null"/> = allocate space in the queue buffer so that there is at least length bytes of free space; Caution: Int32=2xInt16, so this overload can e.g. be used to provide a stereo sample containing of two 16-bit values).</param>
            <param name="length">The amount of data in bytes! (buffer.Length*4), optionally using the <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> flag to signify the end of the stream. 0 can be used to just check how much data is queued.</param>
            <returns>If successful, the amount of queued data is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>As much data as possible will be placed in the stream's playback buffer, and any remainder will be queued for when more space becomes available, ie. as the buffered data is played. 
            With a decoding channel, there is no playback buffer, so all data is queued in that case. There is no limit to the amount of data that can be queued, besides available memory.
            The queue buffer will be automatically enlarged as required to hold the data, but it can also be enlarged in advance. The queue buffer is freed when the stream ends or is reset, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> (with restart = TRUE) or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> (with pos = 0).</para>
            <para>DSP/FX are applied when the data reaches the playback buffer, or the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> call in the case of a decoding channel.</para>
            <para>Data should be provided at a rate sufficent to sustain playback. If the buffer gets exhausted, BASS will automatically stall playback of the stream, until more data is provided. 
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check the buffer level, and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to check if playback has stalled. 
            A BASS_SYNC_STALL sync can also be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the push system.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid, it must equate to a whole number of samples.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Creating a stream duplicate:
            <code lang="C#">
            private DSPPROC _dupCallback;
            ...
            // create stream on device 1
            Bass.BASS_SetDevice(1);
            int orig = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP);
            Bass.BASS_ChannelPlay(orig, false);
            ...
            // create a clone on device 2
            BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(stream);
            Bass.BASS_SetDevice(2);
            int clone = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero);
            // pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream);
            int c = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, (int)BASSData.BASS_DATA_AVAILABLE);
            byte[] buf = new byte[c];
            Bass.BASS_ChannelGetData(stream, buf, c);
            Bass.BASS_StreamPutData(clone, buf, c);
            // set DSP to copy new data from source stream
            _dupCallback = new DSPPROC(DupDSP);
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, new IntPtr(clone), 0);
            Bass.BASS_ChannelPlay(orig, false); // resume source
            Bass.BASS_ChannelPlay(clone, false); // play clone
            ...
            private void DupDSP(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Private _dupCallback As DSPPROC
            ...
            ' create stream on device 1
            Bass.BASS_SetDevice(1)
            Dim orig As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP)
            Bass.BASS_ChannelPlay(orig, False)
            ...
            ' create a clone on device 2
            Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(stream)
            Bass.BASS_SetDevice(2)
            Dim clone As Integer = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero)
            ' pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream)
            Dim c As Integer = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, CInt(BASSData.BASS_DATA_AVAILABLE))
            Dim buf(c) As Byte
            Bass.BASS_ChannelGetData(stream, buf, c)
            Bass.BASS_StreamPutData(clone, buf, c)
            ' set DSP to copy new data from source stream
            _dupCallback = New DSPPROC(DupDSP)
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, New IntPtr(clone), 0)
            Bass.BASS_ChannelPlay(orig, False) ' resume source
            Bass.BASS_ChannelPlay(clone, False) ' play clone
            ...
            Private Sub DupDSP(handle As Integer, channel As Integer, 
                               buffer As IntPtr, length As Integer, user As IntPtr)
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.Int16[],System.Int32)">
            <summary>
            Adds sample data to a "push" stream.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/>).</param>
            <param name="buffer">The array of Int16 sample data to provide (<see langword="null"/> = allocate space in the queue buffer so that there is at least length bytes of free space).</param>
            <param name="length">The amount of data in bytes! (buffer.Length*2), optionally using the <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> flag to signify the end of the stream. 0 can be used to just check how much data is queued.</param>
            <returns>If successful, the amount of queued data is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>As much data as possible will be placed in the stream's playback buffer, and any remainder will be queued for when more space becomes available, ie. as the buffered data is played. 
            With a decoding channel, there is no playback buffer, so all data is queued in that case. There is no limit to the amount of data that can be queued, besides available memory.
            The queue buffer will be automatically enlarged as required to hold the data, but it can also be enlarged in advance. The queue buffer is freed when the stream ends or is reset, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> (with restart = TRUE) or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> (with pos = 0).</para>
            <para>DSP/FX are applied when the data reaches the playback buffer, or the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> call in the case of a decoding channel.</para>
            <para>Data should be provided at a rate sufficent to sustain playback. If the buffer gets exhausted, BASS will automatically stall playback of the stream, until more data is provided. 
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check the buffer level, and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to check if playback has stalled. 
            A BASS_SYNC_STALL sync can also be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the push system.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid, it must equate to a whole number of samples.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Creating a stream duplicate:
            <code lang="C#">
            private DSPPROC _dupCallback;
            ...
            // create stream on device 1
            Bass.BASS_SetDevice(1);
            int orig = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP);
            Bass.BASS_ChannelPlay(orig, false);
            ...
            // create a clone on device 2
            BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(stream);
            Bass.BASS_SetDevice(2);
            int clone = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero);
            // pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream);
            int c = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, (int)BASSData.BASS_DATA_AVAILABLE);
            byte[] buf = new byte[c];
            Bass.BASS_ChannelGetData(stream, buf, c);
            Bass.BASS_StreamPutData(clone, buf, c);
            // set DSP to copy new data from source stream
            _dupCallback = new DSPPROC(DupDSP);
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, new IntPtr(clone), 0);
            Bass.BASS_ChannelPlay(orig, false); // resume source
            Bass.BASS_ChannelPlay(clone, false); // play clone
            ...
            private void DupDSP(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Private _dupCallback As DSPPROC
            ...
            ' create stream on device 1
            Bass.BASS_SetDevice(1)
            Dim orig As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP)
            Bass.BASS_ChannelPlay(orig, False)
            ...
            ' create a clone on device 2
            Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(stream)
            Bass.BASS_SetDevice(2)
            Dim clone As Integer = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero)
            ' pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream)
            Dim c As Integer = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, CInt(BASSData.BASS_DATA_AVAILABLE))
            Dim buf(c) As Byte
            Bass.BASS_ChannelGetData(stream, buf, c)
            Bass.BASS_StreamPutData(clone, buf, c)
            ' set DSP to copy new data from source stream
            _dupCallback = New DSPPROC(DupDSP)
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, New IntPtr(clone), 0)
            Bass.BASS_ChannelPlay(orig, False) ' resume source
            Bass.BASS_ChannelPlay(clone, False) ' play clone
            ...
            Private Sub DupDSP(handle As Integer, channel As Integer, 
                               buffer As IntPtr, length As Integer, user As IntPtr)
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.Byte[],System.Int32)">
            <summary>
            Adds sample data to a "push" stream.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/>).</param>
            <param name="buffer">The array of byte sample data to provide (<see langword="null"/> = allocate space in the queue buffer so that there is at least length bytes of free space).</param>
            <param name="length">The amount of data in bytes, optionally using the <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> flag to signify the end of the stream. 0 can be used to just check how much data is queued.</param>
            <returns>If successful, the amount of queued data is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>As much data as possible will be placed in the stream's playback buffer, and any remainder will be queued for when more space becomes available, ie. as the buffered data is played. 
            With a decoding channel, there is no playback buffer, so all data is queued in that case. There is no limit to the amount of data that can be queued, besides available memory.
            The queue buffer will be automatically enlarged as required to hold the data, but it can also be enlarged in advance. The queue buffer is freed when the stream ends or is reset, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> (with restart = TRUE) or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> (with pos = 0).</para>
            <para>DSP/FX are applied when the data reaches the playback buffer, or the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> call in the case of a decoding channel.</para>
            <para>Data should be provided at a rate sufficent to sustain playback. If the buffer gets exhausted, BASS will automatically stall playback of the stream, until more data is provided. 
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check the buffer level, and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to check if playback has stalled. 
            A BASS_SYNC_STALL sync can also be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the push system.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid, it must equate to a whole number of samples.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Creating a stream duplicate:
            <code lang="C#">
            private DSPPROC _dupCallback;
            ...
            // create stream on device 1
            Bass.BASS_SetDevice(1);
            int orig = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP);
            Bass.BASS_ChannelPlay(orig, false);
            ...
            // create a clone on device 2
            BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(stream);
            Bass.BASS_SetDevice(2);
            int clone = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero);
            // pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream);
            int c = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, (int)BASSData.BASS_DATA_AVAILABLE);
            byte[] buf = new byte[c];
            Bass.BASS_ChannelGetData(stream, buf, c);
            Bass.BASS_StreamPutData(clone, buf, c);
            // set DSP to copy new data from source stream
            _dupCallback = new DSPPROC(DupDSP);
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, new IntPtr(clone), 0);
            Bass.BASS_ChannelPlay(orig, false); // resume source
            Bass.BASS_ChannelPlay(clone, false); // play clone
            ...
            private void DupDSP(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Private _dupCallback As DSPPROC
            ...
            ' create stream on device 1
            Bass.BASS_SetDevice(1)
            Dim orig As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_LOOP)
            Bass.BASS_ChannelPlay(orig, False)
            ...
            ' create a clone on device 2
            Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(stream)
            Bass.BASS_SetDevice(2)
            Dim clone As Integer = Bass.BASS_StreamCreatePush(info.freq, info.chans, info.flags, IntPtr.Zero)
            ' pause source stream to synchonise buffer contents
            Bass.BASS_ChannelPause(stream)
            Dim c As Integer = Bass.BASS_ChannelGetData(stream, IntPtr.Zero, CInt(BASSData.BASS_DATA_AVAILABLE))
            Dim buf(c) As Byte
            Bass.BASS_ChannelGetData(stream, buf, c)
            Bass.BASS_StreamPutData(clone, buf, c)
            ' set DSP to copy new data from source stream
            _dupCallback = New DSPPROC(DupDSP)
            Bass.BASS_ChannelSetDSP(orig, _dupCallback, New IntPtr(clone), 0)
            Bass.BASS_ChannelPlay(orig, False) ' resume source
            Bass.BASS_ChannelPlay(clone, False) ' play clone
            ...
            Private Sub DupDSP(handle As Integer, channel As Integer, 
                               buffer As IntPtr, length As Integer, user As IntPtr)
              Bass.BASS_StreamPutData(user.ToInt32(), buffer, length)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.Byte[],System.Int32,System.Int32)">
            <summary>
            Adds sample data to a "push" stream.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/>).</param>
            <param name="buffer">The array of byte sample data to provide.</param>
            <param name="startIdx">The start index within the <paramref name="buffer"/> to provide the data from.</param>
            <param name="length">The amount of data in bytes (starting at <paramref name="startIdx"/>), optionally using the <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> flag to signify the end of the stream. 0 can be used to just check how much data is queued.</param>
            <returns>If successful, the amount of queued data is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>As much data as possible will be placed in the stream's playback buffer, and any remainder will be queued for when more space becomes available, ie. as the buffered data is played. 
            With a decoding channel, there is no playback buffer, so all data is queued in that case. There is no limit to the amount of data that can be queued, besides available memory.
            The queue buffer will be automatically enlarged as required to hold the data, but it can also be enlarged in advance. The queue buffer is freed when the stream ends or is reset, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> (with restart = TRUE) or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> (with pos = 0).</para>
            <para>DSP/FX are applied when the data reaches the playback buffer, or the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> call in the case of a decoding channel.</para>
            <para>Data should be provided at a rate sufficent to sustain playback. If the buffer gets exhausted, BASS will automatically stall playback of the stream, until more data is provided. 
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check the buffer level, and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to check if playback has stalled. 
            A BASS_SYNC_STALL sync can also be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the push system.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid, it must equate to a whole number of samples.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Adds data to a "push buffered" user file stream's buffer.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> and the STREAMFILE_BUFFERPUSH system flag.).</param>
            <param name="buffer">Pointer to the file data.</param>
            <param name="length">The amount of data in bytes, or <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> to end the file.</param>
            <returns>If successful, the number of bytes read from buffer is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>If there is not enough space in the stream's file buffer to receive all of the data, then only the amount that will fit is read from buffer. <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> can be used to check the amount of space in the buffer.</para>
            <para>File data should be provided at a rate sufficent to sustain playback. If there is insufficient file data, and the playback buffer is subsequently exhausted, BASS will automatically stall playback of the stream, until more data is available. A BASS_SYNC_STALL sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the STREAMFILE_BUFFERPUSH file system.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.Single[],System.Int32)">
            <summary>
            Adds data to a "push buffered" user file stream's buffer.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> and the STREAMFILE_BUFFERPUSH system flag.).</param>
            <param name="buffer">The array of float values to provide to the file data.</param>
            <param name="length">The amount of data in bytes! (buffer.Length*4), or <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> to end the file.</param>
            <returns>If successful, the number of bytes read from buffer is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>If there is not enough space in the stream's file buffer to receive all of the data, then only the amount that will fit is read from buffer. <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> can be used to check the amount of space in the buffer.</para>
            <para>File data should be provided at a rate sufficent to sustain playback. If there is insufficient file data, and the playback buffer is subsequently exhausted, BASS will automatically stall playback of the stream, until more data is available. A BASS_SYNC_STALL sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the STREAMFILE_BUFFERPUSH file system.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.Int32[],System.Int32)">
            <summary>
            Adds data to a "push buffered" user file stream's buffer.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> and the STREAMFILE_BUFFERPUSH system flag.).</param>
            <param name="buffer">The array of Int32 values to provide to the file data (Caution: Int32=2xInt16, so this overload can e.g. be used to provide a stereo sample containing of two 16-bit values).</param>
            <param name="length">The amount of data in bytes! (buffer.Length*4), or <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> to end the file.</param>
            <returns>If successful, the number of bytes read from buffer is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>If there is not enough space in the stream's file buffer to receive all of the data, then only the amount that will fit is read from buffer. <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> can be used to check the amount of space in the buffer.</para>
            <para>File data should be provided at a rate sufficent to sustain playback. If there is insufficient file data, and the playback buffer is subsequently exhausted, BASS will automatically stall playback of the stream, until more data is available. A BASS_SYNC_STALL sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the STREAMFILE_BUFFERPUSH file system.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.Int16[],System.Int32)">
            <summary>
            Adds data to a "push buffered" user file stream's buffer.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> and the STREAMFILE_BUFFERPUSH system flag.).</param>
            <param name="buffer">The array of Int16 values to provide to the file data.</param>
            <param name="length">The amount of data in bytes! (buffer.Length*2), or <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> to end the file.</param>
            <returns>If successful, the number of bytes read from buffer is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>If there is not enough space in the stream's file buffer to receive all of the data, then only the amount that will fit is read from buffer. <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> can be used to check the amount of space in the buffer.</para>
            <para>File data should be provided at a rate sufficent to sustain playback. If there is insufficient file data, and the playback buffer is subsequently exhausted, BASS will automatically stall playback of the stream, until more data is available. A BASS_SYNC_STALL sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the STREAMFILE_BUFFERPUSH file system.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.Byte[],System.Int32)">
            <summary>
            Adds data to a "push buffered" user file stream's buffer.
            </summary>
            <param name="handle">The stream handle (as created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> and the STREAMFILE_BUFFERPUSH system flag.).</param>
            <param name="buffer">The array of byte values to provide to the file data.</param>
            <param name="length">The amount of data in bytes, or <see cref="T:Un4seen.Bass.BASSStreamProc">BASS_STREAMPROC_END</see> to end the file.</param>
            <returns>If successful, the number of bytes read from buffer is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>If there is not enough space in the stream's file buffer to receive all of the data, then only the amount that will fit is read from buffer. <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> can be used to check the amount of space in the buffer.</para>
            <para>File data should be provided at a rate sufficent to sustain playback. If there is insufficient file data, and the playback buffer is subsequently exhausted, BASS will automatically stall playback of the stream, until more data is available. A BASS_SYNC_STALL sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The stream is not using the STREAMFILE_BUFFERPUSH file system.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The stream has ended.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_MusicLoadUnicode(System.Boolean,System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Only used internally! See the file overload of <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> for details!
            </summary>
            <param name="mem">Needs to be set to <see langword="false"/></param>
            <param name="file">The filename to load.</param>
            <param name="offset">File offset to load the MOD music from.</param>
            <param name="length">Data length... 0 = use all data up to the end of file.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>).</param>
            <param name="freq">Sample rate to render/play the MOD music at... 0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</param>
            <returns>If successful, the loaded music's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Loads a MOD music file - MO3 / IT / XM / S3M / MTM / MOD / UMX formats.
            <para>This overload implements Unicode filenames. The BASS_UNICODE flag will be added automatically.</para>
            </summary>
            <param name="file">The file name from where to load the music.</param>
            <param name="offset">File offset to load the MOD music from.</param>
            <param name="length">Data length... 0 = use all data up to the end of file. If length over-runs the end of the file, it'll automatically be lowered to the end of the file.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_MUSIC_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the MOD music in mono (uses less CPU than stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the MOD music to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Enable 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D channels are mono, so BASS_SAMPLE_MONO is automatically applied. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>Requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the music.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the music.</description></item>
            <item><term>BASS_MUSIC_RAMP</term><description>Use "normal" ramping (as used in FastTracker 2).</description></item>
            <item><term>BASS_MUSIC_RAMPS</term><description>Use "sensitive" ramping".</description></item>
            <item><term>BASS_MUSIC_NONINTER</term><description>Use non-interpolated mixing. This generally reduces the sound quality, but can be good for chip-tunes.</description></item>
            <item><term>BASS_MUSIC_SINCINTER</term><description>Use sinc interpolated sample mixing. This increases the sound quality, but also requires quite a bit more processing. If neither this or the BASS_MUSIC_NONINTER flag is specified, linear interpolation is used.</description></item>
            <item><term>BASS_MUSIC_FT2MOD</term><description>Play .MOD file as FastTracker 2 would.</description></item>
            <item><term>BASS_MUSIC_PT1MOD</term><description>Play .MOD file as ProTracker 1 would.</description></item>
            <item><term>BASS_MUSIC_POSRESET</term><description>Stop all notes when seeking (using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>).</description></item>
            <item><term>BASS_MUSIC_POSRESETEX</term><description>Stop all notes and reset bpm/etc when seeking.</description></item>
            <item><term>BASS_MUSIC_SURROUND</term><description>Apply XMPlay's surround sound to the music (ignored in mono).</description></item>
            <item><term>BASS_MUSIC_SURROUND2</term><description>Apply XMPlay's surround sound mode 2 to the music (ignored in mono).</description></item>
            <item><term>BASS_MUSIC_FT2PAN</term><description>Apply FastTracker 2 panning to XM files.</description></item>
            <item><term>BASS_MUSIC_STOPBACK</term><description>Stop the music when a backward jump effect is played. This stops musics that never reach the end from going into endless loops. Some MOD musics are designed to jump all over the place, so this flag would cause those to be stopped prematurely. If this flag is used together with the BASS_SAMPLE_LOOP flag, then the music would not be stopped but any BASS_SYNC_END sync would be triggered.</description></item>
            <item><term>BASS_MUSIC_PRESCAN</term><description>Calculate the playback length of the music, and enable seeking in bytes. This slightly increases the time taken to load the music, depending on how long it is. In the case of musics that loop, the length until the loop occurs is calculated. Use BASS_ChannelGetLength to retrieve the length.</description></item>
            <item><term>BASS_MUSIC_NOSAMPLE</term><description>Don't load the samples. This reduces the time taken to load the music, notably with MO3 files, which is useful if you just want to get the name and length of the music without playing it.</description></item>
            <item><term>BASS_MUSIC_AUTOFREE</term><description>Automatically free the music when it ends. This allows you to play a music and forget about it, as BASS will automatically free the music's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called. Note that some musics never actually end on their own (ie. without you stopping them).</description></item>
            <item><term>BASS_MUSIC_DECODE</term><description>Decode the music into sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. BASS_SAMPLE_SOFTWARE/3D/FX/AUTOFREE are ignored when using this flag, as are the SPEAKER flags.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>. The BASS_SAMPLE_MONO flag is automatically applied when using a mono speaker assignment flag.</description></item>
            <item><term>BASS_UNICODE</term><description>file is a Unicode (16-bit characters) filename (not needed with this overload).</description></item>
            </list>
            </param>
            <param name="freq">Sample rate to render/play the MOD music at... 0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</param>
            <returns>If successful, the loaded music's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>BASS uses the same code as XMPlay for it's MOD music support, giving the most accurate reproduction of MO3 / IT / XM / S3M / MTM / MOD / UMX files available from any sound system.</para>
            <para>MO3s are treated and used in exactly the same way as normal MOD musics. The advantage of MO3s is that they can be a lot smaller with virtually identical quality. Playing a MO3 does not use any more CPU power than playing the original MOD version does. The only difference is a slightly longer load time as the samples are being decoded. MO3 files are created using the MO3 encoder available at the BASS website.</para>
            <para>DMO effects (the same as available with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>) can be used in IT and XM files (and MO3 versions of them) created with Modplug Tracker. This allows effects to be added to a track without having to resort to an MP3 or OGG version, so it can remain small and still sound fancy. Of course, the effects require some CPU, so should not be used carelessly if performance is key. DirectX 8 (or above) is required for the effects to be heard - without that, the music can still be played, but the effects are disabled.</para>
            <para>"Ramping" does not take a lot of extra processing and improves the sound quality by removing clicks, by ramping/smoothing volume and pan changes. The start of a sample may also be ramped-in. That is always the case with XM files (or MOD files in FT2 mode) when using normal ramping, and possibly with all formats when using sensitive ramping; senstitive ramping will only ramp-in when necessary to avoid a click. Generally, normal ramping is recommended for XM files, and sensitive ramping for the other formats, but some XM files may also sound better using sensitive ramping.</para>
            <para>When loading a MOD music from memory, BASS does not use the memory after it's loaded the MOD music. So you can do whatever you want with the memory after calling this function.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_MUSIC_AUTOFREE flag is unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            <para>DMO effects are not supported in MOD music on Windows CE, and DirectX 8 (or above) is required on Windows. They are always available on other platforms, except for the following: Compressor, Gargle, and I3DL2Reverb. When a DMO effect is unavailable, the MOD music can still be played, but the effect will be disabled.</para>
            </remarks>
            <example>
            <code lang="C#">
            int music = Bass.BASS_MusicLoad("test.mod", 0, 0, BASSFlag.BASS_DEFAULT, 0);
            </code>
            <code lang="VB">
            Dim music As Integer = Bass.BASS_MusicLoad("test.mod", 0, 0, BASSFlag.BASS_DEFAULT, 0)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_MusicLoadMemory(System.Boolean,System.IntPtr,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Only used internally! See the file overload of <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> for details!
            </summary>
            <param name="mem">Needs to be set to <see langword="true"/></param>
            <param name="memory">An IntPtr to the memory block.</param>
            <param name="offset">File offset to load the MOD music from.</param>
            <param name="length">Needs to be set to the length of the buffer data which should be played.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>).</param>
            <param name="freq">Sample rate to render/play the MOD music at... 0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</param>
            <returns>If successful, the loaded music's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.IntPtr,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Loads a MOD music file - MO3 / IT / XM / S3M / MTM / MOD / UMX formats.
            <para>This overload implements loading from memory.</para>
            </summary>
            <param name="memory">An unmanaged pointer to the memory location as an IntPtr.</param>
            <param name="offset">File offset to load the MOD music from.</param>
            <param name="length">Data length... 0 = use all data up to the end of file. If length over-runs the end of the file, it'll automatically be lowered to the end of the file.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_MUSIC_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the MOD music in mono (uses less CPU than stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the MOD music to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Enable 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D channels are mono, so BASS_SAMPLE_MONO is automatically applied. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>Requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the music.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the music.</description></item>
            <item><term>BASS_MUSIC_RAMP</term><description>Use "normal" ramping (as used in FastTracker 2).</description></item>
            <item><term>BASS_MUSIC_RAMPS</term><description>Use "sensitive" ramping".</description></item>
            <item><term>BASS_MUSIC_NONINTER</term><description>Use non-interpolated mixing. This generally reduces the sound quality, but can be good for chip-tunes.</description></item>
            <item><term>BASS_MUSIC_SINCINTER</term><description>Use sinc interpolated sample mixing. This increases the sound quality, but also requires quite a bit more processing. If neither this or the BASS_MUSIC_NONINTER flag is specified, linear interpolation is used.</description></item>
            <item><term>BASS_MUSIC_FT2MOD</term><description>Play .MOD file as FastTracker 2 would.</description></item>
            <item><term>BASS_MUSIC_PT1MOD</term><description>Play .MOD file as ProTracker 1 would.</description></item>
            <item><term>BASS_MUSIC_POSRESET</term><description>Stop all notes when seeking (using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>).</description></item>
            <item><term>BASS_MUSIC_POSRESETEX</term><description>Stop all notes and reset bpm/etc when seeking.</description></item>
            <item><term>BASS_MUSIC_SURROUND</term><description>Apply XMPlay's surround sound to the music (ignored in mono).</description></item>
            <item><term>BASS_MUSIC_SURROUND2</term><description>Apply XMPlay's surround sound mode 2 to the music (ignored in mono).</description></item>
            <item><term>BASS_MUSIC_FT2PAN</term><description>Apply FastTracker 2 panning to XM files.</description></item>
            <item><term>BASS_MUSIC_STOPBACK</term><description>Stop the music when a backward jump effect is played. This stops musics that never reach the end from going into endless loops. Some MOD musics are designed to jump all over the place, so this flag would cause those to be stopped prematurely. If this flag is used together with the BASS_SAMPLE_LOOP flag, then the music would not be stopped but any BASS_SYNC_END sync would be triggered.</description></item>
            <item><term>BASS_MUSIC_PRESCAN</term><description>Calculate the playback length of the music, and enable seeking in bytes. This slightly increases the time taken to load the music, depending on how long it is. In the case of musics that loop, the length until the loop occurs is calculated. Use BASS_ChannelGetLength to retrieve the length.</description></item>
            <item><term>BASS_MUSIC_NOSAMPLE</term><description>Don't load the samples. This reduces the time taken to load the music, notably with MO3 files, which is useful if you just want to get the name and length of the music without playing it.</description></item>
            <item><term>BASS_MUSIC_AUTOFREE</term><description>Automatically free the music when it ends. This allows you to play a music and forget about it, as BASS will automatically free the music's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called. Note that some musics never actually end on their own (ie. without you stopping them).</description></item>
            <item><term>BASS_MUSIC_DECODE</term><description>Decode the music into sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. BASS_SAMPLE_SOFTWARE/3D/FX/AUTOFREE are ignored when using this flag, as are the SPEAKER flags.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>. The BASS_SAMPLE_MONO flag is automatically applied when using a mono speaker assignment flag.</description></item>
            </list>
            </param>
            <param name="freq">Sample rate to render/play the MOD music at... 0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</param>
            <returns>If successful, the loaded music's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>BASS uses the same code as XMPlay for it's MOD music support, giving the most accurate reproduction of MO3 / IT / XM / S3M / MTM / MOD / UMX files available from any sound system.</para>
            <para>MO3s are treated and used in exactly the same way as normal MOD musics. The advantage of MO3s is that they can be a lot smaller with virtually identical quality. Playing a MO3 does not use any more CPU power than playing the original MOD version does. The only difference is a slightly longer load time as the samples are being decoded. MO3 files are created using the MO3 encoder available at the BASS website.</para>
            <para>DMO effects (the same as available with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>) can be used in IT and XM files (and MO3 versions of them) created with Modplug Tracker. This allows effects to be added to a track without having to resort to an MP3 or OGG version, so it can remain small and still sound fancy. Of course, the effects require some CPU, so should not be used carelessly if performance is key. DirectX 8 (or above) is required for the effects to be heard - without that, the music can still be played, but the effects are disabled.</para>
            <para>Ramping doesn't take a lot of extra processing and improves the sound quality by removing "clicks". Sensitive ramping leaves sharp attacked samples, while normal ramping can cause them to lose a-bit of their impact. Generally, normal ramping is recommended for XMs, and sensitive ramping for the other formats. But, some XMs may also sound better using sensitive ramping.</para>
            <para>When loading a MOD music from memory, BASS does not use the memory after it's loaded the MOD music. So you can do whatever you want with the memory after calling this function.
            This means there is no need to pin the memory buffer for this method.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_MUSIC_AUTOFREE flag is unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            <para>DMO effects are not supported in MOD music on Windows CE, and DirectX 8 (or above) is required on Windows. They are always available on other platforms, except for the following: Compressor, Gargle, and I3DL2Reverb. When a DMO effect is unavailable, the MOD music can still be played, but the effect will be disabled.</para>
            </remarks>
            <example>
            See <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>for examples on how to load data from memory.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_MusicLoadMemory(System.Boolean,System.Byte[],System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Only used internally! See the file overload of <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> for details!
            </summary>
            <param name="mem">Needs to be set to <see langword="true"/></param>
            <param name="memory">An IntPtr to the memory block.</param>
            <param name="offset">File offset to load the MOD music from.</param>
            <param name="length">Needs to be set to the length of the buffer data which should be played.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>).</param>
            <param name="freq">Sample rate to render/play the MOD music at... 0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</param>
            <returns>If successful, the loaded music's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.Byte[],System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Loads a MOD music file - MO3 / IT / XM / S3M / MTM / MOD / UMX formats.
            <para>This overload implements loading from memory.</para>
            </summary>
            <param name="memory">A managed memory location as a byte[].</param>
            <param name="offset">File offset to load the MOD music from.</param>
            <param name="length">Data length... 0 = use all data up to the end of file. If length over-runs the end of the file, it'll automatically be lowered to the end of the file.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the sample data will be 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers or the BASS_MUSIC_DECODE flag are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more info.</description></item>
            <item><term>BASS_SAMPLE_MONO</term><description>Decode/play the MOD music in mono (uses less CPU than stereo). This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>Force the MOD music to not use hardware mixing.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>Enable 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 3D channels are mono, so BASS_SAMPLE_MONO is automatically applied. The SPEAKER flags can not be used together with this flag.</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>Requires DirectX 8 or above: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the music.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the music.</description></item>
            <item><term>BASS_MUSIC_RAMP</term><description>Use "normal" ramping (as used in FastTracker 2).</description></item>
            <item><term>BASS_MUSIC_RAMPS</term><description>Use "sensitive" ramping".</description></item>
            <item><term>BASS_MUSIC_NONINTER</term><description>Use non-interpolated mixing. This generally reduces the sound quality, but can be good for chip-tunes.</description></item>
            <item><term>BASS_MUSIC_SINCINTER</term><description>Use sinc interpolated sample mixing. This increases the sound quality, but also requires quite a bit more processing. If neither this or the BASS_MUSIC_NONINTER flag is specified, linear interpolation is used.</description></item>
            <item><term>BASS_MUSIC_FT2MOD</term><description>Play .MOD file as FastTracker 2 would.</description></item>
            <item><term>BASS_MUSIC_PT1MOD</term><description>Play .MOD file as ProTracker 1 would.</description></item>
            <item><term>BASS_MUSIC_POSRESET</term><description>Stop all notes when seeking (using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>).</description></item>
            <item><term>BASS_MUSIC_POSRESETEX</term><description>Stop all notes and reset bpm/etc when seeking.</description></item>
            <item><term>BASS_MUSIC_SURROUND</term><description>Apply XMPlay's surround sound to the music (ignored in mono).</description></item>
            <item><term>BASS_MUSIC_SURROUND2</term><description>Apply XMPlay's surround sound mode 2 to the music (ignored in mono).</description></item>
            <item><term>BASS_MUSIC_FT2PAN</term><description>Apply FastTracker 2 panning to XM files.</description></item>
            <item><term>BASS_MUSIC_STOPBACK</term><description>Stop the music when a backward jump effect is played. This stops musics that never reach the end from going into endless loops. Some MOD musics are designed to jump all over the place, so this flag would cause those to be stopped prematurely. If this flag is used together with the BASS_SAMPLE_LOOP flag, then the music would not be stopped but any BASS_SYNC_END sync would be triggered.</description></item>
            <item><term>BASS_MUSIC_PRESCAN</term><description>Calculate the playback length of the music, and enable seeking in bytes. This slightly increases the time taken to load the music, depending on how long it is. In the case of musics that loop, the length until the loop occurs is calculated. Use BASS_ChannelGetLength to retrieve the length.</description></item>
            <item><term>BASS_MUSIC_NOSAMPLE</term><description>Don't load the samples. This reduces the time taken to load the music, notably with MO3 files, which is useful if you just want to get the name and length of the music without playing it.</description></item>
            <item><term>BASS_MUSIC_AUTOFREE</term><description>Automatically free the music when it ends. This allows you to play a music and forget about it, as BASS will automatically free the music's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called. Note that some musics never actually end on their own (ie. without you stopping them).</description></item>
            <item><term>BASS_MUSIC_DECODE</term><description>Decode the music into sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. BASS_SAMPLE_SOFTWARE/3D/FX/AUTOFREE are ignored when using this flag, as are the SPEAKER flags.</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>. The BASS_SAMPLE_MONO flag is automatically applied when using a mono speaker assignment flag.</description></item>
            </list>
            </param>
            <param name="freq">Sample rate to render/play the MOD music at... 0 = the rate specified in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</param>
            <returns>If successful, the loaded music's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>BASS uses the same code as XMPlay for it's MOD music support, giving the most accurate reproduction of MO3 / IT / XM / S3M / MTM / MOD / UMX files available from any sound system.</para>
            <para>MO3s are treated and used in exactly the same way as normal MOD musics. The advantage of MO3s is that they can be a lot smaller with virtually identical quality. Playing a MO3 does not use any more CPU power than playing the original MOD version does. The only difference is a slightly longer load time as the samples are being decoded. MO3 files are created using the MO3 encoder available at the BASS website.</para>
            <para>DMO effects (the same as available with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>) can be used in IT and XM files (and MO3 versions of them) created with Modplug Tracker. This allows effects to be added to a track without having to resort to an MP3 or OGG version, so it can remain small and still sound fancy. Of course, the effects require some CPU, so should not be used carelessly if performance is key. DirectX 8 (or above) is required for the effects to be heard - without that, the music can still be played, but the effects are disabled.</para>
            <para>Ramping doesn't take a lot of extra processing and improves the sound quality by removing "clicks". Sensitive ramping leaves sharp attacked samples, while normal ramping can cause them to lose a-bit of their impact. Generally, normal ramping is recommended for XMs, and sensitive ramping for the other formats. But, some XMs may also sound better using sensitive ramping.</para>
            <para>When loading a MOD music from memory, BASS does not use the memory after it's loaded the MOD music. So you can do whatever you want with the memory after calling this function.
            This means there is no need to pin the memory buffer for this method.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_MUSIC_AUTOFREE flag is unavailable to decoding channels.</description></item>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The file could not be opened.</description></item>
            <item><term>BASS_ERROR_FILEFORM</term><description>The file's format is not recognised/supported.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_SPEAKER</term><description>The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>Could not initialize 3D support.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Away from Windows, all mixing is done in software (by BASS), so the BASS_SAMPLE_SOFTWARE flag is unnecessary. The BASS_SAMPLE_FX flag is also ignored.</para>
            <para>DMO effects are not supported in MOD music on Windows CE, and DirectX 8 (or above) is required on Windows. They are always available on other platforms, except for the following: Compressor, Gargle, and I3DL2Reverb. When a DMO effect is unavailable, the MOD music can still be played, but the effect will be disabled.</para>
            </remarks>
            <example>
            The following example demontrates how to load music from memory:
            <code lang="C#">
            // Init Bass
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            // open file
            FileStream fs = File.OpenRead( "test.mod" );
            // get the length of the file
            int length = (int)fs.Length;
            // create the buffer which will keep the file in memory
            byte[] buffer = new byte[length];
            // read the file into the buffer
            fs.Read(buffer, 0, length);
            // buffer is filled, file can be closed
            fs.Close();
            // load music from memory buffer
            int music = Bass.BASS_MusicLoad(buffer, 0, length, BASSFlag.BASS_DEFAULT, 0);
            if (music != 0 &amp;&amp; Bass.BASS_ChannelPlay(stream, false) )
            {
            	// playing...
            }
            else
            {
            	Console.WriteLine("Error={0}", Bass.BASS_ErrorGetCode());
            }
            </code>
            <code lang="VB">
            ' Init Bass
            Bass.BASS_Init(- 1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            ' open file
            Dim fs As FileStream = File.OpenRead("test.mod")
            ' get the length of the file
            Dim length As Integer = CInt(fs.Length)
            ' create the buffer which will keep the file in memory
            Dim buffer(length - 1) As Byte
            ' read the file into the buffer
            fs.Read(buffer, 0, length)
            ' buffer is filled, file can be closed
            fs.Close()
            ' load music from memory buffer
            Dim music As Integer = Bass.BASS_MusicLoad(buffer, 0, length, BASSFlag.BASS_DEFAULT, 0)
            If music &lt;&gt; 0 AndAlso Bass.BASS_ChannelPlay(stream, False) Then
              ' playing...
            Else
              Console.WriteLine("Error={0}", Bass.BASS_ErrorGetCode())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_MusicFree(System.Int32)">
            <summary>
            Frees a MOD music's resources, including any sync/DSP/FX it has.
            </summary>
            <param name="handle">The MOD music handle (which has been created with <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>).</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)">
            <summary>
            Initializes a recording device.
            </summary>
            <param name="device">The device to use... -1 = default device, 0 = first. <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceCount"/> can be used to get the total number of devices.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use BASS_ErrorGetCode to get the error code.</returns>
            <remarks>
            This function must be successfully called before using the recording features.
            <para>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. <see cref="M:Un4seen.Bass.Bass.BASS_RecordSetDevice(System.Int32)"/> is used to switch the current recording device. When successful, <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> automatically sets the current thread's device to the one that was just initialized</para>
            <para>The default device (device = -1) always maps to the 'Default' device unless that has been disabled via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_REC_DEFAULT"/> config option. <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDevice"/> can be used afterwards to confirm which device is being used.</para>
            <para><b>Platform-specific:</b> On Windows, WASAPI or DirectSound may be used, depending on the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_REC_WASAPI"/> config option setting.
            On Linux, a 'Default' device is hardcoded to device number 0, which uses the default input set in the ALSA config; that could map directly to one of the other devices or it could use ALSA plugins.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="device"/> is invalid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>The device has already been initialized. <see cref="M:Un4seen.Bass.Bass.BASS_RecordFree"/> must be called before it can be initialized again.</description></item>
            <item><term>BASS_ERROR_DRIVER</term><description>There is no available device driver.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            private RECORDPROC _myRecProc; // make it global, so that the GC can not remove it
            private int _byteswritten = 0;
            private byte[] _recbuffer; // local recording buffer
            ...
            if ( Bass.BASS_RecordInit(-1) )
            {
              _myRecProc = new RECORDPROC(MyRecording);
              int recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero);
              ...
              // start recording
              Bass.BASS_ChannelPlay(recHandle, false);
            }
            ...
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              bool cont = true;
              if (length &gt; 0 &amp;&amp; buffer != IntPtr.Zero)
              {
                // increase the rec buffer as needed
                if (_recbuffer == null || _recbuffer.Length &lt; length)
                  _recbuffer = new byte[length];
                // copy from managed to unmanaged memory
                Marshal.Copy(buffer, _recbuffer, 0, length);
                _byteswritten += length;
                // write to file
                ...
                // stop recording after a certain amout (just to demo)
                if (_byteswritten &gt; 800000)
                  cont = false; // stop recording
              }
              return cont;
            }
            </code>
            <code lang="VB">
            Private _myRecProc As RECORDPROC ' make it global, so that the GC can not remove it
            Private _byteswritten As Integer = 0
            Private _recbuffer() As Byte ' local recording buffer
            ...
            If Bass.BASS_RecordInit(-1) Then
              _myRecProc = New RECORDPROC(AddressOf MyRecording)
              Dim recHandle As Integer = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero)
              ...
              ' start recording
              Bass.BASS_ChannelPlay(recHandle, False)
            End If
            ...
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              Dim cont As Boolean = True
              If length &gt; 0 AndAlso buffer &lt;&gt; IntPtr.Zero Then
                ' increase the rec buffer as needed
                If _recbuffer Is Nothing OrElse _recbuffer.Length &lt; length Then
                  _recbuffer = New Byte(length) {}
                End If
                ' copy from managed to unmanaged memory
                Marshal.Copy(buffer, _recbuffer, 0, length)
                _byteswritten += length
                ' write to file
                ...
                ' stop recording after a certain amout (just to demo)
                If _byteswritten &gt; 800000 Then
                  cont = False ' stop recording
                End If
              End If
              Return cont
            End Function
            </code>
            If you are into C# you might also use an unsafe codeblock with native pointer access 
            (which might be must faster than the above - depending on what you are doing with the data):
            <code lang="C#">
            private unsafe bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              bool cont = true;
              if (length &gt; 0 &amp;&amp; buffer != IntPtr.Zero)
              {
                // assuming 16-bit sample data here
                short *data = (short*)buffer;
                ...
            
                // stop recording after a certain amout (just to demo)
                if (_byteswritten &gt; 800000)
                  cont = false; // stop recording
              }
              return cont;
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)">
            <summary>
            Starts recording.
            </summary>
            <param name="freq">The sample rate to record at.</param>
            <param name="chans">The number of channels... 1 = mono, 2 = stereo, etc.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>)
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the recorded data is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more information.</description></item>
            <item><term>BASS_RECORD_PAUSE</term><description>Start the recording paused. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> together with the handle returned by this method to start it.</description></item>
            </list>
            </param>
            <param name="proc">The user defined function to receive the recorded sample data... can be <see langword="null"/> if you do not wish to use a callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new recording's handle is returned, else <see langword="false"/> is returned. Use BASS_ErrorGetCode to get the error code.</returns>
            <remarks>
            Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> to stop the recording, and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPause(System.Int32)"/> to paused it. Recording can also be started in a paused state (via the BASS_RECORD_PAUSE flag), allowing DSP/FX to be set on it before any data reaches the callback function.
            <para>The sample data will generally arrive from the recording device in blocks rather than in a continuous stream, so when specifying a very short period between callbacks, some calls may be skipped due to there being no new data available since the last call.</para>
            <para>When not using a callback (proc = <see langword="null"/>), the recorded data is instead retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>. To keep latency at a minimum, the amount of data in the recording buffer should be monitored (also done via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, with the BASS_DATA_AVAILABLE flag) to check that there is not too much data;
            freshly recorded data will only be retrieved after the older data in the buffer is.</para>
            <para>When freq and/or chans is set to 0 for the device's current values, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> can be used afterwards to find out what values are being used by the recording.</para>
            <para>A recording may end unexpectedly if the device fails, eg. if it is disconnected/disabled. A BASS_SYNC_DEV_FAIL sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be informed if that happens. It will not be possible to resume the recording channel then; a new recording channel will need to be created when the device becomes available again.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_BUSY</term><description>The device is busy. An existing recording must be stopped before starting another one. Multiple simultaneous recordings can be made from the same device on Windows XP and Vista, but generally not on older Windows.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The recording device is not available. Another application may already be recording with it, or it could be a half-duplex device and is currently being used for playback.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The specified format is not supported. If using the BASS_SAMPLE_FLOAT flag, it could be that floating-point recording is not supported.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Multiple simultaneous recordings can be made from the same device on Windows XP and later, but generally not on older Windows. Multiple simultaneous recordings are possible on macOS and iOS, but may not always be on Linux.
            Loopback recording is only available on Windows Vista and above. The option to use the device's current sample rate and/or channel count is only available on Windows/macOS/iOS.
            On macOS and iOS, the device is instructed (when possible) to deliver data at the period set in the HIWORD of flags, even when a callback function is not used. On other platforms, it is up the the system when data arrives from the device.
            On macOS and iOS, this function may succeed but only capture silence when recording permission has not been granted. The AVCaptureDevice authorizationStatusForMediaType method (or the AVAudioSession recordPermission method on iOS) can be used to check the permission status.</para>
            </remarks>
            <example>
            Start recording at 44100hz 16-bit stereo:
            <code lang="C#">
            private RECORDPROC _myRecProc; // make it global, so that the Garbage Collector can not remove it
            ...
            Bass.BASS_RecordInit(-1);
            _myRecProc = new RECORDPROC(MyRecording);
            // start recording paused
            int recChannel = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero);
            ...
            // really start recording
            Bass.BASS_ChannelPlay(recChannel, false);
            ...
            // the recording callback
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              return true;
            }
            </code>
            <code lang="VB">
            Private _myRecProc As RECORDPROC
            ...
            Bass.BASS_RecordInit(- 1)
            _myRecProc = New RECORDPROC(AddressOf MyRecording)
            ' start recording paused
            Dim recChannel As Integer = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero)
            ...
            ' really start recording
            Bass.BASS_ChannelPlay(recChannel, False)
            ...
            ' the recording callback
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              Return True
            End Function
            </code>
            See <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> for a recording callback sample.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int32,Un4seen.Bass.RECORDPROC,System.IntPtr)">
            <summary>
            Starts recording.
            </summary>
            <param name="freq">The sample rate to record at.</param>
            <param name="chans">The number of channels... 1 = mono, 2 = stereo.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>)
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the recorded data is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>Use 32-bit floating-point sample data. WDM drivers are required to use this flag in Windows. See <a href="../Overview.html#FloatingPoint">Floating-point channels</a> for more information.</description></item>
            <item><term>BASS_RECORD_PAUSE</term><description>Start the recording paused. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> together with the handle returned by this method to start it.</description></item>
            </list>
            </param>
            <param name="period">Set the period (in milliseconds) between calls to the callback function (<see cref="T:Un4seen.Bass.RECORDPROC"/>). The minimum period is 5ms, the maximum the maximum is half the BASS_CONFIG_REC_BUFFER setting. If the period specified is outside this range, it is automatically capped. The default is 100ms.</param>
            <param name="proc">The user defined function to receive the recorded sample data... can be <see langword="null"/> if you do not wish to use a callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, the new recording's handle is returned, else <see langword="false"/> is returned. Use BASS_ErrorGetCode to get the error code.</returns>
            <remarks>
            Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> to stop the recording. Recording can also be paused with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPause(System.Int32)"/>.
            <para>The sample data will generally arrive from the recording device in blocks rather than in a continuous stream, so when specifying a very short period between callbacks, some calls may be skipped due to there being no new data available since the last call.</para>
            <para>When specifying a very short period between RECORDPROC calls, some calls may be skipped due to there being no new data available from the recording device since the last call. This is more likely to happen with drivers that do not have hardware support.</para>
            <para>Starting the recording paused (BASS_RECORD_PAUSE) allows DSP/FX to be set on the recording channel before any data reaches the RECORDPROC function.</para>
            <para>Not using a callback (proc = <see langword="null"/>) allows lower latency for full-duplex recording (ie. playing the data as it's being recorded), as you get the recorded data on demand via the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> function. To keep latency at a minimum, the amount of data in the recording buffer should be monitored (also done via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, with the BASS_DATA_AVAILABLE flag) to check that there's not too much data;
            freshly recorded data will only be retrieved after the older data in the buffer is.</para>
            <para>When freq and/or chans is set to 0 for the device's current values, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> can be used afterwards to find out what values are being used by the recording.</para>
            <para>A recording may end unexpectedly if the device fails, eg. if it is disconnected/disabled. A BASS_SYNC_DEV_FAIL sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be informed if that happens. It will not be possible to resume the recording channel then; a new recording channel will need to be created when the device becomes available again.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_BUSY</term><description>The device is busy. An existing recording must be stopped before starting another one. Multiple simultaneous recordings can be made from the same device on Windows XP and Vista, but generally not on older Windows.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The recording device is not available. Another application may already be recording with it, or it could be a half-duplex device and is currently being used for playback.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The specified format is not supported. If using the BASS_SAMPLE_FLOAT flag, it could be that floating-point recording is not supported.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Multiple simultaneous recordings can be made from the same device on Windows XP and later, but generally not on older Windows. Multiple simultaneous recordings are possible on macOS and iOS, but may not always be on Linux.
            Loopback recording is only available on Windows Vista and above. The option to use the device's current sample rate and/or channel count is only available on Windows/macOS/iOS.
            On macOS and iOS, the device is instructed (when possible) to deliver data at the period set in the HIWORD of flags, even when a callback function is not used. On other platforms, it is up the the system when data arrives from the device.
            On macOS and iOS, this function may succeed but only capture silence when recording permission has not been granted. The AVCaptureDevice authorizationStatusForMediaType method (or the AVAudioSession recordPermission method on iOS) can be used to check the permission status.</para>
            </remarks>
            <example>
            Start recording at 44100hz 16-bit stereo with a 50ms recording period:
            <code lang="C#">
            private RECORDPROC _myRecProc; // make it global, so that the Garbage Collector can not remove it
            ...
            Bass.BASS_RecordInit(-1);
            _myRecProc = new RECORDPROC(MyRecording);
            // start recording paused
            int recChannel = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, 50, _myRecProc, IntPtr.Zero);
            ...
            // really start recording
            Bass.BASS_ChannelPlay(recChannel, false);
            ...
            // the recording callback
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              return true;
            }
            </code>
            <code lang="VB">
            Private _myRecProc As RECORDPROC
            ...
            Bass.BASS_RecordInit(-1)
            _myRecProc = New RECORDPROC(AddressOf MyRecording)
            ' start recording paused
            Dim recChannel As Integer = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, 50, _myRecProc, IntPtr.Zero)
            ...
            ' really start recording
            Bass.BASS_ChannelPlay(recChannel, False)
            ...
            ' the recording callback
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              Return True
            End Function
            </code>
            See <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> for a recording callback sample.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfoInternal(System.Int32,Un4seen.Bass.BASS_DEVICEINFO_INTERNAL@)">
            <summary>
            
            </summary>
            <param name="device"></param>
            <param name="info"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)">
            <summary>
            Retrieves information on a recording device.
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <param name="info">An instance of the <see cref="T:Un4seen.Bass.BASS_DEVICEINFO"/> class to store the information at.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function can be used to enumerate the available recording devices for a setup dialog. 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            <item><term>BASS_ERROR_DX</term><description>A sufficient version of DirectX is not installed.</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Recording support requires DirectX 5 (or above) on Windows. On Linux, a "Default" device is hardcoded to device number 0, which uses the default input set in the ALSA config.</para>
            </remarks>
            <example>
            List all available recording devices:
            <code lang="C#">
            BASS_DEVICEINFO info = new BASS_DEVICEINFO();
            for (int n=0; Bass.BASS_RecordGetDeviceInfo(n, info); n++)
            {
              Console.WriteLine(info.ToString());
            }
            </code>
            <code lang="VB">
            Dim n As Integer = 0
            Dim info As New BASS_DEVICEINFO()
            While (Bass.BASS_RecordGetDeviceInfo(n, info))
              Console.WriteLine(info.ToString())
              n += 1
            End While
            </code>
            Or use the <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfos"/> method for more convenience.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfo(System.Int32)">
            <summary>
            Retrieves information on a recording device.
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <returns>If successful, then an instance of the <see cref="T:Un4seen.Bass.BASS_DEVICEINFO"/> class is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function can be used to enumerate the available recording devices for a setup dialog. 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            <item><term>BASS_ERROR_DX</term><description>A sufficient version of DirectX is not installed.</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Recording support requires DirectX 5 (or above) on Windows. On Linux, a "Default" device is hardcoded to device number 0, which uses the default input set in the ALSA config.</para>
            </remarks>
            <example>Find the system default recording device:
            <code lang="C#">
            int defDevice = -1;
            BASS_DEVICEINFO info;
            for (int n = 0; (info = Bass.BASS_RecordGetDeviceInfo(n)) != null; n++)
            {
              if (info.IsDefault)
              {
                defDevice = n;
                break;
              }
            }
            </code>
            <code lang="VB">
            Dim defDevice As Integer = -1
            Dim n As Integer = 0
            Dim info As New BASS_DEVICEINFO()
            While Not (info Is Nothing)
              info = Bass.BASS_RecordGetDeviceDescription(n)
              If Not (info Is Nothing) And info.IsDefault Then
                defDevice = n
                Exit While
              End If
              n += 1
            End While
            </code>
            Or use the <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfos"/> method for more convenience.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfos">
            <summary>
            Returns all available recording devices.
            </summary>
            <returns>An array of <see cref="T:Un4seen.Bass.BASS_DEVICEINFO"/> elements representing the available recording devices.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceCount">
            <summary>
            Returns the total number of available recording devices.
            </summary>
            <returns>Number of real recording devices available.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordSetDevice(System.Int32)">
            <summary>
            Sets the recording device to use for subsequent calls in the current thread.
            </summary>
            <param name="device">The device to use... 0 = first recording device.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>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. The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.</para>
            <para>The functions that use the recording device selection are the following: 
            <see cref="M:Un4seen.Bass.Bass.BASS_RecordFree"/>, <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInfo(Un4seen.Bass.BASS_RECORDINFO)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInput(System.Int32,System.Single@)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInputName(System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_RecordSetInput(System.Int32,Un4seen.Bass.BASSInput,System.Single)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/>.</para>
            <para>When one of the above functions (or <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDevice"/>) is called, BASS will check the current thread's recording device setting, and if no device is selected (or the selected device is not initialized), BASS will automatically select the lowest device that is initialized. 
            This means that when using a single device, there is no need to use this function - BASS will automatically use the device that's initialized. 
            Even if you free the device, and initialize another, BASS will automatically switch to the one that is initialized.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="device"/> is invalid.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The device has not been initialized.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetDevice">
            <summary>
            Retrieves the recording device setting in the current thread.
            </summary>
            <returns>If successful, the device number is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/>to get the error code.</returns>
            <remarks>See also <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called - there are no initialized.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetInfo(Un4seen.Bass.BASS_RECORDINFO)">
            <summary>
            Retrieves information on the recording device being used.
            </summary>
            <param name="info">An instance of the <see cref="T:Un4seen.Bass.BASS_RECORDINFO"/> class to store the information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>There is no need to initialize any size member of the <see cref="T:Un4seen.Bass.BASS_RECORDINFO"/> structure as described in the C/C++ interface, since all marchalling is already handled by the API here.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called - there are no initialized.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_RECORDINFO info = new BASS_RECORDINFO();
            bool ok = Bass.BASS_RecordGetInfo(info);
            </code>
            <code lang="VB">
            Dim info As New BASS_RECORDINFO()
            Dim ok As Boolean = Bass.BASS_RecordGetInfo(info)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetInfo">
            <summary>
            Retrieves information on the recording device being used.
            </summary>
            <returns>An instance of the <see cref="T:Un4seen.Bass.BASS_RECORDINFO"/> class on success - else <see langword="null"/>.</returns>
            <remarks>There is no need to initialize any size member of the <see cref="T:Un4seen.Bass.BASS_RECORDINFO"/> structure as described in the C/C++ interface, since all marchalling is already handled by the API here.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called - there are no initialized.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_RECORDINFO info = Bass.BASS_RecordGetInfo(info);
            if (info != null)
              Console.WriteLine(info.ToString());
            </code>
            <code lang="VB">
            Dim info As BASS_RECORDINFO = Bass.BASS_RecordGetInfo(info)
            If Not (info Is Nothing) Then
              Console.WriteLine(info.ToString())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetInputNamePtr(System.Int32)">
            <summary>
            
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetInputName(System.Int32)">
            <summary>
            Retrieves the text description of a recording input source.
            </summary>
            <param name="input">The input to get the description of... 0 = first, -1 = master.</param>
            <returns>If succesful, then the description is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called - there are no initialized.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="input"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>A master input is not available.</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The returned string is in ANSI or UTF-8 form on Windows, depending on the BASS_CONFIG_UNICODE setting. It is in UTF-16 form ("WCHAR" rather than "char") on Windows CE, and in UTF-8 form on other platforms.</para>
            <para>On OSX, there is no master input (-1).</para>
            </remarks>
            <example>
            Get the name of the first input:
            <code lang="C#">
            string inputName = Bass.BASS_RecordGetInputName(0);
            </code>
            <code lang="VB">
            Dim inputName As String = Bass.BASS_RecordGetInputName(0)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetInputNames">
            <summary>
            Returns all available recording input source names.
            </summary>
            <returns>An array of strings representing the available recording input source names.</returns>
            <remarks>Uses <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInputName(System.Int32)"/> internally.
            <para>The index of the returned names equals the input-id, which might be used with <see cref="M:Un4seen.Bass.Bass.BASS_RecordSetInput(System.Int32,Un4seen.Bass.BASSInput,System.Single)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordSetInput(System.Int32,Un4seen.Bass.BASSInput,System.Single)">
            <summary>
            Adjusts the settings of a recording input source.
            </summary>
            <param name="input">The input to adjust the settings of... 0 = first, -1 = master.</param>
            <param name="setting">The new setting... a combination of these flags (<see cref="T:Un4seen.Bass.BASSInput"/>):
            <list type="table">
            <item><term>BASS_INPUT_OFF</term><description>Disable the input. This flag can't be used when the device supports only one input at a time.</description></item>
            <item><term>BASS_INPUT_ON</term><description>Enable the input. If the device only allows one input at a time, then any previously enabled input will be disabled by this.</description></item>
            <item><term>BASS_INPUT_NONE</term><description>Don't change any setting. Use this flag, if you only want to set the volume.</description></item>
            </list>
            </param>
            <param name="volume">The volume level... 0 (silent) to 1 (max), less than 0 = leave current.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The actual volume level may not be exactly the same as requested, due to underlying precision differences. <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInput(System.Int32,System.Single@)"/> can be used to confirm what the volume is.</para>
            <para>The volume curve used by this function is always linear, the BASS_CONFIG_CURVE_VOL config option setting has no effect on this.</para>
            <para>Changes made by this function are system-wide, ie. other software using the device will be affected by it.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called - there are no initialized.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="input"/> or <paramref name="volume"/> is invalid.</description></item>
            <item><term>BASS_NOTAVAIL</term><description>The soundcard/driver doesn't allow you to change the input or it's volume.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>On OSX, there is no master input (-1), and only the currently enabled input has its volume setting available (if it has a volume control).</para>
            </remarks>
            <example>
            <code lang="C#">
            // Disable the master input without changing the volume:
            Bass.BASS_RecordSetInput(-1, BASSInput.BASS_INPUT_OFF, -1f );
            
            // Enable the first input and set the volume to 50%:
            Bass.BASS_RecordSetInput(0, BASSInput.BASS_INPUT_ON, 0.5f );
            
            // Set the volume of the first input without changing the settings:
            Bass.BASS_RecordSetInput(0, BASSInput.BASS_INPUT_NONE, 1f );
            </code>
            <code lang="VB">
            ' Disable the master input without changing the volume:
            Bass.BASS_RecordSetInput(-1, BASSInput.BASS_INPUT_OFF, -1F)
            
            ' Enable the first input and set the volume to 50%:
            Bass.BASS_RecordSetInput(0, BASSInput.BASS_INPUT_ON, 0.5F)
            
            ' Set the volume of the first input without changing the settings:
            Bass.BASS_RecordSetInput(0, BASSInput.BASS_INPUT_NONE, 1F );
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetInput(System.Int32,System.Single@)">
            <summary>
            Retrieves the settings of a recording input source.
            </summary>
            <param name="input">The input to get the settings of... 0 = first, -1 = master.</param>
            <param name="volume">Reference to a variable to receive the current volume.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            If successful, then the settings are returned. The BASS_INPUT_OFF flag will be set if the input is disabled, 
            otherwise the input is enabled. The type of input (see <see cref="T:Un4seen.Bass.BASSInputType"/>) is also indicated in the high 8-bits (use BASS_INPUT_TYPE_MASK to test) of the return value, 
            and can be one of the following. If the volume is requested but not available, volume will receive -1.
            <list type="table">
            <item><term>BASS_INPUT_TYPE_DIGITAL</term><description>Digital input source, for example, a DAT or audio CD.</description></item>
            <item><term>BASS_INPUT_TYPE_LINE</term><description>Line-in. On some devices, "Line-in" may be combined with other analog sources into a single BASS_INPUT_TYPE_ANALOG input.</description></item>
            <item><term>BASS_INPUT_TYPE_MIC</term><description>Microphone.</description></item>
            <item><term>BASS_INPUT_TYPE_SYNTH</term><description>Internal MIDI synthesizer.</description></item>
            <item><term>BASS_INPUT_TYPE_CD</term><description>Analog audio CD.</description></item>
            <item><term>BASS_INPUT_TYPE_PHONE</term><description>Telephone.</description></item>
            <item><term>BASS_INPUT_TYPE_SPEAKER</term><description>PC speaker.</description></item>
            <item><term>BASS_INPUT_TYPE_WAVE</term><description>The device's WAVE/PCM output.</description></item>
            <item><term>BASS_INPUT_TYPE_AUX</term><description>Auxiliary. Like "Line-in", "Aux" may be combined with other analog sources into a single BASS_INPUT_TYPE_ANALOG input on some devices.</description></item>
            <item><term>BASS_INPUT_TYPE_ANALOG</term><description>Analog, typically a mix of all analog sources.</description></item>
            <item><term>BASS_INPUT_TYPE_UNDEF</term><description>Anything that is not covered by the other types.</description></item>
            </list>
            </returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called - there are no initialized.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="input"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>A master input is not available.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The input type information is only available on Windows. There is no "what you hear" type of input defined; if the device has one, it will typically come under BASS_INPUT_TYPE_ANALOG or BASS_INPUT_TYPE_UNDEF.</para>
            <para>On OSX, there is no master input (-1), and only the currently enabled input has its volume setting available (if it has a volume control).</para>
            </remarks>
            <example>
            List all available input sources, with their current status:
            <code lang="C#">
            Bass.BASS_RecordInit(-1); // init the default device
            string name;
            for (int n = 0; (name = Bass.BASS_RecordGetInputName(n)) != null; n++)
            {
              float vol = 0f;
              int setting = Bass.BASS_RecordGetInput(n, ref vol);
              Console.WriteLine("{0} [{1} : {2}] - {3}", 
                                name, 
                                (BASSInputType)((int)BASSInputType.BASS_INPUT_TYPE_MASK &amp; setting), 
                                vol,
                                ((int)BASSInput.BASS_INPUT_OFF &amp; setting) != 0 ? "Off" : "On");
            }
            </code>
            <code lang="VB">
            Bass.BASS_RecordInit(-1) ' init the default device
            Dim n As Integer = 0
            Dim name As String = ""
            While Not (name Is Nothing)
              name = Bass.BASS_RecordGetInputName(n)
              n += 1
              If Not (name Is Nothing) Then
                Dim vol As Single = 0F
                Dim setting As Integer = Bass.BASS_RecordGetInput(n, vol)
                Console.WriteLine("{0} [{1} : {2}] - {3}", 
                                  name, 
                                  CType(CInt(BASSInputType.BASS_INPUT_TYPE_MASK) And setting, BASSInputType), 
                                  vol,
                                  CStr(IIf(CInt(BASSInput.BASS_INPUT_OFF) And setting &lt;&gt; 0, "Off", "On")))
              End If
            End While
            </code>
            Find a microphone input:
            <code lang="C#">
            Bass.BASS_RecordInit(-1);
            int mic = -1;
            int n = 0;
            int settings = 0;
            float vol = 0f;
            while (settings != -1)
            {
              // get the settings of that input
              settings = Bass.BASS_RecordGetInput(n, ref vol);
              if ( (settings &amp; (int)BASSInputType.BASS_INPUT_TYPE_MASK) == (int)BASSInputType.BASS_INPUT_TYPE_MIC )
              { 
                // found the mic!
                mic = n;
                break;
              }
              n++;
            }
            if (mic != -1)
              Console.WriteLine( "Found a MIC at input {0}", mic );
            else
              Console.WriteLine( "No MIC found!" );
            </code>
            <code lang="VB">
            Bass.BASS_RecordInit(-1)
            Dim mic As Integer = -1
            Dim n As Integer = 0
            Dim settings As Integer = 0
            Dim vol As Single = 0F
            While settings &lt;&gt; -1
              ' get the settings of that input
              settings = Bass.BASS_RecordGetInput(n, vol)
              If (settings And CInt(BASSInputType.BASS_INPUT_TYPE_MASK)) = CInt(BASSInputType.BASS_INPUT_TYPE_MIC) Then
                ' found the mic!
                mic = n
                Exit While
              End If
              n += 1
            End While
            If mic &lt;&gt; -1 Then
              Console.WriteLine("Found a MIC at input {0}", mic)
            Else
              Console.WriteLine("No MIC found!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetInput(System.Int32)">
            <summary>
            Retrieves the setting of a recording input source.
            </summary>
            <param name="input">The input to get the settings of... 0 = first, -1 = master.</param>
            <returns>One of the <see cref="T:Un4seen.Bass.BASSInput"/> values (BASS_INPUT_NONE on error).</returns>
            <remarks><see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInput(System.Int32,System.Single@)"/> returns both, the <see cref="T:Un4seen.Bass.BASSInputType"/> (in the high-word) 
            as well as the <see cref="T:Un4seen.Bass.BASSInput"/> (in the low-word).
            Use this overload to only retrieve the <see cref="T:Un4seen.Bass.BASSInput"/> without the <see cref="T:Un4seen.Bass.BASSInputType"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called - there are no initialized.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="input"/> is invalid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>A master input is not available.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The input type information is only available on Windows. There is no "what you hear" type of input defined; if the device has one, it will typically come under BASS_INPUT_TYPE_ANALOG or BASS_INPUT_TYPE_UNDEF.</para>
            <para>On OSX, there is no master input (-1), and only the currently enabled input has its volume setting available (if it has a volume control).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetInputPtr(System.Int32,System.IntPtr)">
            <summary>
            
            </summary>
            <param name="input"></param>
            <param name="vol"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordGetInputType(System.Int32)">
            <summary>
            Retrieves the type of input of a recording input source.
            </summary>
            <param name="input">The input to get the settings of... 0 = first, -1 = master.</param>
            <returns>One of the <see cref="T:Un4seen.Bass.BASSInputType"/> values (BASS_INPUT_TYPE_ERROR on error).</returns>
            <remarks><see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInput(System.Int32,System.Single@)"/> returns both, the <see cref="T:Un4seen.Bass.BASSInputType"/> (in the high-word) 
            as well as the <see cref="T:Un4seen.Bass.BASSInput"/> (in the low-word).
            Use this overload to only retrieve the <see cref="T:Un4seen.Bass.BASSInput"/> without the <see cref="T:Un4seen.Bass.BASSInputType"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called - there are no initialized.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="input"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>The input type information is only available on Windows. There is no "what you hear" type of input defined; if the device has one, it will typically come under BASS_INPUT_TYPE_ANALOG or BASS_INPUT_TYPE_UNDEF.</para>
            <para>On OSX, there is no master input (-1), and only the currently enabled input has its volume setting available (if it has a volume control).</para>
            </remarks>
            <example>
            Find a microphone input:
            <code lang="C#">
            Bass.BASS_RecordInit(-1); // init the default device
            int mic = -1;
            BASSInputType flags;
            for (int n=0; (flags=Bass.BASS_RecordGetInputType(n)) != BASSInputType.BASS_INPUT_TYPE_ERROR; n++)
            {
              if ( (flags &amp; BASSInputType.BASS_INPUT_TYPE_MASK) == BASSInputType.BASS_INPUT_TYPE_MIC )
              { 
                // found the mic!
                mic = n;
                break;
              }
            }
            if (mic != -1)
              Console.WriteLine( "Found a MIC at input {0}", mic );
            else
              Console.WriteLine( "No MIC found!" );
            </code>
            <code lang="VB">
            Bass.BASS_RecordInit(- 1)
            Dim mic As Integer = -1
            Dim n As Integer = 0
            Dim flags As BASSInputType = BASSInputType.BASS_INPUT_TYPE_UNDEF
            While flags &lt;&gt; BASSInputType.BASS_INPUT_TYPE_ERROR
              ' get the settings of that input
              flags = Bass.BASS_RecordGetInputType(n)
              If (flags And BASSInputType.BASS_INPUT_TYPE_MASK) = BASSInputType.BASS_INPUT_TYPE_MIC) Then
                ' found the mic!
                mic = n
                Exit While
              End If
              n += 1
            End While
            If mic &lt;&gt; -1 Then
              Console.WriteLine("Found a MIC at input {0}", mic)
            Else
              Console.WriteLine("No MIC found!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_RecordFree">
            <summary>
            Frees all resources used by the recording device.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function should be called for all initialized recording devices before your program exits.</para>
            <para>When using multiple recording devices, the current thread's device setting (as set with <see cref="M:Un4seen.Bass.Bass.BASS_RecordSetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has not been successfully called - there are no initialized.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)">
            <summary>
            Retrieves information on a channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="info"><see cref="T:Un4seen.Bass.BASS_CHANNELINFO"/> instance where to store the channel information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Getting the channel info:
            <code lang="C#">
            BASS_CHANNELINFO info = new BASS_CHANNELINFO();
            Bass.BASS_ChannelGetInfo(_stream, info);
            Console.WriteLine( info.ToString() );
            </code>
            <code lang="VB">
            Dim info As New BASS_CHANNELINFO()
            Bass.BASS_ChannelGetInfo(_stream, info)
            Console.WriteLine(info.ToString())
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32)">
            <summary>
            Retrieves information on a channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <returns>An instance of the <see cref="T:Un4seen.Bass.BASS_CHANNELINFO"/> class on success - else <see langword="null"/>.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>Getting the channel info:
            <code lang="C#">
            BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(_stream);
            Console.WriteLine( info.ToString() );
            </code>
            <code lang="VB">
            Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(_stream)
            Console.WriteLine(info.ToString())
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)">
            <summary>
            Starts (or resumes) playback of a sample, stream, MOD music, or recording.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL / HMUSIC / HSTREAM / HRECORD handle.</param>
            <param name="restart">Restart playback from the beginning? If handle is a user stream, it's current buffer contents are flushed. If it's a MOD music, it's BPM/etc are automatically reset to their initial values. This has no effect on streams with the BASS_STREAM_BLOCK flag set or on recordings.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function is identical to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStart(System.Int32)"/> but with the option of restarting the channel. When a user stream (created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/>) is restarted, its current buffer contents are cleared.
            <para>If other channels have been linked to the specified channel via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetLink(System.Int32,System.Int32)"/>, this function will attempt to simultaneously start playing them too but if any fail, it will be silently. The return value and error code only reflects what happened with the specified channel. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to confirm the status of linked channels.</para>
            <para>When streaming in blocks (BASS_STREAM_BLOCK), the restart parameter is ignored as it's not possible to go back to the start. The <paramref name="restart"/> parameter is also of no consequence with recording channels.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_START</term><description>The output is paused/stopped, use <see cref="M:Un4seen.Bass.Bass.BASS_Start"/> to start it.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description>The channel is not playable, it's a "decoding channel".</description></item>
            <item><term>BASS_ERROR_BUFLOST</term><description>Should not happen... check that a valid window handle was used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_ERROR_NOHW</term><description>No hardware voices are available (HCHANNEL only). This only occurs if the sample was loaded/created with the BASS_SAMPLE_VAM flag, and BASS_VAM_HARDWARE is set in the sample's VAM mode, and there are no hardware voices available to play it.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            // create the stream
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            Bass.BASS_ChannelPlay(stream, false);
            ...
            Bass.BASS_StreamFree(stream);
            </code>
            <code lang="VB">
            Bass.BASS_Init(- 1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            ' create the stream
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            Bass.BASS_ChannelPlay(stream, False)
            ...
            Bass.BASS_StreamFree(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelStart(System.Int32)">
            <summary>
            Starts/resumes playback of a sample, stream, MOD music, or a recording.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            If other channels have been linked to the specified channel via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetLink(System.Int32,System.Int32)"/>, this function will attempt to simultaneously start playing them too but if any fail, it will be silently. The return value and error code only reflects what happened with the specified channel. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to confirm the status of linked channels.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_START</term><description>The output is paused/stopped, use <see cref="M:Un4seen.Bass.Bass.BASS_Start"/> to start it.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description>The channel is not playable, it's a "decoding channel".</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            // create the stream
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            Bass.BASS_ChannelStart(stream, false);
            ...
            Bass.BASS_StreamFree(stream);
            </code>
            <code lang="VB">
            Bass.BASS_Init(- 1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            ' create the stream
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            Bass.BASS_ChannelStart(stream, False)
            ...
            Bass.BASS_StreamFree(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)">
            <summary>
            Sets up a user DSP function on a stream, MOD music, or recording channel.
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="proc">The callback function (see <see cref="T:Un4seen.Bass.DSPPROC"/>).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="priority">The priority of the new DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <returns>If succesful, then the new DSP's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            <para>Equally, you can also remove them at any time. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelRemoveDSP(System.Int32,System.Int32)"/> to remove a DSP function.</para>
            <para>Multiple DSP functions may be used per channel, in which case the order that the functions are called is determined by their priorities. Any DSPs that have the same priority are called in the order that they were added.</para>
            <para>DSP functions can be applied to MOD musics and streams, but not samples. If you want to apply a DSP function to a sample, then you should stream the sample.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            The following example shows a little gain amplifier, assuming you are processing 32-bit BASS_SAMPLE_FLOAT!
            <code lang="C#">
            private float _gainDB = 0f;
            private int _stream = 0;
            private DSPPROC _myDSPProc; // make it global, so that the GC can not remove it
            ...
            _gainDB = 6f; // amplify by +6dB
            _stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                           BASSFlag.BASS_STREAM_AUTOFREE | BASSFlag.BASS_SAMPLE_FLOAT);
            // set a DSP user callback method
            _myDSPProc = new DSPPROC(MyDSPGain);
            // set the user DSP callback
            Bass.BASS_ChannelSetDSP(_stream, _myDSPProc, IntPtr.Zero, 0);
            ...
            // this is the actual processing method
            private void MyDSPGain(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              // the global variable _gainDB contains the amplification value in dB!
              if (_gainDB == 0f || length == 0 || buffer == IntPtr.Zero)
                return;
            
              // convert the _gainDB value to a float
              float _gainAmplification = (float)Math.Pow(10d, _gainDB / 20d);
              // number of bytes in 32-bit floats, since length is in bytes
              int l4 = length/4;
              float[] data = new float[l4];
              // copy from managed to unmanaged memory
              Marshal.Copy(buffer, data, 0, l4);
              // apply gain, assumeing using 32-bit floats (no clipping here ;-)
              for (int a=0; a&lt;l4; a++)
                data[a] = data[a] * _gainAmplification;
              // copy back from unmanaged to managed memory
              Marshal.Copy(data, 0, buffer, l4);
            }
            </code>
            <code lang="VB">
            Private _gainDB As Single = 0F
            Private _stream As Integer = 0
            Private _myDSPProc As DSPPROC ' make it global, so that the GC can not remove it
            ...
            _gainDB = 6f; // amplify by +6dB
            _stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                           BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_SAMPLE_FLOAT)
            ' set a DSP user callback method
            _myDSPProc = New DSPPROC(AddressOf MyDSPGain)
            ' set the user DSP callback
            Bass.BASS_ChannelSetDSP(_stream, _myDSPProc, IntPtr.Zero, 0)
            ...
            ' this is the actual processing method
            Private Sub MyDSPGain(handle As Integer, channel As Integer, 
                                  buffer As IntPtr, length As Integer, user As IntPtr)
              ' the global variable _gainDB contains the amplification value in dB!
              If _gainDB = 0F OrElse length = 0 OrElse buffer = IntPtr.Zero Then
                Return
              End If 
              ' convert the _gainDB value to a float
              Dim _gainAmplification As Single = CSng(Math.Pow(10.0, _gainDB / 20.0))
              ' number of bytes in 32-bit floats, since length is in bytes
              Dim l4 As Integer = length / 4
              Dim data(l4 - 1) As Single
              ' copy from managed to unmanaged memory
              Marshal.Copy(buffer, data, 0, l4)
              ' apply gain, assumeing using 32-bit floats (no clipping here ;-)
              Dim a As Integer
              For a = 0 To l4 - 1
                data(a) = data(a) * _gainAmplification
              Next a
              ' copy back from unmanaged to managed memory
              Marshal.Copy(data, 0, buffer, l4)
            End Sub
            </code>
            This example is type safe but 'slow', since two copy operations are involved. 
            One from unmanaged BASS to managed .NET and when processing has been done locally from .NET back to BASS.
            However, for VB.Net users this is almost the only way to do it.
            <para>C# user can be a little more lucky, since C# supports unsafe code blocks and native pointer access - 
            which will be shown in the following example:</para>
            <code lang="C#">
            private unsafe void MyDSPGain(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              if (_gainDB == 1f || length == 0 || buffer == IntPtr.Zero)
                return;
            
              // convert the _gainDB value to a float
              float _gainAmplification = (float)Math.Pow(10d, _gainDB / 20d);
              // length is in bytes, so the number of floats to process is length/4 
              int l4 = length / 4;
              // cast the given buffer IntPtr to a native pointer to float values
              float *data = (float*)buffer;
              for (int a=0; a&lt;l4; a++)
              {
                data[a] = data[a] * _gainAmplification;
                // alternatively you can also use:
                // *data = *data * _gainAmplification;
                // data++;
              }
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)">
            <summary>
            Retrieves the immediate sample data (or an FFT representation of it) of a sample channel, stream, MOD music, or recording channel.
            This overload uses an IntPtr to reference the buffer data.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="buffer">Location to write the data as an IntPtr (can be <see cref="F:System.IntPtr.Zero"/> when handle is a recording channel (HRECORD), to discard the requested amount of data from the recording buffer).
            <para>Use "Marshal.AllocCoTaskMem" to allocate a memory buffer, use "Marshal.Copy" to copy the buffer data from unmanaged BASS to your managed code and use "Marshal.FreeCoTaskMem" to free the memory buffer when not needed anymore.</para>
            <para>Or make use of a "GCHandle" to receive data to a pinned managed object.</para>
            </param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_FLOAT</term><description>Return floating-point sample data.</description></item>
            <item><term>BASS_DATA_FIXED</term><description>Return 8.24 fixed-point data.</description></item>
            <item><term>BASS_DATA_FFT256</term><description>256 sample FFT (returns 128 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT512</term><description>512 sample FFT (returns 256 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT1024</term><description>1024 sample FFT (returns 512 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT2048</term><description>2048 sample FFT (returns 1024 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT4096</term><description>4096 sample FFT (returns 2048 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT8192</term><description>8192 sample FFT (returns 4096 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT16384</term><description>16384 sample FFT (returns 8192 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT32768</term><description>16384 sample FFT (returns 16384 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT_COMPLEX</term><description>Return the complex FFT result rather than the magnitudes. This increases the amount of data returned (as listed above) fourfold, as it returns real and imaginary parts and the full FFT result (not only the first half). The real and imaginary parts are interleaved in the returned data.</description></item>
            <item><term>BASS_DATA_FFT_INDIVIDUAL</term><description>Perform a separate FFT for each channel, rather than a single combined FFT. The size of the data returned (as listed above) is multiplied by the number of channels.</description></item>
            <item><term>BASS_DATA_FFT_NOWINDOW</term><description>Prevent a Hann window being applied to the sample data when performing an FFT.</description></item>
            <item><term>BASS_DATA_FFT_NYQUIST</term><description>Return an extra value for the Nyquist frequency magnitude. The Nyquist frequency is always included in a complex FFT result.</description></item>
            <item><term>BASS_DATA_FFT_REMOVEDC</term><description>Remove any DC bias from the sample data when performing an FFT.</description></item>
            <item><term>BASS_DATA_NOREMOVE</term><description>Do not remove the data from a recording channel's buffer. This is automatic if the recording channel is using a <see cref="T:Un4seen.Bass.RECORDPROC"/> callback function. This flag is ignored on other channel types.</description></item>
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting FFT data, the number of bytes read from the channel (to perform the FFT) is returned.</para>
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT or BASS_DATA_FIXED flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function can only return as much data as has been written to the channel's buffer, so it may not always be possible to get the amount of data requested, especially if you request large amounts. If you really do need large amounts, then increase the buffer lengths (BASS_CONFIG_BUFFER).
            The BASS_DATA_AVAILABLE flag can be used to check how much data a channel's buffer contains at any time, including when stopped or stalled.</para>
            <para>When requesting data from a decoding channel, data is decoded directly from the channel's source (no playback buffer) and as much data as the channel has available can be decoded at a time.</para>
            <para>When retrieving sample data, 8-bit samples are unsigned (0 to 255) , 16-bit samples are signed (-32768 to 32767), 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range). That is unless the BASS_DATA_FLOAT flag is used, in which case, the sample data will be converted to 32-bit floating-point if it is not already, or if the BASS_DATA_FIXED flag is used, in which case the data will be coverted to 8.24 fixed-point.</para>
            <para>Unless complex data is requested via the BASS_DATA_FFT_COMPLEX flag, the magnitudes of the first half of an FFT result are returned.
            For example, with a 2048 sample FFT, there will be 1024 floating-point values returned.  If the BASS_DATA_FIXED flag is used, then the FFT values will be in 8.24 fixed-point form rather than floating-point. Each value, or "bin", ranges from 0 to 1 (can actually go higher if the sample data is floating-point and not clipped). The 1st bin contains the DC component, the 2nd contains the amplitude at 1/2048 of the channel's sample rate, followed by the amplitude at 2/2048, 3/2048, etc.
            A Hann window is applied to the sample data to reduce leakage, unless the BASS_DATA_FFT_NOWINDOW flag is used. When a window is applied, it causes the DC component to leak into the next bin, but that can be removed (reduced to 0) by using the BASS_DATA_FFT_REMOVEDC flag.
            Doing so slightly increases the processing required though, so it should only be done when needed, which is when a window is applied and the 2nd bin value is important.</para>
            <para>Channels that have 2 or more sample channels (ie. stereo or above) may have FFT performed on each individual channel, using the BASS_DATA_FFT_INDIVIDUAL flag. Without this flag, all of the channels are combined, and a single mono FFT is performed. Performing the extra individual FFTs of course increases the amount of processing required. The return values are interleaved in the same order as the channel's sample data, eg. stereo = left,right,left,etc.</para>
            <para>This function is most useful if you wish to visualize (eg. spectrum analyze) the sound.</para>
            <para>FFT processing hint 1: DC stands for direct current (same as what a flashlight cell gives out) and is represents a 0 Hz sound, which cannot exist in real life. A sound sample should not have any DC component but probably will due to inaccuracies in the recording equipment. You won't hear it (except a click when playing and stopping the sample).
            The DC component is basically the average of all the samples that the FFT was applied to, and is pretty useless.
            You'll have to halve the DC component that BASS returns to get the actual DC component, as BASS doubles all the bin values.
            </para>
            <para>FFT processing hint 2: How to read out the amplitude of a single frequency/a frequency band?
            FFT[0] maps to amplitude at 0 Hz, FFT[length-1] maps to amplitude at Nyquist's frequency. So the index to FFT data at an arbitrary band is:
            <code lang="none">
            idx = length*freq/Nyquist
            where:
            length : length of the returned FFT buffer (in samples)
            freq : required frequency (Hz)
            Nyquist : Nyquist's frequency of the signal (half the sampling rate) (in Hz)
            </code>
            Example: If the stream is 44100Hz, then 16500Hz will be around bin 191 of a 512 sample FFT (512*16500/44100).
            Or, if you are using BASS_DATA_FFT4096 on a stream with a sample rate of 44100 a tone at 540Hz will be at: 540*4096/44100 = 50.15, so a bit of the energy will be in fft[51], but mostly in fft[50].
            Note: With a sample rate of 44100 the Nyquist frequency is 22050Hz, which is the max. frequency. This is also why BASS_DATA_FFT4096 only returns 2048 values - fft[2048] would represent 22050Hz.
            </para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The channel has reached the end.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_DATA_AVAILABLE flag was used with a decoding channel.</description></item>
            <item><term>BASS_ERROR_BUFLOST</term><description>Should not happen... check that a valid window handle was used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            </list>
            </para>
            <para><b>Platform-specific:</b></para>
            <para>The BASS_DATA_FIXED flag is only available on Android and Windows CE.</para>
            </remarks>
            <example>
            The following example assumes that you have created the stream with the BASS_SAMPLE_FLOAT flag.
            So the buffer will contain 32-bit values between -1 and 1...as an array of float:
            <code lang="C#">
            // a 30ms window in bytes to be filled with sample data
            int length = (int)Bass.BASS_ChannelSeconds2Bytes(channel, 0.03);
            
            // first we need a mananged object where the sample data should be held
            // only length/4 elements needed, since length is in byte and a float uses 4 bytes
            float[] data = new float[length/4];
            
            // create a pinned handle to a managed object
            GCHandle hGC = GCHandle.Alloc(data, GCHandleType.Pinned);
            
            // get the data
            length = Bass.BASS_ChannelGetData(channel, hGC.AddrOfPinnedObject(), length);
            
            // free the pinned handle
            hGC.Free();
            </code>
            <code lang="VB">
            ' a 30ms window in bytes to be filled with sample data
            Dim length As Integer = CInt(Bass.BASS_ChannelSeconds2Bytes(channel, 0.03))
            
            ' first we need a mananged object where the sample data should be held
            ' only length/4 elements needed, since length is in byte and a float uses 4 bytes
            Dim data(length/4 - 1) As Single
            
            ' create a pinned handle to a managed object
            Dim hGC As GCHandle = GCHandle.Alloc(data, GCHandleType.Pinned)
            
            ' get the data
            length = Bass.BASS_ChannelGetData(channel, hGC.AddrOfPinnedObject(), length)
            
            ' free the pinned handle
            hGC.Free()
            </code>
            A more simple way is to use the other overloads where you simply pass the array itself 
            (those overloads pass the buffer array as a reference type by value with automatic pinning,
            which is as fast as the following example).
            <para>If you are into C# you might even use native pointers in an unsafe code block:</para>
            <code lang="C#">
            // a 30ms window in bytes to be filled with sample data
            int length = (int)Bass.BASS_ChannelSeconds2Bytes(channel, 0.03);
            
            // first we need a mananged object where the sample data should be held
            // only length/4 elements needed, since length is in byte and a float uses 4 bytes
            float[] data = new float[length/4];
            
            // start an unsafe code block allowing you to use native pointers
            unsafe
            {
              // pointers to managed objects need to be fixed
              fixed (float* buffer = data)    // equivalent to buffer = &amp;data[0]
              {
                length = Bass.BASS_ChannelGetData(channel, (IntPtr)buffer, length);
              }
            }
            </code>
            This is by far the fastest way to use BASS_ChannelGetData, but unfortunately not availabe with VB.Net.
            However, the other overloads do automatically pin the buffer as needed and are as fast as this.
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.Single[],System.Int32)">
            <summary>
            Retrieves the immediate sample data (or an FFT representation of it) of a sample channel, stream, MOD music, or recording channel.
            This overload uses a managed float[] to reference the buffer data as 32-bit!
            SHOULD ONLY BE USED, if the stream was created with BASS_SAMPLE_FLOAT!
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="buffer">The array (float[]) to receive the data, use BASS_SAMPLE_FLOAT when creating the channel stream!</param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_FLOAT</term><description>Return floating-point sample data.</description></item>
            <item><term>BASS_DATA_FIXED</term><description>Return 8.24 fixed-point data.</description></item>
            <item><term>BASS_DATA_FFT256</term><description>256 sample FFT (returns 128 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT512</term><description>512 sample FFT (returns 256 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT1024</term><description>1024 sample FFT (returns 512 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT2048</term><description>2048 sample FFT (returns 1024 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT4096</term><description>4096 sample FFT (returns 2048 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT8192</term><description>8192 sample FFT (returns 4096 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT16384</term><description>16384 sample FFT (returns 8192 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT32768</term><description>16384 sample FFT (returns 16384 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT_COMPLEX</term><description>Return the complex FFT result rather than the magnitudes. This increases the amount of data returned (as listed above) fourfold, as it returns real and imaginary parts and the full FFT result (not only the first half). The real and imaginary parts are interleaved in the returned data.</description></item>
            <item><term>BASS_DATA_FFT_INDIVIDUAL</term><description>Perform a separate FFT for each channel, rather than a single combined FFT. The size of the data returned (as listed above) is multiplied by the number of channels.</description></item>
            <item><term>BASS_DATA_FFT_NOWINDOW</term><description>Prevent a Hann window being applied to the sample data when performing an FFT.</description></item>
            <item><term>BASS_DATA_FFT_NYQUIST</term><description>Return an extra value for the Nyquist frequency magnitude. The Nyquist frequency is always included in a complex FFT result.</description></item>
            <item><term>BASS_DATA_FFT_REMOVEDC</term><description>Remove any DC bias from the sample data when performing an FFT.</description></item>
            <item><term>BASS_DATA_NOREMOVE</term><description>Do not remove the data from a recording channel's buffer. This is automatic if the recording channel is using a <see cref="T:Un4seen.Bass.RECORDPROC"/> callback function. This flag is ignored on other channel types.</description></item>
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting FFT data, the number of bytes read from the channel (to perform the FFT) is returned.</para>
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function can only return as much data as has been written to the channel's buffer, so it may not always be possible to get the amount of data requested, especially if you request large amounts. If you really do need large amounts, then increase the buffer lengths (BASS_CONFIG_BUFFER).
            The BASS_DATA_AVAILABLE flag can be used to check how much data a channel's buffer contains at any time, including when stopped or stalled.</para>
            <para>When requesting data from a decoding channel, data is decoded directly from the channel's source (no playback buffer) and as much data as the channel has available can be decoded at a time.</para>
            <para>When retrieving sample data, 8-bit samples are unsigned (0 to 255) , 16-bit samples are signed (-32768 to 32767), 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range). That is unless the BASS_DATA_FLOAT flag is used, in which case, the sample data will be converted to 32-bit floating-point if it is not already.</para>
            <para>Unless complex data is requested via the BASS_DATA_FFT_COMPLEX flag, the magnitudes of the first half of an FFT result are returned.
            For example, with a 2048 sample FFT, there will be 1024 floating-point values returned. Each value, or "bin", ranges from 0 to 1 (can actually go higher if the sample data is floating-point and not clipped). The 1st bin contains the DC component, the 2nd contains the amplitude at 1/2048 of the channel's sample rate, followed by the amplitude at 2/2048, 3/2048, etc.
            A Hann window is applied to the sample data to reduce leakage, unless the BASS_DATA_FFT_NOWINDOW flag is used. When a window is applied, it causes the DC component to leak into the next bin, but that can be removed (reduced to 0) by using the BASS_DATA_FFT_REMOVEDC flag.
            Doing so slightly increases the processing required though, so it should only be done when needed, which is when a window is applied and the 2nd bin value is important.</para>
            <para>Channels that have 2 or more sample channels (ie. stereo or above) may have FFT performed on each individual channel, using the BASS_DATA_FFT_INDIVIDUAL flag. Without this flag, all of the channels are combined, and a single mono FFT is performed. Performing the extra individual FFTs of course increases the amount of processing required. The return values are interleaved in the same order as the channel's sample data, eg. stereo = left,right,left,etc.</para>
            <para>This function is most useful if you wish to visualize (eg. spectrum analyze) the sound.</para>
            <para>FFT processing hint 1: DC stands for direct current (same as what a flashlight cell gives out) and is represents a 0 Hz sound, which cannot exist in real life. A sound sample should not have any DC component but probably will due to inaccuracies in the recording equipment. You won't hear it (except a click when playing and stopping the sample).
            The DC component is basically the average of all the samples that the FFT was applied to, and is pretty useless.
            You'll have to halve the DC component that BASS returns to get the actual DC component, as BASS doubles all the bin values.
            </para>
            <para>FFT processing hint 2: How to read out the amplitude of a single frequency/a frequency band?
            FFT[0] maps to amplitude at 0 Hz, FFT[length-1] maps to amplitude at Nyquist's frequency. So the index to FFT data at an arbitrary band is:
            <code lang="none">
            idx = length*freq/Nyquist
            where:
            length : length of the returned FFT buffer (in samples)
            freq : required frequency (Hz)
            Nyquist : Nyquist's frequency of the signal (half the sampling rate) (in Hz)
            </code>
            Example: If the stream is 44100Hz, then 16500Hz will be around bin 191 of a 512 sample FFT (512*16500/44100).
            Or, if you are using BASS_DATA_FFT4096 on a stream with a sample rate of 44100 a tone at 540Hz will be at: 540*4096/44100 = 50.15, so a bit of the energy will be in fft[51], but mostly in fft[50].
            Note: With a sample rate of 44100 the Nyquist frequency is 22050Hz, which is the max. frequency. This is also why BASS_DATA_FFT4096 only returns 2048 values - fft[2048] would represent 22050Hz.
            </para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The channel has reached the end.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_DATA_AVAILABLE flag was used with a decoding channel.</description></item>
            <item><term>BASS_ERROR_BUFLOST</term><description>Should not happen... check that a valid window handle was used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            The following example assumes that you have created the stream with the BASS_SAMPLE_FLOAT flag.
            So the buffer will contain 32-bit values between -1 and 1...as an array of float:
            <code lang="C#">
            // a 30ms window in bytes to be filled with sample data
            int length = (int)Bass.BASS_ChannelSeconds2Bytes(channel, 0.03);
            
            // first we need a mananged object where the sample data should be placed
            // length is in bytes, so the number of floats to process is length/4 
            float[] data = new float[length/4];
            
            // get the sample data
            length = Bass.BASS_ChannelGetData(channel, data, length);
            </code>
            <code lang="VB">
            ' a 30ms window in bytes to be filled with sample data
            Dim length As Integer = CInt(Bass.BASS_ChannelSeconds2Bytes(channel, 0.03))
            
            ' first we need a mananged object where the sample data should be placed
            ' length is in bytes, so the number of floats to process is length/4 
            Dim data(length/4 - 1) As Single
            
            ' get the sample data
            length = Bass.BASS_ChannelGetData(channel, data, length)
            </code>
            The next example will gather the immediate FFT data from a channel:
            <code lang="C#">
            float[] fft = new float[2048];
            Bass.BASS_ChannelGetData(channel, fft, (int)BASSData.BASS_DATA_FFT4096)
            // assuming the channel's samplerate is 44.1kHz,
            // this will return the frequency represented by bucket 51
            int hz = Utils.FFTIndex2Frequency(51, 4096, 44100);
            </code>
            <code lang="VB">
            Dim fft(2048 - 1) As Single
            Bass.BASS_ChannelGetData(channel, fft, CInt(BASSData.BASS_DATA_FFT4096))
            ' assuming the channel's samplerate is 44.1kHz,
            ' this will return the frequency represented by bucket 51
            Dim hz As Integer = Utils.FFTIndex2Frequency(51, 4096, 44100)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.Int16[],System.Int32)">
            <summary>
            Retrieves the immediate sample data of a sample channel, stream, MOD music, or recording channel.
            This overload uses a managed short[] to reference the buffer data as 16-bit values - each element will represent one channel in this case!
            SHOULD ONLY BE USED, if the stream was created WITHOUT BASS_SAMPLE_FLOAT or BASS_SAMPLE_8BITS!
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="buffer">The array (short[]) to receive the data, e.g. when creating the channel stream with default setting, meaning 16-bit samples!</param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_NOREMOVE</term><description>Do not remove the data from a recording channel's buffer. This is automatic if the recording channel is using a <see cref="T:Un4seen.Bass.RECORDPROC"/> callback function. This flag is ignored on other channel types.</description></item>
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function can only return as much data as has been written to the channel's buffer, so it may not always be possible to get the amount of data requested, especially if you request large amounts. If you really do need large amounts, then increase the buffer lengths (BASS_CONFIG_BUFFER).
            The BASS_DATA_AVAILABLE flag can be used to check how much data a channel's buffer contains at any time, including when stopped or stalled.</para>
            <para>When requesting data from a "decoding channel" (BASS_STREAM_DECODE or BASS_MUSIC_DECODE was used at creation), there are no intermediate buffers involved, so as much data as is available can be decoded in one go.</para>
            <para>When retrieving sample data, the returned data is in the standard Windows PCM format: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to 1 (not clipped, so can actually be outside this range). That's unless the BASS_DATA_FLOAT flag is used, in which case, the sample data will be converted to 32-bit floating-point (if it isn't already).</para>
            <para>This function is most useful if you wish to visualize (eg. spectrum analyze) the sound.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The channel has reached the end.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_DATA_AVAILABLE flag was used with a decoding channel.</description></item>
            <item><term>BASS_ERROR_BUFLOST</term><description>Should not happen... check that a valid window handle was used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            The following example assumes that you have created the stream with the BASS_DEFAULT flag.
            So the buffer will contain 16-bit values...as an array of short values.
            <code lang="C#">
            // a 30ms window in bytes to be filled with sample data
            int length = (int)Bass.BASS_ChannelSeconds2Bytes(channel, 0.03);
            
            // first we need a mananged object where the sample data should be placed
            // length is in bytes, so the number of shorts to process is length/2
            short[] data = new short[length/2];
            
            // get the sample data
            length = Bass.BASS_ChannelGetData(channel, data, length);
            </code>
            <code lang="VB">
            ' a 30ms window in bytes to be filled with sample data
            Dim length As Integer = CInt(Bass.BASS_ChannelSeconds2Bytes(channel, 0.03))
            
            ' first we need a mananged object where the sample data should be placed
            ' length is in bytes, so the number of floats to process is length/2
            Dim data(length/2 -1) As Short
            
            ' get the sample data
            length = Bass.BASS_ChannelGetData(channel, data, length)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.Int32[],System.Int32)">
            <summary>
            Retrieves the immediate sample data of a sample channel, stream, MOD music, or recording channel.
            This overload uses a managed int[] to reference the buffer data (Note: an int is 32-bit meaning if we expect to receive 16-bit data stereo a single int value will contain 2 x 16-bit, so a full stereo pair of data)!
            SHOULD ONLY BE USED, if the stream was created WITHOUT BASS_SAMPLE_FLOAT or BASS_SAMPLE_8BITS!
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="buffer">The array (int[]) to receive the data, e.g. when creating the channel stream with default setting, meaning 16-bit samples, an int value contains 2 channels (left and right)!</param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_NOREMOVE</term><description>Do not remove the data from a recording channel's buffer. This is automatic if the recording channel is using a <see cref="T:Un4seen.Bass.RECORDPROC"/> callback function. This flag is ignored on other channel types.</description></item>
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function can only return as much data as has been written to the channel's buffer, so it may not always be possible to get the amount of data requested, especially if you request large amounts. If you really do need large amounts, then increase the buffer lengths (BASS_CONFIG_BUFFER).
            The BASS_DATA_AVAILABLE flag can be used to check how much data a channel's buffer contains at any time, including when stopped or stalled.</para>
            <para>When requesting data from a "decoding channel" (BASS_STREAM_DECODE or BASS_MUSIC_DECODE was used at creation), there are no intermediate buffers involved, so as much data as is available can be decoded in one go.</para>
            <para>When retrieving sample data, the returned data is in the standard Windows PCM format: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to 1 (not clipped, so can actually be outside this range). That's unless the BASS_DATA_FLOAT flag is used, in which case, the sample data will be converted to 32-bit floating-point (if it isn't already).</para>
            <para>This function is most useful if you wish to visualize (eg. spectrum analyze) the sound.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The channel has reached the end.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_DATA_AVAILABLE flag was used with a decoding channel.</description></item>
            <item><term>BASS_ERROR_BUFLOST</term><description>Should not happen... check that a valid window handle was used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            The following example assumes that you have created the stream with the BASS_DEFAULT flag.
            So the buffer will contain 16-bit values...as an array of int - meaning one int (32bit) value will represent a stereo pair (left and right channel).
            <code lang="C#">
            int length = (int)Bass.BASS_ChannelSeconds2Bytes(channel, 0.03); // 30ms window
            int[] data = new int[length/4]; // 2 x 16-bit and length in is bytes
            length = Bass.BASS_ChannelGetData(channel, data, length);
            // further processing of length/4 array elements...where each int value represents a stereo pair
            </code>
            <code lang="VB">
            Dim length As Integer = CInt(Bass.BASS_ChannelSeconds2Bytes(channel, 0.03))
            Dim data(length/4 - 1) As Integer  ' 2 x 16-bit and length in is bytes
            length = Bass.BASS_ChannelGetData(channel, data, length)
            ' further processing of length/4 array elements...where each int value represents a stereo pair
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.Byte[],System.Int32)">
            <summary>
            Retrieves the immediate sample data of a sample channel, stream, MOD music, or recording channel.
            This overload uses a managed byte[] to reference the buffer data!
            SHOULD ONLY BE USED, if the stream was created with BASS_SAMPLE_8BITS!
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="buffer">The array (byte[]) to receive the data, e.g. when creating the channel with BASS_SAMPLE_8BITS!</param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_NOREMOVE</term><description>Do not remove the data from a recording channel's buffer. This is automatic if the recording channel is using a <see cref="T:Un4seen.Bass.RECORDPROC"/> callback function. This flag is ignored on other channel types.</description></item>
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the channel has buffered. This flag is primarily of use when recording, and can't be used with decoding channels as they do not have playback buffers. buffer can be <see langword="null"/> when using this flag.</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function can only return as much data as has been written to the channel's buffer, so it may not always be possible to get the amount of data requested, especially if you request large amounts. If you really do need large amounts, then increase the buffer lengths (BASS_CONFIG_BUFFER).
            The BASS_DATA_AVAILABLE flag can be used to check how much data a channel's buffer contains at any time, including when stopped or stalled.</para>
            <para>When requesting data from a "decoding channel" (BASS_STREAM_DECODE or BASS_MUSIC_DECODE was used at creation), there are no intermediate buffers involved, so as much data as is available can be decoded in one go.</para>
            <para>When retrieving sample data, the returned data is in the standard Windows PCM format: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to 1 (not clipped, so can actually be outside this range). That's unless the BASS_DATA_FLOAT flag is used, in which case, the sample data will be converted to 32-bit floating-point (if it isn't already).</para>
            <para>This function is most useful if you wish to visualize (eg. spectrum analyze) the sound.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The channel has reached the end.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_DATA_AVAILABLE flag was used with a decoding channel.</description></item>
            <item><term>BASS_ERROR_BUFLOST</term><description>Should not happen... check that a valid window handle was used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            The following example assumes that you have created the stream with the BASS_SAMPLE_8BITS flag.
            So the buffer will contain 8-bit values...as an array of byte.
            <code lang="C#">
            int length = (int)Bass.BASS_ChannelSeconds2Bytes(channel, 0.03); // 30ms window
            byte[] data = new byte[length]; // 8-bit are bytes
            length = Bass.BASS_ChannelGetData(channel, data, length);
            </code>
            <code lang="VB">
            Dim length As Integer = CInt(Bass.BASS_ChannelSeconds2Bytes(channel, 0.03))
            Dim data(length - 1) As Byte
            length = Bass.BASS_ChannelGetData(channel, data, length)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSeconds2Bytes(System.Int32,System.Double)">
            <summary>
            Translates a time (seconds) position into bytes, based on a channel's format.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD. HSAMPLE handles may also be used.</param>
            <param name="pos">The position to translate (in seconds, e.g. 0.03 = 30ms).</param>
            <returns>If successful, then the translated length in BYTES is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The translation is based on the channel's initial sample rate, when it was created.</para>
            <para>The return value is rounded down to the position of the nearest sample.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            </list>
            </para>
            </remarks>
            <example>Get the length of a 30ms window:
            <code lang="C#">
            int length = (int)Bass.BASS_ChannelSeconds2Bytes(channel, 0.03);
            </code>
            <code lang="VB">
            Dim length As Integer = CInt(Bass.BASS_ChannelSeconds2Bytes(channel, 0.03))
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(System.Int32,System.Int64)">
            <summary>
            Translates a byte position into time (seconds), based on a channel's format.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD. HSAMPLE handles may also be used.</param>
            <param name="pos">The position in BYTES to translate.</param>
            <returns>If successful, then the translated length in seconds is returned, else a negative value is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            The translation is based on the channel's initial sample rate, when it was created.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            </list>
            </para>
            </remarks>
            <example>Getting the elapsed and remaining time:
            <code lang="C#">
            // length in bytes
            long len = Bass.BASS_ChannelGetLength(channel);
            // position in bytes
            long pos = Bass.BASS_ChannelGetPosition(channel);
            // the total time length
            double totaltime = Bass.BASS_ChannelBytes2Seconds(channel, len);
            // the elapsed time length
            double elapsedtime = Bass.BASS_ChannelBytes2Seconds(channel, pos);
            double remainingtime = totaltime - elapsedtime;
            </code>
            <code lang="VB">
            ' length in bytes
            Dim len As Long = Bass.BASS_ChannelGetLength(channel)
            ' position in bytes
            Dim pos As Long = Bass.BASS_ChannelGetPosition(channel)
            ' the total time length
            Dim totaltime As Double = Bass.BASS_ChannelBytes2Seconds(channel, len)
            ' the elapsed time length
            Dim elapsedtime As Double = Bass.BASS_ChannelBytes2Seconds(channel, pos)
            Dim remainingtime As Double = totaltime - elapsedtime
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)">
            <summary>
            Checks if a sample, stream, or MOD music is active (playing) or stalled. Can also check if a recording is in progress.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <returns>The return value is one of the folowing (see <see cref="T:Un4seen.Bass.BASSActive"/>):
            <list type="table">
            <item><term>BASS_ACTIVE_STOPPED</term><description>The channel is not active, or handle is not a valid channel.</description></item>
            <item><term>BASS_ACTIVE_PLAYING</term><description>The channel is playing (or recording).</description></item>
            <item><term>BASS_ACTIVE_PAUSED</term><description>The channel is paused.</description></item>
            <item><term>BASS_ACTIVE_PAUSED_DEVICE</term><description>The channel's device is paused.</description></item>
            <item><term>BASS_ACTIVE_STALLED</term><description>Playback of the stream has been stalled due to there not being enough sample data to continue playing. The playback will automatically resume once there's sufficient data to do so.</description></item>
            </list>
            </returns>
            <remarks>
            <para>When using this function with a decoding channel, BASS_ACTIVE_PLAYING will be returned while there is still data to decode. 
            Once the end has been reached, BASS_ACTIVE_STOPPED will be returned. 
            BASS_ACTIVE_STALLED is never returned for decoding channels; you can tell a decoding channel is stalled if <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> returns less data than requested, and this function still returns BASS_ACTIVE_PLAYING.</para>
            <para>The BASS_ACTIVE_PAUSED_DEVICE state can be the result of a <see cref="M:Un4seen.Bass.Bass.BASS_Pause"/> call or of the device stopping unexpectedly (eg. a USB soundcard being disconnected). In either case, playback will be resumed by <see cref="M:Un4seen.Bass.Bass.BASS_Start"/>.</para>
            <para><see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> can be used to differentiate a stopped channel from an invalid channel. The error code will be BASS_OK if the channel is valid and stopped.
            Syncs can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> to be notified when a channel reaches the end(BASS_SYNC_END sync) or stalls/resumes(BASS_SYNC_STALL sync) or pauses due to device failure(BASS_SYNC_DEV_FAIL sync).</para>
            </remarks>
            <example>
            <code lang="C#">
            BASSActive status = BASS_ChannelIsActive(stream);
            if (status == BASSActive.BASS_ACTIVE_PLAYING)
            {
              // the stream is still playing
              ...
            }
            </code>
            <code lang="VB">
            Dim status As BASSActive = BASS_ChannelIsActive(stream)
            If status = BASSActive.BASS_ACTIVE_PLAYING Then
              ' the stream is still playing
              ...
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelLock(System.Int32,System.Boolean)">
            <summary>
            Locks a stream, MOD music or recording channel to the current thread.
            </summary>
            <param name="handle">The channel handle... a HMUSIC, HSTREAM or HRECORD handle.</param>
            <param name="state">If <see langword="false"/>, unlock the channel, else lock it.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Locking a channel prevents other threads from performing most functions on it, including buffer updates. 
            Other threads wanting to access a locked channel will block until it is unlocked, so a channel should only be locked very briefly. 
            A channel must be unlocked in the same thread that it was locked.
            </remarks>
            <example>
            Lock a channel to ensure that 2 DSP functions start together:
            <code lang="C#">
            Bass.BASS_ChannelLock(channel, true); // lock channel
            Bass.BASS_ChannelSetDSP(channel, DspProc1, null, 0); // set 1st DSP
            Bass.BASS_ChannelSetDSP(channel, DspProc2, null, 0); // set 2nd DSP
            Bass.BASS_ChannelLock(channel, false); // unlock channel
            </code>
            <code lang="VB">
            Bass.BASS_ChannelLock(channel, True); // lock channel
            Bass.BASS_ChannelSetDSP(channel, DspProc1, Nothing, 0); // set 1st DSP
            Bass.BASS_ChannelSetDSP(channel, DspProc2, Nothing, 0); // set 2nd DSP
            Bass.BASS_ChannelLock(channel, False); // unlock channel
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelFree(System.Int32)">
            <summary>
            Frees a sample stream's resources, including any sync/DSP/FX it has.
            </summary>
            <param name="handle">The stream handle.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Device streams (STREAMPROC_DEVICE) cannot be freed.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)">
            <summary>
            Retrieves the playback length of a channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM. HSAMPLE handles may also be used.</param>
            <param name="mode">How to retrieve the length (one of the <see cref="T:Un4seen.Bass.BASSMode"/> flags):
            <list type="table">
            <item><term>BASS_POS_BYTE</term><description>Get the length in bytes.</description></item>
            <item><term>BASS_POS_MUSIC_ORDER</term><description>Get the length in orders. (HMUSIC only).</description></item>
            <item><term>BASS_POS_OGG</term><description>Get the number of bitstreams in an OGG file.</description></item>
            </list>
            <i>Other modes may be supported by add-ons, see the documentation.</i>
            </param>
            <returns>If succesful, then the channel's length is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The exact length of a stream will be returned once the whole file has been streamed, but until then it is not always possible to 100% accurately estimate the length.
            The length is always exact for MP3/MP2/MP1 files when the BASS_STREAM_PRESCAN flag is used in the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> call, otherwise it is an (usually accurate) estimation based on the file size.
            The length returned for OGG files will usually be exact (assuming the file is not corrupt), but when streaming from the internet (or "buffered" user file), it can be a very rough estimation until the whole file has been downloaded.
            It will also be an estimate for chained OGG files that are not pre-scanned.</para>
            <para>Unless an OGG file contains a single bitstream, the number of bitstreams it contains will only be available if it was pre-scanned at the stream's creation.</para>
            <para>Retrieving the length of a MOD music requires that the BASS_MUSIC_PRESCAN flag was used in the <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> call.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The length is not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the duration (in seconds) of a channel:
            <code lang="C#">
            // length in bytes
            long len = Bass.BASS_ChannelGetLength(channel, BASSMode.BASS_POS_BYTE);
            // the time length
            double time = Bass.BASS_ChannelBytes2Seconds(channel, len);
            </code>
            <code lang="VB">
            ' length in bytes
            Dim len As Long = Bass.BASS_ChannelGetLength(channel, BASSMode.BASS_POS_BYTE)
            ' the time length
            Dim time As Double = Bass.BASS_ChannelBytes2Seconds(channel, len)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32)">
            <summary>
            Retrieves the playback length in bytes of a channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM. HSAMPLE handles may also be used.</param>
            <returns>If succesful, then the channel's length is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The exact length of a stream will be returned once the whole file has been streamed, but until then it is not always possible to 100% accurately estimate the length.
            The length is always exact for MP3/MP2/MP1 files when the BASS_STREAM_PRESCAN flag is used in the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> call, otherwise it is an (usually accurate) estimation based on the file size.
            The length returned for OGG files will usually be exact (assuming the file is not corrupt), but when streaming from the internet (or "buffered" user file), it can be a very rough estimation until the whole file has been downloaded.
            It will also be an estimate for chained OGG files that are not pre-scanned.</para>
            <para>Unless an OGG file contains a single bitstream, the number of bitstreams it contains will only be available if it was pre-scanned at the stream's creation.</para>
            <para>Retrieving the length of a MOD music requires that the BASS_MUSIC_PRESCAN flag was used in the <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> call.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The length is not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the duration (in seconds) of a channel:
            <code lang="C#">
            // length in bytes
            long len = Bass.BASS_ChannelGetLength(channel);
            // the time length
            double time = Bass.BASS_ChannelBytes2Seconds(channel, len);
            </code>
            <code lang="VB">
            ' length in bytes
            Dim len As Long = Bass.BASS_ChannelGetLength(channel)
            ' the time length
            Dim time As Double = Bass.BASS_ChannelBytes2Seconds(channel, len)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)">
            <summary>
            Sets up a synchronizer on a MOD music, stream or recording channel.
            </summary>
            <param name="handle">The channel handle... a HMUSIC, HSTREAM or HRECORD.</param>
            <param name="type">The type of sync (see the table below or <see cref="T:Un4seen.Bass.BASSSync"/>), you may also use these flags:
            <list type="table">
            <item><term>BASS_SYNC_ONETIME</term><description>Call the sync only once, and then remove it from the channel.</description></item>
            <item><term>BASS_SYNC_MIXTIME</term><description>Call the sync function when the sync occurs during decoding/mixing, instead of delaying the call until the sync is actually heard. This is automatically applied with decoding channels, as they can not be played/heard.</description></item>
            <item><term>BASS_SYNC_THREAD</term><description>Call the sync asynchronously in the dedicated sync thread. This only affects mixtime syncs (except BASS_SYNC_FREE syncs) and allows the callback function to safely call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFree(System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_MusicFree(System.Int32)"/> on the same channel handle.</description></item>
            </list>
            </param>
            <param name="param">The sync parameters, depends on the sync type... see the table below.</param>
            <param name="proc">The callback function which should be invoked with the sync.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If succesful, then the new synchronizer's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Sync types, with param and <see cref="T:Un4seen.Bass.SYNCPROC"/> data definitions:
            <list type="table">
            <item><term>BASS_SYNC_DEV_FAIL<para><i>(mixtime only)</i></para></term><description>Sync when the channel's device stops unexpectedly (eg. if it is disconnected/disabled). When this happens, it will not be possible to resume a recording but it may be possible to resume playback via <see cref="M:Un4seen.Bass.Bass.BASS_Start"/> once the device becomes available again.
            <para>param : not used.</para>
            <para>data : not used.</para>
            </description></item>
            <item><term>BASS_SYNC_DEV_FORMAT<para><i>(mixtime only)</i></para></term><description>Sync when the sample format (sample rate and/or channel count) of the channel's device changes. The new format is available from <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/>.
            <para>param : not used.</para>
            <para>data : not used.</para>
            </description></item>
            <item><term>BASS_SYNC_DOWNLOAD<para><i>(mixtime only)</i></para></term><description>Sync when downloading of an internet (or "buffered" user file) stream is done.
            <para>param : not used.</para>
            <para>data : not used.</para>
            </description></item>
            <item><term>BASS_SYNC_END</term><description>Sync when a channel reaches the end. Note that some MOD musics never reach the end, they may jump to another position first. If the BASS_MUSIC_STOPBACK flag is used with a MOD music (through <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>), then this sync will also be called when a backward jump effect is played.
            <para>param : not used.</para>
            <para>data : 1 = the sync is triggered by a backward jump in a MOD music, otherwise not used</para>
            </description></item>
            <item><term>BASS_SYNC_FREE<para><i>(mixtime only)</i></para></term><description>Sync when a channel is freed. This can be useful when you need to release some resources associated with the channel. Note that you will not be able to use any BASS functions with the channel in the callback (the channel will no longer exist).
            <para>param : not used.</para>
            <para>data : not used.</para>
            </description></item>
            <item><term>BASS_SYNC_META<para><i>(mixtime only)</i></para></term><description>Sync when metadata is received in a Shoutcast stream. This sync is also triggered when a new logical-bitstream begins in a chained OGG stream (multiple streams are strung one-after-another), in which case the metadata is the updated OGG tags. (see example below)
            <para>param : not used.</para>
            <para>data : not used - the updated metadata is available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_META)</para>
            </description></item>
            <item><term>BASS_SYNC_MUSICFX</term><description>Sync when the sync effect is used in a MOD music. The sync effect is E8x or Wxx for the XM/MTM/MOD formats, and S2x for the IT/S3M formats (where x = any value).
            <para>param : 0 = the position is passed to the callback (data : LOWORD = order, HIWORD = row),</para>
            <para>param : 1 = the value of x is passed to the callback (data : x value).</para>
            </description></item>
            <item><term>BASS_SYNC_MUSICINST</term><description>Sync when an instrument (sample for the MOD/S3M/MTM formats) is played in a MOD music (not including retrigs).
            <para>param : LOWORD = instrument (1=first), HIWORD = note (0=c0...119=b9, -1=all).</para>
            <para>data : LOWORD = note, HIWORD = volume (0-64).</para>
            </description></item>
            <item><term>BASS_SYNC_MUSICPOS</term><description>Sync when a MOD music reaches an order:row position.
            <para>param : LOWORD = order (0=first, -1=all), HIWORD = row (0=first, -1=all).</para>
            <para>data : LOWORD = order, HIWORD = row.</para>
            </description></item>
            <item><term>BASS_SYNC_OGG_CHANGE</term><description>Sync when a new logical bitstream begins in a chained OGG stream. Updated tags are available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            <para>param : not used.</para>
            <para>data : not used.</para>
            </description></item>
            <item><term>BASS_SYNC_POS</term><description>Sync when a channel reaches a position.
            <para>param : position in bytes (automatically rounded down to nearest sample).</para>
            <para>data : not used.</para>
            </description></item>
            <item><term>BASS_SYNC_SETPOS</term><description>Sync when a channel's position is set, including when looping/restarting.
            <para>param : not used.</para>
            <para>data : 0 = playback buffer is not flushed, 1 = playback buffer is flushed.</para>
            </description></item>
            <item><term>BASS_SYNC_SLIDE<para><i>(mixtime only)</i></para></term><description>Sync when an attribute slide has completed.
            <para>param : not used.</para>
            <para>data : the type of slide completed (one of the BASS_SLIDE_xxx values).</para>
            </description></item>
            <item><term>BASS_SYNC_STALL<para><i>(mixtime only)</i></para></term><description>Sync when playback of the channel is stalled/resumed.
            <para>param : not used.</para>
            <para>data : 0 = stalled, 1 = resumed.</para>
            </description></item>
            </list>
            <i>Other sync types may be supported by add-ons, see the documentation.</i>
            <para> </para>
            <para>Multiple synchronizers may be used per channel, and they can be set before and while playing. Equally, synchronizers can also be removed at any time, using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelRemoveSync(System.Int32,System.Int32)"/>. If the BASS_SYNC_ONETIME flag is used, then the sync is automatically removed after its first occurrence.</para>
            <para>The BASS_SYNC_MIXTIME flag can be used with BASS_SYNC_END or BASS_SYNC_POS/MUSICPOS syncs to implement custom looping, by using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> in the callback.
            A MIXTIME sync can also be used to add or remove DSP/FX at specific points, or change a HMUSIC channel's flags or attributes (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>).
            The BASS_SYNC_MIXTIME flag can also be useful with a BASS_SYNC_SETPOS sync, to reset DSP states after seeking.</para>
            <para>Several of the sync types are triggered in the process of rendering the channel's sample data; for example, BASS_SYNC_POS and BASS_SYNC_END syncs, when the rendering reaches the sync position or the end, respectively. Those sync types should be set before starting playback or pre-buffering (ie. before any rendering), to avoid missing any early sync events.</para>
            <para>With recording channels, BASS_SYNC_POS syncs are triggered just before the <see cref="T:Un4seen.Bass.RECORDPROC"/> receives the block of data containing the sync position.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description>An illegal <paramref name="type"/> was specified.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>An illegal <paramref name="param"/> was specified.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set a sync to get notified when the channel reaches the end:
            <code lang="C#">
            private SYNCPROC _mySync;
            ...
            _mySync = new SYNCPROC(EndSync);
            Bass.BASS_ChannelSetSync(_stream, BASSSync.BASS_SYNC_END | BASSSync.BASS_SYNC_MIXTIME, 
                                     0, _mySync, IntPtr.Zero);
            ...
            private void EndSync(int handle, int channel, int data, IntPtr user)
            {
              // the 'channel' has ended - jump to the beginning
              Bass.BASS_ChannelSetPosition(channel, 0L);
            }
            </code>
            <code lang="VB">
            Private _mySync As SYNCPROC
            ...
            _mySync = New SYNCPROC(AddressOf EndSync)
            Bass.BASS_ChannelSetSync(_stream, BASSSync.BASS_SYNC_END Or BASSSync.BASS_SYNC_MIXTIME, 
                                     0, _mySync, IntPtr.Zero)
            ...
            Private Sub EndSync(ByVal handle As Integer, ByVal channel As Integer, 
                                ByVal data As Integer, ByVal user As IntPtr)
              ' the 'channel' has ended - jump to the beginning
              Bass.BASS_ChannelSetPosition(channel, 0L)
            End Sub
            </code>
            Process metadata received from an internet stream:
            <code lang="C#">
            private SYNCPROC _mySync;
            ...
            int stream = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_DEFAULT, null, 0);
            // set a sync to get notified on stream title updates
            _mySync = new SYNCPROC(MetaSync);
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_META, 0, _mySync, IntPtr.Zero);
            Bass.BASS_ChannelPlay(stream, false);
            ...
            private void MetaSync(int handle, int channel, int data, IntPtr user)
            {
              // BASS_SYNC_META is triggered
              string[] tags = Bass.BASS_ChannelGetTagsMETA(channel);
              foreach (string tag in tags)
                Console.WriteLine(tag);
            }
            </code>
            <code lang="VB">
            Private _mySync As SYNCPROC
            ...
            Dim stream As Integer =  Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_DEFAULT, Nothing, 0) 
            ' set a sync to get notified on stream title updates
            _mySync = New SYNCPROC(AddressOf MetaSync)
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_META, 0, _mySync, IntPtr.Zero)
            Bass.BASS_ChannelPlay(stream, False)
            ...
            Private Sub MetaSync(ByVal handle As Integer, ByVal channel As Integer, 
                                 ByVal data As Integer, ByVal user As IntPtr)
              ' BASS_SYNC_META is triggered
              Dim tags() As String = Bass.BASS_ChannelGetTagsMETA(channel) 
              Dim tag As String
              For Each tag In tags
                Console.WriteLine(tag)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)">
            <summary>
            Sets an effect on a stream, MOD music, or recording channel.
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="type">One of the following types of effect (see <see cref="T:Un4seen.Bass.BASSFXType"/>):
            <list type="table">
            <item><term>BASS_FX_DX8_CHORUS</term><description>DX8 Chorus. Use <see cref="T:Un4seen.Bass.BASS_DX8_CHORUS"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_DX8_COMPRESSOR</term><description>DX8 Compression. Use <see cref="T:Un4seen.Bass.BASS_DX8_COMPRESSOR"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_DX8_DISTORTION</term><description>DX8 Distortion. Use <see cref="T:Un4seen.Bass.BASS_DX8_DISTORTION"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_DX8_ECHO</term><description>DX8 Echo. Use <see cref="T:Un4seen.Bass.BASS_DX8_ECHO"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_DX8_FLANGER</term><description>DX8 Flanger. Use <see cref="T:Un4seen.Bass.BASS_DX8_FLANGER"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_DX8_GARGLE</term><description>DX8 Gargle. Use <see cref="T:Un4seen.Bass.BASS_DX8_GARGLE"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_DX8_I3DL2REVERB</term><description>DX8 I3DL2 (Interactive 3D Audio Level 2) reverb. Use <see cref="T:Un4seen.Bass.BASS_DX8_I3DL2REVERB"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_DX8_PARAMEQ</term><description>DX8 Parametric equalizer. Use <see cref="T:Un4seen.Bass.BASS_DX8_PARAMEQ"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_DX8_REVERB</term><description>DX8 Reverb. Use <see cref="T:Un4seen.Bass.BASS_DX8_REVERB"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_VOLUME</term><description>Volume level adjustment. Use <see cref="T:Un4seen.Bass.BASS_FX_VOLUME_PARAM"/> structure to set/get parameters.</description></item>
            </list>
            <i>Other effects may be supported by add-ons, e.g. <see cref="N:Un4seen.Bass.AddOn.Fx">BASS_FX</see>:</i>
            <list type="table">
            <item><term>BASS_FX_BFX_MIX</term><description>BASS_FX Channel Swap/Remap/Downmix. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_ROTATE</term><description>BASS_FX Channel Rotate. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_VOLUME</term><description>BASS_FX Volume. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_PEAKEQ</term><description>BASS_FX Peaking Equalizer. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_DAMP</term><description>BASS_FX Dynamic Amplification. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_AUTOWAH</term><description>BASS_FX Auto Wah. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_PHASER</term><description>BASS_FX Phaser. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_ECHO4</term><description>BASS_FX Echo 3. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_CHORUS</term><description>BASS_FX Chorus. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_BQF</term><description>BASS_FX BiQuad Filter. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_DISTORTION</term><description>BASS_FX Distortion. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_COMPRESSOR2</term><description>BASS_FX Compressor. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2"/> structure to set/get parameters.</description></item>
            <item><term>BASS_FX_BFX_VOLUME_ENV</term><description>BASS_FX volume envelope effect. Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV"/> structure to set/get parameters.</description></item>
            </list>
            </param>
            <param name="priority">The priority of the new FX, which determines it's position in the DSP chain - DSP/FX with higher priority are applied before those with lower. This parameter has no effect with DX8 effects when the "with FX flag" <a href="../Overview.html#DX8DMOEffects">DX8 effect implementation</a> is used.</param>
            <returns>If succesful, then the new effect's handle is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Multiple effects may be used per channel. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelRemoveFX(System.Int32,System.Int32)"/> to remove an effect. Use <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to set an effect's parameters.</para>
            <para>Effects can be applied to MOD musics and streams, but not samples. If you want to apply an effect to a sample, you could use a stream instead.</para>
            <para>Depending on the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementation</a> being used by the channel, the channel may have to be stopped before adding or removing DX8 effects on it. 
            If necessary, that is done automatically and the channel is resumed afterwards.</para>
            <para><b>Platform-specific</b></para>
            <para>DX8 effects are a Windows feature requiring DirectX 8, or DirectX 9 for floating-point support. On other platforms, they are emulated by BASS, except for the following which are currently unsupported: COMPRESSOR, GARGLE, and I3DL2REVERB.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description>An illegal <paramref name="type"/> was specified.</description></item>
            <item><term>BASS_ERROR_NOFX</term><description>DX8 effects are unavailable.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The channel's format is not supported by the effect. It may be floating-point (without DX9) or more than stereo.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>DX8 effects are a Windows feature requiring DirectX 8, or DirectX 9 for floating-point support. On other platforms, they are emulated by BASS, except for the following which are currently unsupported: COMPRESSOR, GARGLE, and I3DL2REVERB. On Windows CE, only PARAMEQ is supported.</para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_DX8_ECHO echo = new BASS_DX8_ECHO(90f, 50f, 500f, 500f, true);
            int channel = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            int fxEchoHandle = Bass.BASS_ChannelSetFX(channel, BASSFXType.BASS_FX_ECHO, 1);
            ...
            // changing the echo effect, dry/wet mix...
            echo.fWetDryMix = 50f;
            Bass.BASS_FXSetParameters(fxEchoHandle, echo);
            </code>
            <code lang="VB">
            Dim echo As New BASS_DX8_ECHO(90F, 50F, 500F, 500F, True)
            Dim channel As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim fxEchoHandle As Integer = Bass.BASS_ChannelSetFX(channel, BASSFXType.BASS_FX_ECHO, 1)
            ...
            ' changing the echo effect, dry/wet mix...
            echo.fWetDryMix = 50F
            Bass.BASS_FXSetParameters(fxEchoHandle, echo)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetDevice(System.Int32)">
            <summary>
            Retrieves the device that the channel is using.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD. HSAMPLE handles may also be used.</param>
            <returns>If successful, the device number is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Recording devices are indicated by the HIWORD of the return value being 1, when this function is called with a HRECORD channel.
            <para>The return value may be BASS_NODEVICE (0x20000), if the channel is not associated with a device.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            </list>
            </para>
            </remarks>
            <example>Check, if a device number is a recording device:
            <code lang="C#">
            bool isRecordingDevice = false;
            int device = Bass.BASS_ChannelGetDevice(stream);
            if (device != -1 &amp;&amp; Utils.HighWord(device) == 1)
              isRecordingDevice = true;
            </code>
            <code lang="VB">
            Dim isRecordingDevice As Boolean = False
            Dim device As Integer = Bass.BASS_ChannelGetDevice(stream)
            If device &lt;&gt; - 1 AndAlso Utils.HighWord(device) = 1 Then
              isRecordingDevice = True
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetDevice(System.Int32,System.Int32)">
            <summary>
            Changes the device that a stream, MOD music or sample is using.
            </summary>
            <param name="handle">The channel or sample handle... only HMUSIC, HSTREAM or HSAMPLE are supported.</param>
            <param name="device">The device to use...0 = no sound, 1 = first real output device, BASS_NODEVICE (0x20000) = no device.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>All of the channel's current settings are carried over to the new device, but if the channel is using the "with FX flag" <a href="../Overview.html#DX8DMOEffects">DX8 effect implementation</a>, 
            the internal state (eg. buffers) of the DX8 effects will be reset. Using the "without FX flag" <a href="../Overview.html#DX8DMOEffects">DX8 effect implementation</a>, the state of the DX8 effects is preserved.
            <para>When changing a sample's device, all the sample's existing channels (HCHANNELs) are freed. It's not possible to change the device of an individual sample channel.</para>
            <para>The BASS_NODEVICE (0x20000) option can be used to disassociate a decoding channel from a device, so that it does not get freed when <see cref="M:Un4seen.Bass.Bass.BASS_Free"/> is called.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="device"/> is invalid.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The requested device has not been initialized.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>The channel is already using the requested device.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Only decoding channels are allowed to use the "no sound" device.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The sample format is not supported by the device/drivers. If the channel is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.</description></item>
            <item><term>BASS_ERROR_MEM</term><description>There is insufficient memory.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // init device 1 and 2
            Bass.BASS_Init(1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
            // now device 1 is the current one
            Bass.BASS_Init(2, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
            // now device 2 is the current one
            ...
            // create the stream on device 1
            Bass.BASS_SetDevice(1);
            // now device 1 is the current one
            int stream = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            Bass.BASS_ChannelPlay(stream, false);
            ...
            // move the channel to device 2
            Bass.BASS_ChannelSetDevice(stream, 2);
            </code>
            <code lang="VB">
            ' init device 1 and 2
            Bass.BASS_Init(1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
            ' now device 1 is the current one
            Bass.BASS_Init(2, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
            ' now device 2 is the current one
            ' create the stream on device 1
            Bass.BASS_SetDevice(1)
            ' now device 1 is the current one
            Dim stream As Integer = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            Bass.BASS_ChannelPlay(stream, False)
            ...
            ' move the channel to device 2
            Bass.BASS_ChannelSetDevice(stream, 2)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)">
            <summary>
            Stops a sample, stream, MOD music, or recording.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM or HRECORD handle.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Stopping a user stream (created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/>) will clear its buffer contents, and stopping a sample channel (HCHANNEL) will result in it being freed.
            Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPause(System.Int32)"/> instead if you wish to stop a user stream and then resume it from the same point.</para>
            <para>When used with a "decoding channel" (BASS_STREAM_DECODE or BASS_MUSIC_DECODE was used at creation), this function will end the channel at its current position, 
            so that it's not possible to decode any more data from it. Any BASS_SYNC_END syncs that have been set on the channel will not be triggered by this, they are only triggered when reaching the natural end. 
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> can be used to reset the channel and start decoding again.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelPause(System.Int32)">
            <summary>
            Pauses a sample, stream, MOD music, or recording.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL / HMUSIC / HSTREAM / HRECORD handle.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> to resume a paused channel. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> can be used to stop a paused channel.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_NOPLAY</term><description>The channel is not playing (or <paramref name="handle"/> is not a valid channel).</description></item>
            <item><term>BASS_ERROR_DECODE</term><description>The channel is not playable, it's a "decoding channel".</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>The channel is already paused.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)">
            <summary>
            Sets the value of an attribute of a sample, stream or MOD music.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM  or HRECORD.</param>
            <param name="attrib">The attribute to set the value of (one of the following, see <see cref="T:Un4seen.Bass.BASSAttribute"/>):
            <list type="table">
            <item><term>BASS_ATTRIB_BUFFER</term><description>Playback buffering length. (HMUSIC/HSTREAM only).</description></item>
            <item><term>BASS_ATTRIB_FREQ</term><description>The sample rate, 100 (min) to 100000 (max), 0 = original rate (when the channel was created).</description></item>
            <item><term>BASS_ATTRIB_GRANULE</term><description>Processing granularity. (HMUSIC/HSTREAM/HRECORD).</description></item>
            <item><term>BASS_ATTRIB_MUSIC_AMPLIFY</term><description>The amplification level, 0 (min) to 100 (max) rounded down to a whole number. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_BPM</term><description>The BPM, 1 (min) to 255 (max) rounded down to a whole number. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_PANSEP</term><description>The Pan separation level, 0 (min) to 100 (max), 50 = linear rounded down to a whole number. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_PSCALER</term><description>The Position scaler, 1 (min) to 256 (max) rounded down to a whole number. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_SPEED</term><description>The Speed, 0 (min) to 255 (max) rounded down to a whole number. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_CHAN</term><description>A channel volume level, 0 (silent) to 1 (full). (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_GLOBAL</term><description>Global volume level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_INST</term><description>An instrument/sample volume level, 0 (min) to 64 (max, 128 for IT format) rounded down to a whole number. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_NET_RESUME</term><description>The volume level, 0 (silent) to 1 (full) or above.</description></item>
            <item><term>BASS_ATTRIB_NOBUFFER</term><description>Buffer level to resume stalled playback. (HSTREAM).</description></item>
            <item><term>BASS_ATTRIB_NORAMP</term><description>Playback ramping switch.</description></item>
            <item><term>BASS_ATTRIB_PAN</term><description>The panning/balance position, -1 (full left) to +1 (full right), 0 = centre.</description></item>
            <item><term>BASS_ATTRIB_PUSH_LIMIT</term><description>Push stream buffer limit.</description></item>
            <item><term>BASS_ATTRIB_SRC</term><description>Sample rate conversion quality.</description></item>
            <item><term>BASS_ATTRIB_TAIL</term><description>Length extension. (HMUSIC/HSTREAM).</description></item>
            <item><term>BASS_ATTRIB_VOL</term><description>The volume level, 0 (silent) to 1 (full) or above.</description></item>
            </list>
            <i>Other attributes may be supported by add-ons, e.g. <see cref="N:Un4seen.Bass.AddOn.Fx">BASS_FX</see>:</i>
            <list type="table">
            <item><term>BASS_ATTRIB_TEMPO</term><description>The tempo of a channel, [-95%...0...+5000%] percents.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_PITCH</term><description>The pitch of a channel, [-60...0...+60] semitones.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_FREQ</term><description>The sample rate of a channel in Hz, but calculates by the same % as BASS_ATTRIB_TEMPO.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_USE_AA_FILTER</term><description>Use the AA Filter for a tempo channel (<see langword="true"/>=1, <see langword="false"/>=0).</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_AA_FILTER_LENGTH</term><description>Sets the AA Filter length in taps (between 8 and 128).</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO</term><description>Use the tempo quick algorithm for a tempo channel (<see langword="true"/>=1, <see langword="false"/>=0).</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_SEQUENCE_MS</term><description>Sets the tempo sequence in ms. of a tempo channel (default = 82).</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_SEEKWINDOW_MS</term><description>Sets the tempo seek window in ms. of a tempo channel (default = 82).</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_OVERLAP_MS</term><description>Sets the tempo overlap in ms. of a tempo channel (default = 12).</description></item>
            <item><term>BASS_ATTRIB_REVERSE_DIR</term><description>Sets the playback direction of a reverse channel (-1=reverse, 1=forward, or use one of the <see cref="T:Un4seen.Bass.AddOn.Fx.BASSFXReverse"/> flags).</description></item>
            </list>
            </param>
            <param name="value">The new attribute value. See the attribute's documentation for details on the possible values.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            The actual attribute value may not be exactly the same as requested, due to precision differences. For example, an attribute might only allow whole number values. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/> can be used to confirm what the value is.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="attrib"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="value"/> is not valid. See the attribute's documentation for the valid range of values.</description></item>
            </list>
            <i>Some attributes may have additional error codes, see the documentation</i>
            </para>
            </remarks>
            <example>Change the volume of a channel to 50%:
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            Bass.BASS_ChannelPlay(stream, false);
            ...
            Bass.BASS_ChannelSetAttribute(stream, BASSAttribute.BASS_ATTRIB_VOL, 0.5f);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            Bass.BASS_ChannelPlay(stream, False)
            ...
            Bass.BASS_ChannelSetAttribute(stream, BASSAttribute.BASS_ATTRIB_VOL, 0.5F)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.IntPtr,System.Int32)">
            <summary>
            Sets the value of a channel's attribute.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM  or HRECORD.</param>
            <param name="attrib">The attribute to set the value of (one of the following, see <see cref="T:Un4seen.Bass.BASSAttribute"/>):
            <list type="table">
            <item><term>BASS_ATTRIB_SCANINFO</term><description>Scanned info. (HSTREAM only).</description></item>
            <item><term>BASS_ATTRIB_USER</term><description>User-defined info. (HMUSIC/HSTREAM/HRECORD).</description></item>  
            </list>
            <i>Other attributes may be supported by add-ons, see the documentation</i>
            </param>
            <param name="value">The pointer to the new attribute data.</param>
            <param name="size">The size of the attribute data.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="attrib"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="value"/> content or <paramref name="size"/> is not valid.</description></item>
            </list>
            <i>Some attributes may have additional error codes, see the documentation</i>
            </para>
            </remarks>
            <example>Transfer scanned info from one stream to another stream of the same file:
            <code lang="C#">
            // get the size
            int size = Bass.BASS_ChannelGetAttribute(stream1, BASSAttribute.BASS_ATTRIB_SCANINFO, IntPtr.Zero, 0);
            IntPtr hglobal = Marshal.AllocHGlobal(size);
            // get the data
            Bass.BASS_ChannelGetAttribute(stream1, BASSAttribute.BASS_ATTRIB_SCANINFO, scaninfo, size);
            // apply it to the other stream
            Bass.BASS_ChannelSetAttribute(stream2, BASSAttribute.BASS_ATTRIB_SCANINFO, scaninfo, size);
            Marshal.FreeHGlobal(hglobal);
            </code>
            <code lang="VB">
            ' get the size
            Dim size As Integer = Bass.BASS_ChannelGetAttribute(stream1, BASSAttribute.BASS_ATTRIB_SCANINFO, IntPtr.Zero, 0)
            Dim hglobal As IntPtr = Marshal.AllocHGlobal(size)
            ' get the data
            Bass.BASS_ChannelGetAttribute(stream1, BASSAttribute.BASS_ATTRIB_SCANINFO, scaninfo, size)
            ' apply it to the other stream
            Bass.BASS_ChannelSetAttribute(stream2, BASSAttribute.BASS_ATTRIB_SCANINFO, scaninfo, size)
            Marshal.FreeHGlobal(hglobal)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)">
            <summary>
            Retrieves the value of an attribute of a sample, stream or MOD music. Can also get the sample rate of a recording channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM or HRECORD.</param>
            <param name="attrib">The attribute to set the value of (one of the following, see <see cref="T:Un4seen.Bass.BASSAttribute"/>):
            <list type="table">
            <item><term>BASS_ATTRIB_BITRATE</term><description>Average bitrate. (HSTREAM only).</description></item>
            <item><term>BASS_ATTRIB_BUFFER</term><description>Playback buffering length. (HMUSIC/HSTREAM only).</description></item>
            <item><term>BASS_ATTRIB_CPU</term><description>CPU usage. (HMUSIC/HSTREAM)</description></item>
            <item><term>BASS_ATTRIB_FREQ</term><description>Sample rate.</description></item>
            <item><term>BASS_ATTRIB_GRANULE</term><description>Processing granularity. (HMUSIC/HSTREAM/HRECORD).</description></item>
            <item><term>BASS_ATTRIB_MUSIC_ACTIVE</term><description>Active channel count. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_AMPLIFY</term><description>Amplification level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_BPM</term><description>BPM. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_PANSEP</term><description>Pan separation level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_PSCALER</term><description>Position scaler. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_SPEED</term><description>Speed. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_CHAN</term><description>A channel volume level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_GLOBAL</term><description>Global volume level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_INST</term><description>An instrument/sample volume level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_NET_RESUME</term><description>The volume level, 0 (silent) to 1 (full) or above.</description></item>
            <item><term>BASS_ATTRIB_NOBUFFER</term><description>Buffer level to resume stalled playback. (HSTREAM).</description></item>
            <item><term>BASS_ATTRIB_NORAMP</term><description>Playback ramping switch.</description></item>
            <item><term>BASS_ATTRIB_PAN</term><description>Panning/balance position.</description></item>
            <item><term>BASS_ATTRIB_PUSH_LIMIT</term><description>Push stream buffer limit.</description></item>
            <item><term>BASS_ATTRIB_SRC</term><description>Sample rate conversion quality.</description></item>
            <item><term>BASS_ATTRIB_TAIL</term><description>Length extension. (HMUSIC/HSTREAM).</description></item>
            <item><term>BASS_ATTRIB_VOL</term><description>Volume level.</description></item>
            </list>
            <i>Other attributes may be supported by add-ons, e.g. <see cref="N:Un4seen.Bass.AddOn.Fx">BASS_FX</see>:</i>
            <list type="table">
            <item><term>BASS_ATTRIB_TEMPO</term><description>The tempo of a channel in percent.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_PITCH</term><description>The pitch of a channel in semitones.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_FREQ</term><description>The sample rate of a channel in Hz.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_USE_AA_FILTER</term><description>AA Filter used on a tempo channel.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_AA_FILTER_LENGTH</term><description>The AA Filter length in taps.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO</term><description>Tempo quick algorithm used on a tempo channel.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_SEQUENCE_MS</term><description>The tempo sequence in ms. used on a tempo channel.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_SEEKWINDOW_MS</term><description>The tempo seek window in ms. used on a tempo channel.</description></item>
            <item><term>BASS_ATTRIB_TEMPO_OPTION_OVERLAP_MS</term><description>The tempo overlap in ms. used on a tempo channel.</description></item>
            <item><term>BASS_ATTRIB_REVERSE_DIR</term><description>The current playback direction of a reverse stream.</description></item>
            </list>
            </param>
            <param name="value">Pointer to a variable to receive the attribute value.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="attrib"/> is not valid.</description></item>
            </list>
            <i>Some attributes may have additional error codes, see the documentation</i>
            </para>
            </remarks>
            <example>Get the current volume of a channel:
            <code lang="C#">
            float vol = 0f;
            if (Bass.BASS_ChannelGetAttribute(stream, BASSAttribute.BASS_ATTRIB_VOL, ref vol))
              Console.WriteLine("Volume={0}", vol);
            </code>
            <code lang="VB">
            Dim vol As Single = 0F
            If Bass.BASS_ChannelGetAttribute(stream, BASSAttribute.BASS_ATTRIB_VOL, vol) Then
              Console.WriteLine("Volume={0}", vol)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.IntPtr,System.Int32)">
            <summary>
            Retrieves the value of a channel's attribute. 
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM  or HRECORD.</param>
            <param name="attrib">The attribute to get the value of (one of the following, see <see cref="T:Un4seen.Bass.BASSAttribute"/>):
            <list type="table">
            <item><term>BASS_ATTRIB_SCANINFO</term><description>Scanned info. (HSTREAM only).</description></item>
            <item><term>BASS_ATTRIB_USER</term><description>User-defined info. (HMUSIC/HSTREAM/HRECORD).</description></item>
            </list>
            <i>Other attributes may be supported by add-ons, see the documentation</i>
            </param>
            <param name="value">Pointer to a buffer to receive the attribute data.</param>
            <param name="size">The size of the attribute data... 0 = get the size of the attribute without getting the data.</param>
            <returns>If successful, the size of the attribute data is returned, else 0 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function also supports the floating-point attributes supported by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/>. 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The <paramref name="attrib"/> is not available.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="attrib"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="value"/> content or <paramref name="size"/> is not valid.</description></item>
            </list>
            <i>Some attributes may have additional error codes, see the documentation</i>
            </para>
            </remarks>
            <example>Transfer scanned info from one stream to another stream of the same file:
            <code lang="C#">
            // get the size
            int size = Bass.BASS_ChannelGetAttribute(stream1, BASSAttribute.BASS_ATTRIB_SCANINFO, IntPtr.Zero, 0);
            IntPtr hglobal = Marshal.AllocHGlobal(size);
            // get the data
            Bass.BASS_ChannelGetAttribute(stream1, BASSAttribute.BASS_ATTRIB_SCANINFO, scaninfo, size);
            // apply it to the other stream
            Bass.BASS_ChannelSetAttribute(stream2, BASSAttribute.BASS_ATTRIB_SCANINFO, scaninfo, size);
            Marshal.FreeHGlobal(hglobal);
            </code>
            <code lang="VB">
            ' get the size
            Dim size As Integer = Bass.BASS_ChannelGetAttribute(stream1, BASSAttribute.BASS_ATTRIB_SCANINFO, IntPtr.Zero, 0)
            Dim hglobal As IntPtr = Marshal.AllocHGlobal(size)
            ' get the data
            Bass.BASS_ChannelGetAttribute(stream1, BASSAttribute.BASS_ATTRIB_SCANINFO, scaninfo, size)
            ' apply it to the other stream
            Bass.BASS_ChannelSetAttribute(stream2, BASSAttribute.BASS_ATTRIB_SCANINFO, scaninfo, size)
            Marshal.FreeHGlobal(hglobal)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)">
            <summary>
            Modifies and retrieves a channel's flags.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM.</param>
            <param name="flags">A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_LOOP</term><description>Loop the channel.</description></item>
            <item><term>BASS_SAMPLE_MUTEMAX</term><description>Mute the channel when it is at (or beyond) its max distance.</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>Automatically free the channel when playback ends. Note that the BASS_MUSIC_AUTOFREE flag is identical to this flag. (HSTREAM/HMUSIC)</description></item>
            <item><term>BASS_STREAM_RESTRATE</term><description>Restrict the download rate. (HSTREAM)</description></item>
            <item><term>BASS_MUSIC_NONINTER</term><description>Use non-interpolated mixing. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_SINCINTER</term><description>Use sinc interpolated sample mixing. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_RAMP</term><description>Use "normal" ramping. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_RAMPS</term><description>Use "sensitive" ramping. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_SURROUND</term><description>Use surround sound. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_SURROUND2</term><description>Use surround sound mode 2. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_FT2MOD</term><description>Use FastTracker 2 .MOD playback. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_PT1MOD</term><description>Use ProTracker 1 .MOD playback. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_POSRESET</term><description>Stop all notes when seeking. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_POSRESETEX</term><description>Stop all notes and reset BPM/etc when seeking. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_STOPBACK</term><description>Stop when a backward jump effect is played. (HMUSIC)</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a href="../Overview.html#SpeakerAssignement">Speaker assignment</a> flags. (HSTREAM/HMUSIC)</description></item>
            </list>
            <i>Other attributes may be supported by add-ons, see the documentation</i>
            </param>
            <param name="mask">The flags (as above) to modify. Flags that are not included in this are left as they are, so it can be set to 0 in order to just retrieve the current flags. To modify the speaker flags, any of the BASS_SPEAKER_xxx flags can be used in the mask (no need to include all of them).</param>
            <returns>If successful, the channel's updated flags are returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Some flags may not be adjustable in some circumstances, so the return value should be checked to confirm any changes. 
            The flags listed above are just the flags that can be modified, and there may be additional flags present in the return value. 
            See the <see cref="T:Un4seen.Bass.BASS_CHANNELINFO"/> documentation for a full list of flags.</para>
            <para>Streams that are created by add-ons may have additional flags available. There is a limited number of possible flag values though, so some add-ons may use the same flag value for different things. 
            This means that when using add-on specific flags with a stream created via the plugin system, it is a good idea to first confirm that the add-on is handling the stream, by checking its ctype via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/>.</para>
            <para>During playback, the effects of flag changes are not heard instantaneously, due to buffering. To reduce the delay, use the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option to reduce the buffer length.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Toggle looping on a channel:
            <code lang="C#">
            if ((Bass.BASS_ChannelFlags(channel, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_DEFAULT) &amp; BASSFlag.BASS_SAMPLE_LOOP) == BASSFlag.BASS_SAMPLE_LOOP)
            {
              // loop flag was set, so remove it
              Bass.BASS_ChannelFlags(channel, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_SAMPLE_LOOP);
            }
            else
            {
              // loop flag was not set, so set it
              Bass.BASS_ChannelFlags(channel, BASSFlag.BASS_SAMPLE_LOOP, BASSFlag.BASS_SAMPLE_LOOP);
            }
            </code>
            <code lang="VB">
            If (Bass.BASS_ChannelFlags(channel, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_DEFAULT) And BASSFlag.BASS_SAMPLE_LOOP) = BASSFlag.BASS_SAMPLE_LOOP Then
              ' loop flag was set, so remove it
              Bass.BASS_ChannelFlags(channel, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_SAMPLE_LOOP)
            Else
              ' loop flag was not set, so set it
              Bass.BASS_ChannelFlags(channel, BASSFlag.BASS_SAMPLE_LOOP, BASSFlag.BASS_SAMPLE_LOOP)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)">
            <summary>
            Updates the playback buffer of a stream or MOD music.
            </summary>
            <param name="handle">The channel handle... a HMUSIC or HSTREAM.</param>
            <param name="length">The amount to render, in milliseconds... 0 = default (2 x <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATEPERIOD"/>). This is capped at the space available in the buffer.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>When starting playback of a stream or MOD music, after creating it or changing its position, there will be a slight delay while the initial data is decoded for playback. 
            Usually the delay is not noticeable or important, but if you need playback to start instantly when you call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>, then use this function first. 
            The length parameter should be at least equal to the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATEPERIOD"/>.</para>
            <para>It may not always be possible to render the requested amount of data, in which case this function will still succeed. 
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check how much data a channel has buffered for playback.</para>
            <para>When automatic updating is disabled (<see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATEPERIOD"/> = 0 or <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATETHREADS"/> = 0), this function could be used instead of <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> to implement different update periods for different channels, 
            instead of a single update period for all. Unlike <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/>, this function can also be used while automatic updating is enabled.</para>
            <para>The CPU usage of this function is not included in the <see cref="M:Un4seen.Bass.Bass.BASS_GetCPU"/> reading.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Decoding channels do not have playback buffers.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The channel has ended.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>Pre-buffer to enable instant playback:
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_STREAM_PRESCAN);
            // pre-buffer
            Bass.BASS_ChannelUpdate(stream, 0);
            // start playback
            Bass.BASS_ChannelPlay(stream, false);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("afile.mp3", 0, 0, BASSFlag.BASS_STREAM_PRESCAN)
            ' pre-buffer
            Bass.BASS_ChannelUpdate(stream, 0)
            ' start playback
            Bass.BASS_ChannelPlay(stream, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelIsSliding(System.Int32,Un4seen.Bass.BASSAttribute)">
            <summary>
            Checks if an attribute (or any attribute) of a sample, stream, or MOD music is sliding.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM or HRECORD.</param>
            <param name="attrib">The attribute to check for sliding (one of the following, see <see cref="T:Un4seen.Bass.BASSAttribute"/> or 0 for any attribute):
            <list type="table">
            <item><term>BASS_ATTRIB_EAXMIX</term><description>EAX wet/dry mix.</description></item>
            <item><term>BASS_ATTRIB_FREQ</term><description>Sample rate.</description></item>
            <item><term>BASS_ATTRIB_PAN</term><description>Panning/balance position.</description></item>
            <item><term>BASS_ATTRIB_VOL</term><description>Volume level.</description></item>
            <item><term>BASS_ATTRIB_MUSIC_AMPLIFY</term><description>Amplification level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_BPM</term><description>BPM. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_PANSEP</term><description>Pan separation level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_PSCALER</term><description>Position scaler. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_SPEED</term><description>Speed. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_CHAN</term><description>A channel volume level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_GLOBAL</term><description>Global volume level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_INST</term><description>An instrument/sample volume level. (HMUSIC)</description></item>
            </list>
            <i>Other attributes may be supported by add-ons, see the documentation</i>
            </param>
            <returns>If the attribute (or any) is sliding, then <see langword="true"/> is returned, else <see langword="false"/> is returned.</returns>
            <example>
            Wait until a volume slideing has finished:
            <code lang="C#">
            while (Bass.BASS_ChannelIsSliding(channel, BASSAttribute.BASS_ATTRIB_VOL))
            {
              Thread.Sleep(20); // wait 20ms
            }
            </code>
            <code lang="VB">
            While Bass.BASS_ChannelIsSliding(channel, BASSAttribute.BASS_ATTRIB_VOL)
              Thread.Sleep(20) ' wait 20ms
            End While
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSlideAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single,System.Int32)">
            <summary>
            Slides a channel's attribute from its current value to a new value.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HSTREAM or HMUSIC, or HRECORD.</param>
            <param name="attrib">The attribute to slide the value of (one of the following, see <see cref="T:Un4seen.Bass.BASSAttribute"/>):
            <list type="table">
            <item><term>BASS_ATTRIB_FREQ</term><description>Sample rate.</description></item>
            <item><term>BASS_ATTRIB_PAN</term><description>Panning/balance position.</description></item>
            <item><term>BASS_ATTRIB_VOL</term><description>Volume level.</description></item>
            <item><term>BASS_ATTRIB_EAXMIX</term><description>EAX wet/dry mix.</description></item>
            <item><term>BASS_ATTRIB_MUSIC_AMPLIFY</term><description>Amplification level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_BPM</term><description>BPM. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_PANSEP</term><description>Pan separation level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_PSCALER</term><description>Position scaler. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_SPEED</term><description>Speed. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_CHAN</term><description>A channel volume level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_GLOBAL</term><description>Global volume level. (HMUSIC)</description></item>
            <item><term>BASS_ATTRIB_MUSIC_VOL_INST</term><description>An instrument/sample volume level. (HMUSIC)</description></item>
            <item><term>BASS_SLIDE_LOG</term><description>Flag: Slide the attribute's value logarthmically rather than linearly. This cannot be used when going from positive to negative or vice versa. An exception is when using a negative value with BASS_ATTRIB_VOL to fade-out and stop.</description></item>
            </list>
            <i>Other attributes may be supported by add-ons, see the documentation</i>
            </param>
            <param name="value">The new attribute value. See the attribute's documentation for details on the possible values.</param>
            <param name="time">The length of time (in milliseconds) that it should take for the attribute to reach the <paramref name="value"/>.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function is similar to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>, except that the attribute is ramped to the value over the specified period of time. 
            Another difference is that the value is not pre-checked. If it is invalid, the slide will simply end early.</para>
            <para>If an attribute is already sliding, then the old slide is stopped and replaced by the new one.</para>
            <para><see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsSliding(System.Int32,Un4seen.Bass.BASSAttribute)"/> can be used to check if an attribute is currently sliding. A BASS_SYNC_SLIDE sync can also be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered at the end of a slide. 
            The sync will not be triggered in the case of an existing slide being replaced by a new one.</para>
            <para>Attribute slides are unaffected by whether the channel is playing, paused or stopped. They carry on regardless.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ILLTYPE</term><description><paramref name="attrib"/> is not valid.</description></item>
            </list>
            <i>Some attributes may have additional error codes, see the documentation.</i>
            </para>
            </remarks>
            <example>
            Fadeout a channel's volume over a period of 1 second:
            <code lang="C#">
            Bass.BASS_ChannelSlideAttribute(channel, BASSAttribute.BASS_ATTRIB_VOL, 0f, 1000);
            </code>
            <code lang="VB">
            Bass.BASS_ChannelSlideAttribute(channel, BASSAttribute.BASS_ATTRIB_VOL, 0F, 1000)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSet3DAttributes(System.Int32,Un4seen.Bass.BASS3DMode,System.Single,System.Single,System.Int32,System.Int32,System.Int32)">
            <summary>
            Sets the 3D attributes of a sample, stream, or MOD music channel with 3D functionality.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM.</param>
            <param name="mode">The 3D processing mode... one of these flags, -1 = leave current (see <see cref="T:Un4seen.Bass.BASS3DMode"/>):
            <list type="table">
            <item><term>BASS_3DMODE_NORMAL</term><description>Normal 3D processing.</description></item>
            <item><term>BASS_3DMODE_RELATIVE</term><description>The channel's 3D position (position/velocity/orientation) is relative to the listener. When the listener's position/velocity/orientation is changed with <see cref="M:Un4seen.Bass.Bass.BASS_Set3DPosition(Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>, the channel's position relative to the listener does not change.</description></item>
            <item><term>BASS_3DMODE_OFF</term><description>Turn off 3D processing on the channel, the sound will be played in the centre.</description></item>
            </list>
            </param>
            <param name="min">The minimum distance. The channel's volume is at maximum when the listener is within this distance... less than 0.0 = leave current.</param>
            <param name="max">The maximum distance. The channel's volume stops decreasing when the listener is beyond this distance... less than 0.0 = leave current.</param>
            <param name="iangle">The angle of the inside projection cone in degrees... 0 (no cone) - 360 (sphere), -1 = leave current.</param>
            <param name="oangle">The angle of the outside projection cone in degrees... 0 (no cone) - 360 (sphere), -1 = leave current.</param>
            <param name="outvol">The delta-volume outside the outer projection cone... 0 (silent) - 100 (same as inside the cone), -1 = leave current.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The iangle and oangle parameters must both be set in a single call to this function (ie. you can't set one without the other). 
            The iangle and oangle angles decide how wide the sound is projected around the orientation angle. Within the inside angle the volume level is the channel volume, as set with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>. 
            Outside the outer angle, the volume changes according to the outvol value. Between the inner and outer angles, the volume gradually changes between the inner and outer volume levels. 
            If the inner and outer angles are 360 degrees, then the sound is transmitted equally in all directions.</para>
            <para>As with all 3D functions, use <see cref="M:Un4seen.Bass.Bass.BASS_Apply3D"/> to apply the changes made.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The channel does not have 3D functionality.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the attribute values is invalid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGet3DAttributes(System.Int32,Un4seen.Bass.BASS3DMode@,System.Single@,System.Single@,System.Int32@,System.Int32@,System.Int32@)">
            <summary>
            Retrieves the 3D attributes of a sample, stream, or MOD music channel with 3D functionality.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM.</param>
            <param name="mode">The 3D processing mode (see <see cref="T:Un4seen.Bass.BASS3DMode"/>).</param>
            <param name="min">The minimum distance.</param>
            <param name="max">The maximum distance.</param>
            <param name="iangle">The angle of the inside projection cone.</param>
            <param name="oangle">The angle of the outside projection cone.</param>
            <param name="outvol">The delta-volume outside the outer projection cone.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The iangle and oangle parameters must both be retrieved in a single call to this function (ie. you can't retrieve one without the other). See <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DAttributes(System.Int32,Un4seen.Bass.BASS3DMode,System.Single,System.Single,System.Int32,System.Int32,System.Int32)"/> for an explanation of the parameters.
            <para>This overload uses reference types, so you need to specify all parameters here and therefore can only get the parameters all together. See the other overloads which allows you to retrieve only certain values.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The channel does not have 3D functionality.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS3DMode mode = BASS3DMode.BASS_3DMODE_NORMAL;
            float min = 0f;
            float max = 0f;
            int iangle = 0;
            int oangle = 0;
            int outvol = 0;
            bool ok = Bass.BASS_ChannelGet3DAttributes(handle, ref mode, ref min, ref max, ref iangle, ref oangle, ref outvol);
            </code>
            <code lang="VB">
            Dim mode As BASS3DMode = BASS3DMode.BASS_3DMODE_NORMAL
            Dim min As Single = 0F
            Dim max As Single = 0F
            Dim iangle As Integer = 0
            Dim oangle As Integer = 0
            Dim outvol As Integer = 0
            Dim ok As Boolean = Bass.BASS_ChannelGet3DAttributes(handle, mode, min, max, iangle, oangle, outvol)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGet3DAttributes(System.Int32,System.Object,System.Object,System.Object,System.Object,System.Object,System.Object)">
            <summary>
            Retrieves the 3D attributes of a sample, stream, or MOD music channel with 3D functionality.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM.</param>
            <param name="mode">The 3D processing mode (see <see cref="T:Un4seen.Bass.BASS3DMode"/>)... <see langword="null"/> = don't retrieve it. (int)</param>
            <param name="min">The minimum distance... <see langword="null"/> = don't retrieve it. (float)</param>
            <param name="max">The maximum distance... <see langword="null"/> = don't retrieve it. (float)</param>
            <param name="iangle">The angle of the inside projection cone... <see langword="null"/> = don't retrieve it. (int)</param>
            <param name="oangle">The angle of the outside projection cone... <see langword="null"/> = don't retrieve it. (int)</param>
            <param name="outvol">The delta-volume outside the outer projection cone... <see langword="null"/> = don't retrieve it. (int)</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>The iangle and oangle parameters must both be retrieved in a single call to this function (ie. you can't retrieve one without the other). See <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DAttributes(System.Int32,Un4seen.Bass.BASS3DMode,System.Single,System.Single,System.Int32,System.Int32,System.Int32)"/> for an explanation of the parameters.
            <para>This overload uses native object, so you can specify <see langword="null"/> for some or all parameters in order to not retrieve them. However, the return values of these parameters must be casted back to it's original type.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The channel does not have 3D functionality.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Only get the delta-volume outside the outer projection cone:
            <code lang="C#">
            object outvol = 0;
            bool ok = Bass.BASS_ChannelGet3DAttributes(handle, null, null, null, null, null, outvol);
            // cast the outvol back it it's normal value type (int)
            int deltaVol = (int)outvol;
            </code>
            <code lang="VB">
            Dim outvol As BASobject = 0
            Dim ok As Boolean = Bass.BASS_ChannelGet3DAttributes(handle, Nothing, Nothing, Nothing, Nothing, Nothing, outvol)
            ' cast the outvol back it it's normal value type (int)
            Dim deltaVol As Integer = CInt(outvol)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSet3DPosition(System.Int32,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)">
            <summary>
            Sets the 3D position of a sample, stream, or MOD music channel with 3D functionality.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM.</param>
            <param name="pos">Position of the sound... <see langword="null"/> = leave current.</param>
            <param name="orient">Orientation of the sound... <see langword="null"/> = leave current.</param>
            <param name="vel">Velocity of the sound... <see langword="null"/> = leave current. This is only used to calculate the doppler effect, and has no effect on the sound's position.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>As with all 3D functions, <see cref="M:Un4seen.Bass.Bass.BASS_Apply3D"/> must be called to apply the changes made.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The channel does not have 3D functionality.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGet3DPosition(System.Int32,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)">
            <summary>
            Retrieves the 3D position of a sample, stream, or MOD music channel with 3D functionality.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM.</param>
            <param name="pos">Position of the sound... <see langword="null"/> = don't retrieve it.</param>
            <param name="orient">Orientation of the sound... <see langword="null"/> = don't retrieve it.</param>
            <param name="vel">Velocity of the sound... <see langword="null"/> = don't retrieve it.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NO3D</term><description>The channel does not have 3D functionality.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_3DVECTOR pos = new BASS_3DVECTOR();
            BASS_3DVECTOR orient = new BASS_3DVECTOR();
            BASS_3DVECTOR vel = new BASS_3DVECTOR();
            if (Bass.BASS_ChannelGet3DPosition(stream, pos, orient, vel))
            {
              Console.WriteLine("{0} : {1} : {2}", pos, orient, vel);
            }
            </code>
            <code lang="VB">
            Dim pos As New BASS_3DVECTOR()
            Dim orient As New BASS_3DVECTOR()
            Dim vel As New BASS_3DVECTOR()
            If Bass.BASS_ChannelGet3DPosition(stream, pos, orient, vel) Then
              Console.WriteLine("{0} : {1} : {2}", pos, orient, vel)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)">
            <summary>
            Sets the playback position of a sample, MOD music, or stream.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HSTREAM or HMUSIC.</param>
            <param name="pos">The position, in units determined by the <paramref name="mode"/>.</param>
            <param name="mode">How to set the position. One of the following (see <see cref="T:Un4seen.Bass.BASSMode"/>), with optional flags:
            <list type="table">
            <item><term>BASS_POS_BYTE</term><description>The position is in bytes, which will be rounded down to the nearest sample boundary.</description></item>
            <item><term>BASS_POS_MUSIC_ORDER</term><description>The position is in orders and rows... use <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/>. (HMUSIC only).</description></item>
            <item><term>BASS_POS_OGG</term><description>The position is a bitstream number in an OGG file... 0 = first.</description></item>
            <item><term>BASS_POS_END</term><description>The position is in bytes and is where the channel will end... 0 = normal end position. This will have no effect if it is beyond the channel's normal end position. If the channel is already at/beyond the position then it will end at its current position.</description></item>
            <item><term>BASS_POS_LOOP</term><description>The position is in bytes and is where looping will start from (when looping is enabled). If this is at/beyond the end then the default loop position of 0 will be used instead.</description></item>
            <item><term>BASS_POS_DECODETO</term><description>Flag: Decode/render up to the position rather than seeking to it. This is useful for streams that are unseekable or that have inexact seeking, but it is generally slower than normal seeking and the requested position cannot be behind the current decoding position. This flag can only be used with the BASS_POS_BYTE mode.</description></item>
            <item><term>BASS_POS_FLUSH</term><description>Flag: Flush all output buffers (including FX) so that no remnant of the old position is heard after seeking. This is automatic on normal playback channels (not decoding channels) outside of a 'mixtime' <see cref="T:Un4seen.Bass.SYNCPROC"/>.</description></item>
            <item><term>BASS_POS_INEXACT</term><description>Flag: Allow inexact seeking. For speed, seeking may stop at the beginning of a block rather than partially processing the block to reach the requested position.</description></item>
            <item><term>BASS_POS_RELATIVE</term><description>Flag: The requested position is relative to the current position. pos is treated as signed in this case and can be negative.</description></item>
            <item><term>BASS_POS_RESET</term><description>Flag: Reset user file buffers. This allows a user file stream with the BASS_STREAM_BLOCK flag set to be reset, so that it is ready to process new data. This flag can only be used with the BASS_POS_BYTE mode, and pos must be 0.</description></item>
            <item><term>BASS_POS_RELATIVE</term><description>Flag: Allow inexact seeking. For speed, seeking may stop at the beginning of a block rather than partially processing the block to reach the requested position.</description></item>
            <item><term>BASS_POS_RESET</term><description>Flag: Reset user file buffers. This allows a user file stream with the BASS_STREAM_BLOCK flag set to be reset, so that it is ready to process new data. This flag can only be used with the BASS_POS_BYTE mode, and pos must be 0.</description></item>
            <item><term>BASS_POS_SCAN</term><description>Flag: Scan the file to build a seek table up to the position, if it has not already been scanned. Scanning will continue from where it left off previously rather than restarting from the beginning of the file each time. This flag only applies to MP3/MP2/MP1 files and will be ignored with other file formats.</description></item>
            <item><term>BASS_MUSIC_POSRESET</term><description>Flag: Stop all notes. This flag is applied automatically if it has been set on the channel, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>. (HMUSIC).</description></item>
            <item><term>BASS_MUSIC_POSRESETEX</term><description>Flag: Stop all notes and reset bpm/etc. This flag is applied automatically if it has been set on the channel, eg. via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>. (HMUSIC).</description></item>
            </list>
            <i>Other modes and flags may be supported by add-ons, see the documentation.</i>
            </param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Setting the position of a MOD music in bytes (other than 0) requires that the BASS_MUSIC_PRESCAN flag was used in the <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> call. When setting the position in orders/rows, the channel's byte position (as reported by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>) is reset to 0. 
            This is because it's not possible to get the byte position of an order/row position - it's possible that a position may never be played in the normal cause of events, or it may be played multiple times.</para>
            <para>When changing the position of a MOD music, and the BASS_MUSIC_POSRESET flag is active on the channel, all notes that were playing before the position changed will be stopped. Otherwise, the notes will continue playing until they are stopped in the MOD music. 
            When setting the position in bytes, the BPM, "speed" and "global volume" are updated to what they would normally be at the new position. Otherwise they are left as they were prior to the postion change, unless the seek position is 0 (the start), in which case they are also reset to the starting values (when using the BASS_MUSIC_POSRESET flag). 
            When the BASS_MUSIC_POSRESETEX flag is active, the BPM, speed and global volume are reset with every seek.</para>
            <para>For MP3/MP2/MP1 streams, unless the file is scanned via the BASS_POS_SCAN flag or the BASS_STREAM_PRESCAN flag at stream creation, seeking will be approximate but generally still quite accurate. 
            Besides scanning, exact seeking can also be achieved with the BASS_POS_DECODETO flag.</para>
            <para>Seeking in internet file (and "buffered" user file) streams is possible once the download has reached the requested position, so long as the file is not being streamed in blocks (BASS_STREAM_BLOCK flag).</para>
            <para>The BASS_POS_RESET flag can be used to reset/flush a buffered user file stream, so that new data can be processed, but it may not be supported by some decoders. When it is not supported, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> can be used again instead to create a new stream for the new data.</para>
            <para>User streams (created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/>) are not seekable, but it is possible to reset a user stream (including its buffer contents) by setting its position to byte 0.</para>
            <para>The BASS_POS_DECODETO flag can be used to seek forwards in streams that are not normally seekable, like custom streams or internet streams that are using the BASS_STREAM_BLOCK flag, but it will only go as far as what is currently available; it will not wait for more data to be downloaded, for example. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> can be used to confirm what the new position actually is.</para>
            <para>In some cases, particularly when the BASS_POS_INEXACT flag is used, the new position may not be what was requested. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> can be used to confirm what the new position actually is.</para>
            <para>The BASS_POS_SCAN flag works the same way as the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> BASS_STREAM_PRESCAN flag, and can be used to delay the scanning until after the stream has been created. When a position beyond the end is requested, the call will fail (BASS_ERROR_POSITION error code) but the seek table and exact length will have been scanned. 
            When a file has been scanned, all seeking (even without the BASS_POS_SCAN flag) within the scanned part of it will use the scanned infomation.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTFILE</term><description>The stream is not a file stream.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description>The requested position is invalid, eg. beyond the end.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The download has not yet reached the requested position.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set the position of a stream channel to 10sec. and 200ms:
            <code lang="C#">
            Bass.BASS_ChannelSetPosition(stream, Bass.BASS_ChannelSeconds2Bytes(stream, 10.20), BASSMode.BASS_POS_BYTE);
            </code>
            <code lang="VB">
            Bass.BASS_ChannelSetPosition(stream, Bass.BASS_ChannelSeconds2Bytes(stream, 10.20), BASSMode.BASS_POS_BYTE)
            </code>
            Set the position of a MOD music to row 20 of order 10:
            <code lang="C#">
            Bass.BASS_ChannelSetPosition(music, Utils.MakeMusicPos(10,20), BASSMode.BASS_POS_MUSIC_ORDER );
            </code>
            <code lang="VB">
            Bass.BASS_ChannelSetPosition(music, Utils.MakeMusicPos(10,20), BASSMode.BASS_POS_MUSIC_ORDER )
            </code>
            Start playback of a MOD music from the beginning of the last order:
            <code lang="C#">
            // get number of orders
            int len = (int)Bass.BASS_ChannelGetLength(music, BASSMode.BASS_POS_MUSIC_ORDER);
            // seek to last order
            Bass.BASS_ChannelSetPosition(music, Utils.MakeMusicPos(len-1, 0), BASSMode.BASS_POS_MUSIC_ORDER);
            Bass.BASS_ChannelPlay(music, false); // play
            </code>
            <code lang="VB">
            ' get number of orders
            Dim len As Integer = CInt(Bass.BASS_ChannelGetLength(music, BASSMode.BASS_POS_MUSIC_ORDER))
            ' seek to last order
            Bass.BASS_ChannelSetPosition(music, Utils.MakeMusicPos(len-1, 0), BASSMode.BASS_POS_MUSIC_ORDER)
            Bass.BASS_ChannelPlay(music, False) ' play
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64)">
            <summary>
            Sets the playback position in bytes of a sample, MOD music, or stream.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HSTREAM or HMUSIC.</param>
            <param name="pos">The position, in bytes.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Setting the position of a MOD music in bytes requires that the BASS_MUSIC_PRESCAN flag was used in the <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> call. When setting the position in orders/rows, the channel's byte position (as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>) is reset to 0. 
            This is because it's not possible to get the byte position of an order/row position - it's possible that a position may never be played in the normal cause of events, or it may be played multiple times.</para>
            <para>When changing the position of a MOD music, and the BASS_MUSIC_POSRESET flag is active on the channel, all notes that were playing before the position changed will be stopped. Otherwise, the notes will continue playing until they are stopped in the MOD music. 
            When setting the position in bytes, the BPM, "speed" and "global volume" are updated to what they would normally be at the new position. Otherwise they are left as they were prior to the postion change, unless the seek position is 0 (the start), in which case they are also reset to the starting values (when using the BASS_MUSIC_POSRESET flag). 
            When the BASS_MUSIC_POSRESETEX flag is active, the BPM, speed and global volume are reset with every seek.</para>
            <para>When setting the position of a file stream, the position is automatically rounded down to the nearest sample. For MP3/MP2/MP1 streams, if the BASS_STREAM_PRESCAN flag was used when <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> was called to create the stream, then the seeking will be accurate to the exact requested byte. 
            Otherwise it will be an approximation, which is generally still very accurate.
            Note: BASS_STREAM_PRESCAN is ONLY needed for files with a VBR, files with a CBR are always accurate.
            </para>
            <para>Seeking in internet file (and "buffered" user file) streams is possible once the download has reached the requested position, so long as the file is not being streamed in blocks (BASS_STREAM_BLOCK flag).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTFILE</term><description>The stream is not a file stream.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description>The requested position is invalid, eg. beyond the end.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The download has not yet reached the requested position.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set the position of a stream channel to 10sec. and 200ms:
            <code lang="C#">
            Bass.BASS_ChannelSetPosition(stream, Bass.BASS_ChannelSeconds2Bytes(stream, 10.20));
            </code>
            <code lang="VB">
            Bass.BASS_ChannelSetPosition(stream, Bass.BASS_ChannelSeconds2Bytes(stream, 10.20))
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Double)">
            <summary>
            Sets the playback position of a sample or stream to the given seconds value.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL or HSTREAM.</param>
            <param name="seconds">The seconds value to set the position to (milliseconds are represented in the fraction part).</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This is just an overload which uses <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSeconds2Bytes(System.Int32,System.Double)"/> internally.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTFILE</term><description>The stream is not a file stream.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description>The requested position is invalid, eg. beyond the end.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The download has not yet reached the requested position.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int32,System.Int32)">
            <summary>
            Sets the playback position in order.row of a MOD music.
            </summary>
            <param name="handle">The channel handle... HMUSIC.</param>
            <param name="order">The order position.</param>
            <param name="row">The row position.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This is just an overload which uses <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> and <see cref="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)"/> internally.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTFILE</term><description>The stream is not a file stream.</description></item>
            <item><term>BASS_ERROR_POSITION</term><description>The requested position is invalid, eg. beyond the end.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The download has not yet reached the requested position.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)">
            <summary>
            Retrieves the playback position of a sample, stream, or MOD music. Can also be used with a recording channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="mode">How to retrieve the position. One of the following (see <see cref="T:Un4seen.Bass.BASSMode"/>):
            <list type="table">
            <item><term>BASS_POS_BYTE</term><description>Get the position in bytes.</description></item>
            <item><term>BASS_POS_MUSIC_ORDER</term><description>Get the position in orders and rows... LoWord = order, HiWord = row * scaler (<see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_PSCALER"/>). (HMUSIC only).</description></item>
            <item><term>BASS_POS_DECODE</term><description>Flag: Get the decoding/rendering position, which may be ahead of the playback position due to buffering. This flag is unnecessary with decoding channels because the decoding position will always be given for them anyway, as they do not have playback buffers.</description></item>
            </list>
            <i>Other modes may be supported by add-ons, see the documentation.</i>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. If successful, the position is returned.</returns>
            <remarks>With MOD music you might use the <see cref="M:Un4seen.Bass.Utils.LowWord32(System.Int32)"/> and <see cref="M:Un4seen.Bass.Utils.HighWord32(System.Int32)"/> methods to retrieve the order resp. the row values.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested position is not available.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            long pos = Bass.BASS_ChannelGetPosition(stream, BASSMode.BASS_POS_BYTE);
            </code>
            <code lang="VB">
            Dim pos As Long = Bass.BASS_ChannelGetPosition(stream, BASSMode.BASS_POS_BYTE)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32)">
            <summary>
            Retrieves the playback position in bytes of a sample, stream, or MOD music. Can also be used with a recording channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. If successful, the position in bytes is returned.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            long pos = Bass.BASS_ChannelGetPosition(stream);
            </code>
            <code lang="VB">
            Dim pos As Long = Bass.BASS_ChannelGetPosition(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)">
            <summary>
            Retrieves the level (peak amplitude) of a sample, stream, MOD music or recording channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.
            <para>If successful, the level of the left channel is returned in the low word (low 16-bits, use <see cref="M:Un4seen.Bass.Utils.LowWord32(System.Int32)"/>), and the level of the right channel is returned in the high word (high 16-bits, use <see cref="M:Un4seen.Bass.Utils.HighWord32(System.Int32)"/>). If the channel is mono, then the low word is duplicated in the high word. 
            The level ranges linearly from 0 (silent) to 32768 (max). 0 will be returned when a channel is stalled.</para>
            </returns>
            <remarks>
            <para>This function measures the level of the channel's sample data, not the level of the channel in the final output mix, 
            so the channel's volume and panning/balance (as set with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>, BASS_ATTRIB_VOL or BASS_ATTRIB_PAN) does not affect it.
            The effect of any DSP/FX set on the channel is present in the measurement, except for DX8 effects when using the "With FX flag" <a href="../Overview.html#DX8DMOEffects">DX8 effect implementation</a>.</para>
            <para>For channels that are more than stereo, the left level will include all left channels (eg. front-left, rear-left, center), and the right will include all right (front-right, rear-right, LFE).
            If there are an odd number of channels then the left and right levels will include all channels. If the level of each individual channel is required, that is available from the other overload(s).</para>
            <para>20ms of data is inspected to calculate the level. When used with a decoding channel, that means 20ms of data needs to be decoded from the channel in order to calculate the level, and that data is then gone, eg. it is not available to a subsequent <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> call.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOPLAY</term><description>The channel is not playing.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The decoding channel has reached the end.</description></item>
            <item><term>BASS_ERROR_BUFLOST</term><description>Should not happen... check that a valid window handle was used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the left and right levels of a stereo channel:
            <code lang="C#">
            int level = Bass.BASS_ChannelGetLevel(channel);
            int left = Utils.LowWord32(level); // the left level
            int right = Utils.HighWord32(level); // the right level
            </code>
            <code lang="VB">
            Dim level As Integer = Bass.BASS_ChannelGetLevel(channel)
            Dim left As Integer = Utils.LowWord32(level) ' the left level
            Dim right As Integer = Utils.HighWord32(level) ' the right level
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32,System.Single[],System.Single,Un4seen.Bass.BASSLevel)">
            <summary>
            Retrieves the level (peak amplitude) of a sample, stream, MOD music or recording channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="levels">The array in which the levels are to be returned.</param>
            <param name="length">How much data (in seconds) to look at to get the level.</param>
            <param name="flags">What levels to retrieve. One of the following (see <see cref="T:Un4seen.Bass.BASSLevel"/>):
            <list type="table">
            <item><term>BASS_LEVEL_ALL</term><description>Retrieves a separate level for each channel.</description></item>
            <item><term>BASS_LEVEL_MONO</term><description>Retrieve a single mono level.</description></item>
            <item><term>BASS_LEVEL_STEREO</term><description>Get a stereo level. The left level will be from the even channels, and the right level will be from the odd channels. If there are an odd number of channels then the left and right levels will both include all channels.</description></item>
            <item><term>BASS_LEVEL_RMS</term><description>Flag: Get the RMS level. Otherwise the peak level.</description></item>
            <item><term>BASS_LEVEL_VOLPAN</term><description>Apply the current BASS_ATTRIB_VOL and BASS_ATTRIB_PAN values to the level reading.</description></item>
            <item><term>BASS_LEVEL_NOREMOVE</term><description>Do not remove the inspected data from a (recording) channel's buffer. This is automatic if the recording channel is using a <see cref="T:Un4seen.Bass.RECORDPROC"/> callback function. This flag is ignored on other channel types.</description></item>
            </list>
            </param>
            <returns>On success <see langword="true"/> is returned - else <see langword="false"/>, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.
            <para>If successful, the requested levels are returned in the <paramref name="levels"/> array.</para>
            </returns>
            <remarks>
            This function operates in the same way as <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> but has greater flexibility on how the level is measured. 
            The levels are not clipped, so may exceed +/-1.0 on floating-point channels.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOPLAY</term><description>The channel is not playing.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The decoding channel has reached the end.</description></item>
            <item><term>BASS_ERROR_BUFLOST</term><description>Should not happen... check that a valid window handle was used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetLevels(System.Int32,System.Single,Un4seen.Bass.BASSLevel)">
            <summary>
            Retrieves the level (peak amplitude) of a sample, stream, MOD music or recording channel.
            </summary>
            <param name="handle">The channel handle... a HCHANNEL, HMUSIC, HSTREAM, or HRECORD.</param>
            <param name="length">How much data (in seconds) to look at to get the level.</param>
            <param name="flags">What levels to retrieve. One of the following (see <see cref="T:Un4seen.Bass.BASSLevel"/>):
            <list type="table">
            <item><term>BASS_LEVEL_ALL</term><description>Retrieves a separate level for each channel.</description></item>
            <item><term>BASS_LEVEL_MONO</term><description>Retrieve a single mono level.</description></item>
            <item><term>BASS_LEVEL_STEREO</term><description>Get a stereo level. The left level will be from the even channels, and the right level will be from the odd channels. If there are an odd number of channels then the left and right levels will both include all channels.</description></item>
            <item><term>BASS_LEVEL_RMS</term><description>Flag: Get the RMS level. Otherwise the peak level.</description></item>
            <item><term>BASS_LEVEL_VOLPAN</term><description>Apply the current BASS_ATTRIB_VOL and BASS_ATTRIB_PAN values to the level reading.</description></item>
            <item><term>BASS_LEVEL_NOREMOVE</term><description>Do not remove the inspected data from a (recording) channel's buffer. This is automatic if the recording channel is using a <see cref="T:Un4seen.Bass.RECORDPROC"/> callback function. This flag is ignored on other channel types.</description></item>
            </list>
            </param>
            <returns>On success the array of levels is returned - else <see langword="null"/> is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.
            </returns>
            <remarks>
            This function operates in the same way as <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> but has greater flexibility on how the level is measured. 
            The levels are not clipped, so may exceed +/-1.0 on floating-point channels.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_NOPLAY</term><description>The channel is not playing.</description></item>
            <item><term>BASS_ERROR_ENDED</term><description>The decoding channel has reached the end.</description></item>
            <item><term>BASS_ERROR_BUFLOST</term><description>Should not happen... check that a valid window handle was used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelRemoveSync(System.Int32,System.Int32)">
            <summary>
            Removes a synchronizer from a MOD music or stream channel.
            </summary>
            <param name="handle">The channel handle... a HMUSIC, HSTREAM or HRECORD.</param>
            <param name="sync">Handle of the synchronizer to remove (return value of a previous <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> call).</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>At least one of <paramref name="handle"/> and <paramref name="sync"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelRemoveDSP(System.Int32,System.Int32)">
            <summary>
            Removes a DSP function from a stream, MOD music, or recording channel.
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="dsp">Handle of the DSP function to remove from the channel (return value of a previous <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/> call).</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>At least one of <paramref name="handle"/> and <paramref name="dsp"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelRemoveFX(System.Int32,System.Int32)">
            <summary>
            Removes an effect on a stream, MOD music, or recording channel.
            </summary>
            <param name="handle">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <param name="fx">Handle of the effect to remove from the channel (return value of a previous <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> call).</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Depending on the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementation</a> being used by the channel, the channel may have to be stopped before removing a DX8 effect on it.
            If necessary, that is done automatically and the channel is resumed afterwards.
            <para><see cref="M:Un4seen.Bass.Bass.BASS_ChannelRemoveDSP(System.Int32,System.Int32)"/> can also be used to remove effects.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>At least one of <paramref name="handle"/> and <paramref name="fx"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelSetLink(System.Int32,System.Int32)">
            <summary>
            Links two MOD music or stream channels together.
            </summary>
            <param name="handle">The channel handle... a HMUSIC or HSTREAM.</param>
            <param name="chan">The handle of the channel to have linked with it... a HMUSIC or HSTREAM.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Linked channels are started/stopped/paused/resumed together. Links are one-way, for example, channel <paramref name="chan"/> will be started by channel <paramref name="handle"/>, but not vice versa unless another link has been set in that direction.</para>
            <para>If a linked channel has reached the end, it will not be restarted when a channel it is linked to is started. If you want a linked channel to be restarted, you need to have resetted it's position using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> beforehand.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description>At least one of <paramref name="handle"/> and <paramref name="chan"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_DECODE</term><description>At least one of <paramref name="handle"/> and <paramref name="chan"/> is a "decoding channel", so can't be linked.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description><paramref name="chan"/> is already linked to <paramref name="handle"/>.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            <para><b>Platform-specific</b></para>
            <para>Except for on Windows, linked channels on the same device are guaranteed to start playing simultaneously. On Windows, it is possible for there to be a slight gap between them, but it will generally be shorter (and never longer) than starting them individually.</para>
            </remarks>
            <example>
            Link 2 streams and play them together:
            <code lang="C#">
            // link stream2 to stream1
            Bass.BASS_ChannelSetLink(stream1, stream2);
            // start both streams together
            Bass.BASS_ChannelPlay(stream1, false);
            </code>
            <code lang="VB">
            ' link stream2 to stream1
            Bass.BASS_ChannelSetLink(stream1, stream2)
            ' start both streams together
            Bass.BASS_ChannelPlay(stream1, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelRemoveLink(System.Int32,System.Int32)">
            <summary>
            Removes a links between two MOD music or stream channels.
            </summary>
            <param name="handle">The channel handle... a HMUSIC or HSTREAM.</param>
            <param name="chan">The handle of the channel to have unlinked with it... a HMUSIC or HSTREAM.</param>
            <returns>If succesful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not a valid channel.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>Either <paramref name="chan"/> is not a valid channel, or it is already not linked to <paramref name="handle"/>.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)">
            <summary>
            Retrieves the requested tags/headers from a channel, if they are available.
            </summary>
            <param name="handle">The channel handle...a HMUSIC or HSTREAM.</param>
            <param name="tags">The tags/headers wanted... one of the following (see <see cref="T:Un4seen.Bass.BASSTag"/>):
            <list type="table">
            <item><term>BASS_TAG_AM_MIME</term><description>Android media codec MIME type. A single string is returned.</description></item>
            <item><term>BASS_TAG_AM_NAME</term><description>Android media codec name. A single string is returned. This in only available on Android 4.3 and above.</description></item>
            <item><term>BASS_TAG_APE</term><description>APE (v1 or v2) tags. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null. Each string is in the form of "key=value", or "key=value1/value2/..." if there are multiple values.</description></item>
            <item><term>BASS_TAG_APE_BINARY</term><description>+ tag number (0=first). APEv2 binary tag. A pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_APE_BINARY"/> structure is returned.</description></item>
            <item><term>BASS_TAG_CA_CODEC</term><description>CoreAudio codec information. A pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_CACODEC"/> structure is returned.</description></item>
            <item><term>BASS_TAG_HTTP</term><description>HTTP headers, only available when streaming from a HTTP server. A pointer to a series of null-terminated strings is returned, the final string ending with a double null.</description></item>
            <item><term>BASS_TAG_ICY</term><description>ICY (Shoutcast) tags. A pointer to a series of null-terminated strings is returned, the final string ending with a double null.</description></item>
            <item><term>BASS_TAG_ID3</term><description>ID3v1 tags. A pointer to a 128 byte block is returned. See <a href="http://www.id3.org/id3v1.html">www.id3.org</a> for details of the block's structure.</description></item>
            <item><term>BASS_TAG_ID3V2</term><description>ID3v2 tags. A pointer to a variable length block is returned. See <a href="http://www.id3.org">www.id3.org</a> for details of the block's structure. ID3v2 tags are supported at both the start and end of the file.</description></item>
            <item><term>BASS_TAG_ID3V2_2</term><description>A second ID3v2 tag block (if one is present after the first block).</description></item>
            <item><term>BASS_TAG_LOCATION</term><description>The final URL after HTTP redirection.</description></item>
            <item><term>BASS_TAG_LYRICS3</term><description>Lyrics3v2 tag. A single string is returned, containing the Lyrics3v2 information. See <a href="http://www.id3.org/Lyrics3v2">www.id3.org/Lyrics3v2</a> for details of its format.</description></item>
            <item><term>BASS_TAG_META</term><description>Shoutcast metadata. A single null-terminated string containing the current stream title and url (usually omitted). The format of the string is: StreamTitle='xxx';StreamUrl='xxx';</description></item>
            <item><term>BASS_TAG_MF</term><description>Media Foundation metadata. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</description></item>
            <item><term>BASS_TAG_MP4</term><description>MP4/iTunes metadata. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</description></item>
            <item><term>BASS_TAG_MUSIC_AUTH</term><description>MOD music author. Only available in files created with the OpenMPT tracker.</description></item>
            <item><term>BASS_TAG_MUSIC_CHAN</term><description>+ channel number (0=first). MOD channel name. Only available in files created with the OpenMPT tracker.</description></item>
            <item><term>BASS_TAG_MUSIC_INST</term><description>+ instrument number (0=first). MOD instrument name (a single null-terminated ANSI String).</description></item>
            <item><term>BASS_TAG_MUSIC_MESSAGE</term><description>MOD message text (a single null-terminated ANSI String).</description></item>
            <item><term>BASS_TAG_MUSIC_NAME</term><description>MOD music title (a single null-terminated ANSI String).</description></item>
            <item><term>BASS_TAG_MUSIC_ORDERS</term><description>MOD music order list. A pointer to a byte array is returned, with each byte being the pattern number played at that order position. Pattern number 254 is "+++" (skip order) and 255 is "---" (end song).</description></item>
            <item><term>BASS_TAG_MUSIC_SAMPLE</term><description>+ sample number (0=first). MOD sample name (a single null-terminated ANSI String).</description></item>
            <item><term>BASS_TAG_OGG</term><description>OGG comments, only available when streaming an OGG file. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</description></item>
            <item><term>BASS_TAG_RIFF_BEXT</term><description>RIFF/BWF "bext" chunk tags. A pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_BEXT"/> structure is returned.</description></item>
            <item><term>BASS_TAG_RIFF_CART</term><description>RIFF/BWF "cart" chunk tags. A pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_CART"/> structure is returned.</description></item>
            <item><term>BASS_TAG_RIFF_CUE</term><description>RIFF/CUE "cue" chunk tags. A pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_CUE"/> structure is returned.</description></item>
            <item><term>BASS_TAG_RIFF_DISP</term><description>RIFF/WAVE 'DISP' chunk text (CF_TEXT) tag. A single string is returned.</description></item>
            <item><term>BASS_TAG_RIFF_INFO</term><description>RIFF/WAVE 'INFO' tags. A pointer to a series of null-terminated ANSI strings is returned, the final string ending with a double null. The tags are in the form of 'XXXX=text', where 'XXXX' is the chunk ID.</description></item>
            <item><term>BASS_TAG_RIFF_SMPL</term><description>RIFF/SMPL "smpl" chunk tags. A pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_SMPL"/> structure is returned.</description></item>
            <item><term>BASS_TAG_VENDOR</term><description>OGG encoder. A single UTF-8 string is returned.</description></item>
            <item><term>BASS_TAG_WAVEFORMAT</term><description>WAVE 'fmt' chunk contents. A pointer to a WAVEFORMATEX structure is returned. As well as WAVE files, this is also provided by Media Foundation codecs.</description></item>
            <item><term>BASS_TAG_WMA</term><description>WMA tags. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</description></item>
            </list>
            Other tags may be supported by Add-Ons, see the documentation.
            </param>
            <returns>If succesful, a pointer to the data of the tags/headers is returned, else <see cref="F:System.IntPtr.Zero"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Some tags (eg. ID3v1) are located at the end of the file, so when streaming a file from the internet, the tags will not be available until the download is complete. A BASS_SYNC_DOWNLOAD sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be informed of when the download is complete. 
            A BASS_SYNC_META sync can be used to be informed of new Shoutcast metadata, and a BASS_SYNC_OGG_CHANGE sync for when a new logical bitstream begins in a chained OGG stream, which generally brings new OGG tags.
            <para>In a chained OGG file containing multiple bitstreams, each bitstream will have its own tags. To get the tags from a particular one, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> can be first used to seek to it.</para>
            <para>When a Media Foundation codec is in use, the BASS_TAG_WAVEFORMAT tag can be used to find out what the source format is, eg. via the WAVEFORMATEX structure's wFormatTag member. Some typical wFormatTag examples are: 0x0161 = WMA, 0x0162 = WMA pro, 0x0163 = WMA lossless, 0x1610 = AAC.</para>
            <para>MP4 metadata can include a "Genre" tag that is either text or a number. When a number, it is an ID3v1 genre list index +1, eg. 1 = Blues, 2 = Classic Rock, etc. The full list can be found at id3.org.</para>
            <para>The returned tag's memory is owned by BASS (or an add-on) and should not be modified. It should also not be accessed after the channel has been freed. If longer-term access is needed, a copy should be made.</para>
            <para>You might also use one of these overloads to directly get specific tags:
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsBWF(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsCA(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsID3V1(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsID3V2(System.Int32,System.IntPtr)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsAPE(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsAPEBinary(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsAPEPictures(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsWMA(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsMP4(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsMF(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsWAVEFORMAT(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsFLACPictures(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsFLACCuesheet(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsOGG(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsDSDArtist(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsDSDTitle(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsDSDComments(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsHTTP(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsICY(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsRIFF(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsMETA(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagLyrics3v2(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetMusicName(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetMusicSample(System.Int32,System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetMusicInstrument(System.Int32,System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetMusicMessage(System.Int32)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetMidiTrackText(System.Int32,System.Int32)"/>.
            </para>
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Getting OGG Tags:
            <code lang="C#">
            int channel = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, BASSFlag.BASS_SAMPLE_FLOAT);
            IntPtr tag = Bass.BASS_ChannelGetTags(channel, BASSTag.BASS_TAG_OGG);
            string[] tags = Utils.IntPtrToArrayNullTermUtf8(tag);
            if (tags != null)
            {
              foreach (string tag in tags)
                Console.Writeln("Tag: {0}\n", tag);
            }
            </code>
            <code lang="VB">
            Dim channel As Integer = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, BASSFlag.BASS_SAMPLE_FLOAT)
            Dim tag As IntPtr = Bass.BASS_ChannelGetTags(channel, BASSTag.BASS_TAG_OGG)
            Dim tags As String() = Utils.IntPtrToArrayNullTermUtf8(tag)
            If Not (tags Is Nothing) Then
              Dim tag As String
              For Each tag In  tags
                Console.Writeln("Tag: {0}" + ControlChars.Lf, tag)
              Next tag
            End If
            </code>
            Getting MOD Music Instruments:
            <code lang="C#">
            IntPtr p = BASS_ChannelGetTags(handle, (BASSTag)(BASSTag.BASS_TAG_MUSIC_INST + instrument));
            if (p != IntPtr.Zero)
              string instr = Utils.IntPtrAsStringAnsi(p);
            </code>
            <code lang="VB">
            Dim p As IntPtr = BASS_ChannelGetTags(handle, CType(BASSTag.BASS_TAG_MUSIC_INST + instrument, BASSTag))
            If p &lt;&gt; IntPtr.Zero Then
              Dim instr As String = Utils.IntPtrAsStringAnsi(p)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsArrayNullTermAnsi(System.Int32,Un4seen.Bass.BASSTag)">
            <summary>
            Retrieves the header tags from a channel, if they are available.
            <para>NOTE: This method evaluates the header as a series/array of null-terminated Ansi strings.</para>
            <para>Might be used e.g. with: RIFF_INFO, ICY and HTTP.</para>
            </summary>
            <param name="handle">The stream's handle.</param>
            <param name="format">The type of tags/headers wanted... one of the following (see <see cref="T:Un4seen.Bass.BASSTag"/>):
            <list type="table">
            <item><term>BASS_TAG_HTTP</term><description>HTTP headers, only available when streaming from a HTTP server. A pointer to a series of null-terminated strings is returned, the final string ending with a double null.</description></item>
            <item><term>BASS_TAG_ICY</term><description>ICY (Shoutcast) tags. A pointer to a series of null-terminated strings is returned, the final string ending with a double null.</description></item>
            <item><term>BASS_TAG_RIFF_INFO</term><description>RIFF/WAVE 'INFO' tags. A pointer to a series of null-terminated ANSI strings is returned, the final string ending with a double null. The tags are in the form of 'XXXX=text', where 'XXXX' is the chunk ID.</description></item>
            </list>
            Other tags may be supported by Add-Ons, see the documentation (ASNI only).
            </param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag, e.g. "TITLE=this is a title"
            </returns>
            <remarks>
            Only available when streaming a file containing tags/headers which are defined as a series of null-terminated ASNI strings! So make sure to use this method only with appropriate formats!
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsArrayNullTermUtf8(System.Int32,Un4seen.Bass.BASSTag)">
            <summary>
            Retrieves the header tags from a channel, if they are available.
            <para>NOTE: This method evaluates the header as a series/array of null-terminated UTF-8 strings.</para>
            <para>Might be used e.g. with: APE, MP4, OGG and WMA - if UTF-8!</para>
            </summary>
            <param name="handle">The channel handle...a HMUSIC or HSTREAM.</param>
            <param name="format">The type of tags/headers wanted... one of the following (see <see cref="T:Un4seen.Bass.BASSTag"/>):
            <list type="table">
            <item><term>BASS_TAG_OGG</term><description>OGG tags, only available when streaming an OGG file. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</description></item>
            <item><term>BASS_TAG_VENDOR</term><description>Vendor encoder tag. A single UTF-8 string is returned.</description></item>
            <item><term>BASS_TAG_WMA</term><description>WMA tags : array of null-terminated UTF-8 strings.</description></item>
            <item><term>BASS_TAG_WMA_META</term><description>WMA mid-stream tag : A single UTF-8 string is returned.</description></item>
            <item><term>BASS_TAG_WMA_CODEC</term><description>WMA codec tag : Two UTF-8 strings are returned.</description></item>
            <item><term>BASS_TAG_APE</term><description>APE tags. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null. Each string is in the form of "key=value", or "key=value1/value2/..." if there are multiple values.</description></item>
            <item><term>BASS_TAG_MP4</term><description>MP4 tags. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</description></item>
            <item><term>BASS_TAG_MF</term><description>Media Foundation metadata. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.</description></item>
            </list>
            Other tags may be supported by Add-Ons, see the documentation - only UTF-8!
            </param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag, e.g. "TITLE=this is a title"</returns>
            <remarks>
            Only available when streaming a file containing tags/headers which are defined as a series of null-terminated UNICODE strings! So make sure to use this method only with appropriate formats!
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsID3V1(System.Int32)">
            <summary>
            Retrieves the ID3v1 tags from a channel, if they are available.
            <para>This special helper method already evaluates the 128-byte ID3v3 data block.</para>
            </summary>
            <param name="handle">The channel handle...a HSTREAM.</param>
            <returns><see langword="null"/> or an array of strings with exactly 7 elements:
            <para>string[0] = 'song title' (max. 30 chars)</para>
            <para>string[1] = 'artist' (max. 30 chars)</para>
            <para>string[2] = 'album' (max. 30 chars)</para>
            <para>string[3] = 'year' (yyyy)</para>
            <para>string[4] = 'comment' (max. 28 chars)</para>
            <para>string[5] = 'genre-id'</para>
            <para>string[6] = 'track' (0-255)</para>
            </returns>
            <remarks>
            ID3v1 tags are located at the end of the file, so when streaming an MPEG file with ID3v1 tags from the internet, the tags will not be available until the download is complete. 
            A BASS_SYNC_DOWNLOAD sync can be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be informed of when the download is complete.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            string[] tags = Bass.BASS_ChannelGetTagsID3V1(stream);
            foreach (string tag in tags)
              Console.WriteLine(tag);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim tags As String() = Bass.BASS_ChannelGetTagsID3V1(stream)
            Dim tag As String
            For Each tag In tags
              Console.WriteLine(tag)
            Next tag
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsBWF(System.Int32)">
            <summary>
            Retrieves the Broadcast Audio Extension (BEXT) tags from a channel, if they are available.
            <para>This special helper method already evaluates the BEXT data block.</para>
            </summary>
            <param name="handle">The channel handle...a HSTREAM.</param>
            <returns><see langword="null"/> or an array of strings with exactly 9 elements:
            <para>string[0] = Description/Title (max. 256 chars)</para>
            <para>string[1] = Originator/Artist (max. 32 chars)</para>
            <para>string[2] = OriginatorReference/EncodedBy (max. 32 chars)</para>
            <para>string[3] = OriginationDate (in format 'yyyy-mm-dd')</para>
            <para>string[4] = OriginationTime (in format 'hh:mm:ss')</para>
            <para>string[5] = TimeReference (in samples since midnight)</para>
            <para>string[6] = Version (BWF version is typically 0 or 1)</para>
            <para>string[7] = UMID/Copyright (max. 64 chars)</para>
            <para>string[8] = CodingHistory/Comment</para>
            </returns>
            <remarks>
            More info about the BWF/RF64 tags (Broadcast Audio Extension) can be found here: <a href="http://www.ebu.ch/CMSimages/en/tec_doc_t3285_tcm6-10544.pdf">EBU specification</a>.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsCA(System.Int32)">
            <summary>
            Retrieves the CoreAudio codec information structure from a channel, if they are available.
            </summary>
            <param name="handle">The channel handle...a HSTREAM.</param>
            <returns><see langword="null"/> or an instance of the array of strings with exactly 9 elements:
            <para>string[0] = Description/Title (max. 256 chars)</para>
            <para>string[1] = Originator/Artist (max. 32 chars)</para>
            <para>string[2] = OriginatorReference/EncodedBy (max. 32 chars)</para>
            <para>string[3] = OriginationDate (in format 'yyyy-mm-dd')</para>
            <para>string[4] = OriginationTime (in format 'hh:mm:ss')</para>
            <para>string[5] = TimeReference (in samples since midnight)</para>
            <para>string[6] = Version (BWF version is typically 0 or 1)</para>
            <para>string[7] = UMID/Copyright (max. 64 chars)</para>
            <para>string[8] = CodingHistory/Comment</para>
            </returns>
            <remarks>
            More info about the BWF/RF64 tags (Broadcast Audio Extension) can be found here: <a href="http://www.ebu.ch/CMSimages/en/tec_doc_t3285_tcm6-10544.pdf">EBU specification</a>.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsDSDArtist(System.Int32)">
            <summary>
            Gets a DSDIFF Artist tags.
            </summary>
            <param name="handle">The channel handle...a HSTREAM.</param>
            <returns>The DSDIFF Artist string or <see langword="null"/>.</returns>
            <remarks>
            Only available when streaming a file containing DSDIFF tags.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsDSDTitle(System.Int32)">
            <summary>
            Gets a DSDIFF Title tags.
            </summary>
            <param name="handle">The channel handle...a HSTREAM.</param>
            <returns>The DSDIFF Title string or <see langword="null"/>.</returns>
            <remarks>
            Only available when streaming a file containing DSDIFF tags.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsDSDComments(System.Int32)">
            <summary>
            Gets all available DSDIFF comment tags.
            </summary>
            <param name="handle">The channel handle...a HSTREAM.</param>
            <returns><see langword="null"/> or an array of <see cref="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT"/> instances.</returns>
            <remarks>
            Only available when streaming a file containing DSDIFF tags.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsID3V2(System.Int32,System.IntPtr)">
            <summary>
            Retrieves the ID3v2 header tags from a channel, if they are available.
            </summary>
            <param name="handle">The channel handle...a HSTREAM.</param>
            <param name="p">An optional pointer to an ID3v2 structure if available; if not given the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_ID3V2"/> is used on the <paramref name="handle"/>.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag in the format 'FrameId=Value' (e.g. "TIT2=This is a Title").</returns>
            <remarks>Only tag values containing strings are returned (e.g. Txxx, Wxxx or COMM tags).
            <para>ID3v2 tags are supported at both the start and end of the file.</para>
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <exception cref="T:System.NotSupportedException">Invalid/Unsupported ID3v2 version detected.</exception>
            <example>
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            string[] tags = Bass.BASS_ChannelGetTagsID3V2(stream);
            foreach (string tag in tags)
              Console.WriteLine(tag);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim tags As String() = Bass.BASS_ChannelGetTagsID3V2(stream)
            Dim tag As String
            For Each tag In tags
              Console.WriteLine(tag)
            Next tag
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsID3V2_2(System.Int32)">
            <summary>
            Retrieves the 2nd ID3v2 header tags from a channel, if they are available.
            </summary>
            <param name="handle">The channel handle...a HSTREAM.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag in the format 'FrameId=Value' (e.g. "TIT2=This is a Title").</returns>
            <remarks>Only tag values containing strings are returned (e.g. Txxx, Wxxx or COMM tags).
            <para>ID3v2 tags are supported at both the start and end of the file.</para>
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <exception cref="T:System.NotSupportedException">Invalid/Unsupported ID3v2 version detected.</exception>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsAPE(System.Int32)">
            <summary>
            Retrieves the APE (v1 or v2) header tags from a channel, if they are available.
            <para>This special helper method already evaluates the null-terminated and variable length data block using UTF-8 strings.</para>
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag in the format 'TagName=Value' (e.g. "TITLE=This is a Title").</returns>
            <remarks>
            Only available when streaming a file containing APE tags.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_PlugInLoad("bass_ape.dll");
            ...
            int stream = Bass.BASS_StreamCreateFile("test.ape", 0, 0, BASSFlag.BASS_DEFAULT);
            string[] tags = Bass.BASS_ChannelGetTagsAPE(stream);
            foreach (string tag in tags)
              Console.WriteLine(tag);
            </code>
            <code lang="VB">
            Bass.BASS_PlugInLoad("bass_ape.dll")
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.ape", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim tags As String() = Bass.BASS_ChannelGetTagsAPE(stream)
            Dim tag As String
            For Each tag In tags
              Console.WriteLine(tag)
            Next tag
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsAPEBinary(System.Int32)">
            <summary>
            Retrieves all APE binary tags from a channel, if they are available.
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of <see cref="T:Un4seen.Bass.BASS_TAG_APE_BINARY"/> instances.</returns>
            <remarks>
            Only available when streaming a file containing APE tags.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_PlugInLoad("basswv.dll");
            ...
            int stream = Bass.BASS_StreamCreateFile("test.wv", 0, 0, BASSFlag.BASS_DEFAULT);
            BASS_TAG_APE_BINARY[] binTags = Bass.BASS_ChannelGetTagsAPEBinary(stream);
            </code>
            <code lang="VB">
            Bass.BASS_PlugInLoad("basswv.dll")
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.wv", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim binTags As BASS_TAG_APE_BINARY() = Bass.BASS_ChannelGetTagsAPEBinary(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsAPEPictures(System.Int32)">
            <summary>
            Retrieves all APEv2 picture tags from a channel, if they are available.
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_PICTURE"/> instances.</returns>
            <remarks>
            Only available when streaming a file containing APE tags.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_PlugInLoad("basswv.dll");
            ...
            int stream = Bass.BASS_StreamCreateFile("test.wv", 0, 0, BASSFlag.BASS_DEFAULT);
            AddOn.Tags.TagPicture[] pics = Bass.BASS_ChannelGetTagsAPEPictures(stream);
            </code>
            <code lang="VB">
            Bass.BASS_PlugInLoad("basswv.dll")
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.wv", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim pics As AddOn.Tags.TagPicture() = Bass.BASS_ChannelGetTagsAPEPictures(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsWMA(System.Int32)">
            <summary>
            Retrieves the WMA header tags or mid-stream tags from a channel, if they are available.
            <para>This special helper method already evaluates the null-terminated and variable length data block using UTF-8 strings.</para>
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag in the format 'AttribName=Value' (e.g. "TITLE=This is a Title").</returns>
            <remarks>
            Only available when streaming a file containing WMA tags.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_PlugInLoad("basswma.dll");
            ...
            int stream = Bass.BASS_StreamCreateFile("test.wma", 0, 0, BASSFlag.BASS_DEFAULT);
            string[] tags = Bass.BASS_ChannelGetTagsWMA(stream);
            foreach (string tag in tags)
              Console.WriteLine(tag);
            </code>
            <code lang="VB">
            Bass.BASS_PlugInLoad("basswma.dll")
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.wma", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim tags As String() = Bass.BASS_ChannelGetTagsWMA(stream)
            Dim tag As String
            For Each tag In tags
              Console.WriteLine(tag)
            Next tag
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsMP4(System.Int32)">
            <summary>
            Retrieves the MP4 header tags from a channel, if they are available.
            <para>This special helper method already evaluates the null-terminated and variable length data block using UTF-8 strings.</para>
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag in the format 'TagName=Value' (e.g. "TITLE=This is a Title").</returns>
            <remarks>
            Only available when streaming a file containing MP4 tags.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_PlugInLoad("bass_aac.dll");
            ...
            int stream = Bass.BASS_StreamCreateFile("test.m4a", 0, 0, BASSFlag.BASS_DEFAULT);
            string[] tags = Bass.BASS_ChannelGetTagsMP4(stream);
            foreach (string tag in tags)
              Console.WriteLine(tag);
            </code>
            <code lang="VB">
            Bass.BASS_PlugInLoad("bass_aac.dll")
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.m4a", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim tags As String() = Bass.BASS_ChannelGetTagsMP4(stream)
            Dim tag As String
            For Each tag In tags
              Console.WriteLine(tag)
            Next tag
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsMF(System.Int32)">
            <summary>
            Retrieves the Media Foundation tags from a channel, if they are available.
            <para>This special helper method already evaluates the null-terminated and variable length data block using UTF-8 strings.</para>
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag in the format 'TagName=Value' (e.g. "TITLE=This is a Title").</returns>
            <remarks>
            Only available when streaming a file using a Media Foundation codec (available on Windows7 and updated Vista only).
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            ...
            int stream = Bass.BASS_StreamCreateFile("test.m4a", 0, 0, BASSFlag.BASS_DEFAULT);
            string[] tags = Bass.BASS_ChannelGetTagsMF(stream);
            foreach (string tag in tags)
              Console.WriteLine(tag);
            </code>
            <code lang="VB">
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.m4a", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim tags As String() = Bass.BASS_ChannelGetTagsMF(stream)
            Dim tag As String
            For Each tag In tags
              Console.WriteLine(tag)
            Next tag
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsWAVEFORMAT(System.Int32)">
            <summary>
            Retrieves the WAVE "fmt" chunk contents (<see cref="T:Un4seen.Bass.WAVEFORMATEXT"/> structure).
            <para>As well as WAVE files, this is also provided by Media Foundation codecs.</para>
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an instance of the <see cref="T:Un4seen.Bass.WAVEFORMATEXT"/> structure on success.</returns>
            <remarks>
            Only available when streaming a file using a Media Foundation codec (available on Windows7 and updated Vista only) or a WAVE file.
            <para>When a Media Foundation codec is in use, the <see cref="T:Un4seen.Bass.WAVEFORMATEXT"/> structure's wFormatTag member can be used to find out what the source format is.
            Some typical wFormatTag examples are: 0x0161 = WMA, 0x0162 = WMA_PRO, 0x0163 = WMA_LOSSLESS, 0x1610 = MPEG_HEAAC.</para>
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsFLACPictures(System.Int32)">
            <summary>
            Retrieves all FLAC picture tags from a channel, if they are available.
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_PICTURE"/> instances.</returns>
            <remarks>
            Only available when streaming a file containing FLAC tags.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_PlugInLoad("bassflac.dll");
            ...
            int stream = Bass.BASS_StreamCreateFile("test.flac", 0, 0, BASSFlag.BASS_DEFAULT);
            BASS_TAG_FLAC_PICTURE[] pics = Bass.BASS_ChannelGetTagsFLACPictures(stream);
            </code>
            <code lang="VB">
            Bass.BASS_PlugInLoad("bassflac.dll")
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.flac", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim pics As BASS_TAG_FLAC_PICTURE() = Bass.BASS_ChannelGetTagsFLACPictures(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsFLACCuesheet(System.Int32)">
            <summary>
            Retrieves a FLAC cuesheet tags from a channel, if available.
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an instance of the <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_CUE"/>.</returns>
            <remarks>
            Only available when streaming a file containing FLAC tags.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            Bass.BASS_PlugInLoad("bassflac.dll");
            ...
            int stream = Bass.BASS_StreamCreateFile("test.flac", 0, 0, BASSFlag.BASS_DEFAULT);
            BASS_TAG_FLAC_CUE cuesheet = Bass.BASS_ChannelGetTagsFLACCuesheet(stream);
            </code>
            <code lang="VB">
            Bass.BASS_PlugInLoad("bassflac.dll")
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.flac", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim cuesheet As BASS_TAG_FLAC_CUE = Bass.BASS_ChannelGetTagsFLACCuesheet(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsHTTP(System.Int32)">
            <summary>
            Retrieves the HTTP header tags from a channel, if they are available.
            <para>This special helper method already evaluates the null-terminated and variable length data block using ANSI strings.</para>
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one header entry, e.g. "Server: Icecast 2.2.0"
            </returns>
            <remarks>
            Only available when streaming from a HTTP source.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateURL("http://www.radio42.com/playHiFi.pls", 0, 
                              BASSFlag.BASS_STREAM_STATUS, null, IntPtr.Zero);
            string[] tags = Bass.BASS_ChannelGetTagsICY(stream);
            if (tags == null)
            {
              // try http...
              tags = Bass.BASS_ChannelGetTagsHTTP(stream);
            }
            if (tags != null)
            {
              foreach (string tag in tags)
                Console.WriteLine(tag);
            }
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateURL("http://www.radio42.com/playHiFi.pls", 0, 
                                         BASSFlag.BASS_STREAM_STATUS, Nothing, IntPtr.Zero)
            Dim tags As String() = Bass.BASS_ChannelGetTagsICY(stream)
            If tags Is Nothing Then
              ' try http...
              tags = Bass.BASS_ChannelGetTagsHTTP(stream)
            End If
            If Not (tags Is Nothing) Then
              Dim tag As String
              For Each tag In tags
                Console.WriteLine(tag)
              Next tag
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsICY(System.Int32)">
            <summary>
            Retrieves the ICY (Shoutcast) tags from a channel, if they are available.
            <para>This special helper method already evaluates the null-terminated and variable length data block using ANSI strings.</para>
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one ICY entry, e.g. "icy-name: name of the stream"
            </returns>
            <remarks>
            Only available when streaming from Shoutcast.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateURL("http://www.radio42.com/playHiFi.pls", 0, 
                              BASSFlag.BASS_STREAM_STATUS, null, IntPtr.Zero);
            string[] tags = Bass.BASS_ChannelGetTagsICY(stream);
            if (tags == null)
            {
              // try http...
              tags = Bass.BASS_ChannelGetTagsHTTP(stream);
            }
            if (tags != null)
            {
              foreach (string tag in tags)
                Console.WriteLine(tag);
            }
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateURL("http://www.radio42.com/playHiFi.pls", 0, 
                                         BASSFlag.BASS_STREAM_STATUS, Nothing, IntPtr.Zero)
            Dim tags As String() = Bass.BASS_ChannelGetTagsICY(stream)
            If tags Is Nothing Then
              ' try http...
              tags = Bass.BASS_ChannelGetTagsHTTP(stream)
            End If
            If Not (tags Is Nothing) Then
              Dim tag As String
              For Each tag In tags
                Console.WriteLine(tag)
              Next tag
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsOGG(System.Int32)">
            <summary>
            Retrieves the OGG tags from a channel, if they are available.
            <para>This special helper method already evaluates the null-terminated and variable length data block using UTF-8 strings.</para>
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag in the format 'TagName=Value' (e.g. "TITLE=This is a Title").</returns>
            <remarks>
            Only available when streaming an OGG file.
            <para>In a chained OGG file containing multiple bitstreams, each bitstream will have its own tags. To get the tags from a particular one, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> can be first used to seek to it.</para>
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, BASSFlag.BASS_DEFAULT);
            string[] tags = Bass.BASS_ChannelGetTagsOGG(stream);
            foreach (string tag in tags)
              Console.WriteLine(tag);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim tags As String() = Bass.BASS_ChannelGetTagsOGG(stream)
            Dim tag As String
            For Each tag In tags
              Console.WriteLine(tag)
            Next tag
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsRIFF(System.Int32)">
            <summary>
            Retrieves the RIFF/WAVE Info tags from a channel, if they are available.
            <para>This special helper method already evaluates the null-terminated and variable length data block using ANSI strings.</para>
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag in the format 'ID=Value' (e.g. "IART =This is the Artist").</returns>
            <remarks>
            Only available for RIFF/WAVE files.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.wav", 0, 0, BASSFlag.BASS_DEFAULT);
            string[] tags = Bass.BASS_ChannelGetTagsRIFF(stream);
            foreach (string tag in tags)
              Console.WriteLine(tag);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.wav", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim tags As String() = Bass.BASS_ChannelGetTagsRIFF(stream)
            Dim tag As String
            For Each tag In tags
              Console.WriteLine(tag)
            Next tag
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsRIFFCUE(System.Int32)">
            <summary>
            Gets an available RIFF "cue " tags.
            </summary>
            <param name="handle">The channel handle...a HSTREAM.</param>
            <returns><see langword="null"/> or an instance of <see cref="T:Un4seen.Bass.BASS_TAG_CUE"/>.</returns>
            <remarks>
            Only available when streaming a file containing RIFF_CUE tags.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsMETA(System.Int32)">
            <summary>
            Retrieves metadata tags from a channel (Shoutcast or Icecast), if they are available.
            </summary>
            <param name="handle">The channel handle.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one tag in the format 'Name=Value' (e.g. "StreamTitle='xyz'").</returns>
            <remarks>
            Only available when streaming from Shoutcast.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateURL("http://www.radio42.com/playHiFi.pls", 0, 
                              BASSFlag.BASS_STREAM_STATUS, null, IntPtr.Zero);
            string[] tags = Bass.BASS_ChannelGetTagsMETA(stream);
            if (tags != null)
            {
              foreach (string tag in tags)
                Console.WriteLine(tag);
            }
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateURL("http://www.radio42.com/playHiFi.pls", 0, 
                                         BASSFlag.BASS_STREAM_STATUS, Nothing, IntPtr.Zero)
            Dim tags As String() = Bass.BASS_ChannelGetTagsMETA(stream)
            If Not (tags Is Nothing) Then
              Dim tag As String
              For Each tag In tags
                Console.WriteLine(tag)
              Next tag
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetTagLyrics3v2(System.Int32)">
            <summary>
            Retrieves a Lyrics3v2 tag.
            </summary>
            <param name="handle">The channel handle.</param>
            <returns> A single string is returned, containing the Lyrics3v2 information - or <see langword="null"/>, if not available. 
            <para>See <a href="http://www.id3.org/Lyrics3v2">www.id3.org/Lyrics3v2</a> for details of its format.</para>
            </returns>
            <remarks>
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetMusicName(System.Int32)">
            <summary>
            Retrieves the MOD music title from a channel, if it is available.
            </summary>
            <param name="handle">The channel handle...a HMUSIC.</param>
            <returns><see langword="null"/> or a single string representing the MOD music title.</returns>
            <remarks>
            Only available for MOD music channels.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetMusicMessage(System.Int32)">
            <summary>
            Retrieves the MOD message text from a channel, if it is available.
            </summary>
            <param name="handle">The channel handle...a HMUSIC.</param>
            <returns><see langword="null"/> or a single string representing the MOD message text.</returns>
            <remarks>
            Only available for MOD music channels.
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetMusicInstrument(System.Int32,System.Int32)">
            <summary>
            Retrieves a specific MOD instrument name from a channel, if it is available.
            </summary>
            <param name="handle">The channel handle...a HMUSIC.</param>
            <param name="instrument">The instrument number (0=first).</param>
            <returns><see langword="null"/> or a single string representing the MOD instrument name.</returns>
            <remarks>
            Only available for MOD music channels.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetMusicSample(System.Int32,System.Int32)">
            <summary>
            Retrieves a specific MOD sample name from a channel, if it is available.
            </summary>
            <param name="handle">The channel handle...a HMUSIC.</param>
            <param name="sample">The sample number (0=first).</param>
            <returns><see langword="null"/> or a single string representing the MOD sample name.</returns>
            <remarks>
            Only available for MOD music channels.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            List all MOD music's samples:
            <code lang="C#">
            string name = String.Empty;
            int i = 0;
            while ( true )
            {
              name = Bass.BASS_ChannelGetMusicSample( mod, i );
              if ( name != null )
                Console.Writeln( String.Format( "Sample {0}={1}", i, name ) );
              else
                break;
              i++;
            }
            </code>
            <code lang="VB">
            Dim name As String = [String].Empty
            Dim i As Integer = 0
            While True
              name = Bass.BASS_ChannelGetMusicSample([mod], i)
              If Not (name Is Nothing) Then
                Console.Writeln([String].Format("Sample {0}={1}", i, name))
              Else
                Exit While
              End If
              i += 1
            End While
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_ChannelGetMidiTrackText(System.Int32,System.Int32)">
            <summary>
            Retrieves a specific MIDI track text from a channel, if it is available.
            </summary>
            <param name="handle">The channel handle...a MIDI HSTREAM.</param>
            <param name="track">The MIDI track number (0=first), use -1 to get the text for all tracks.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one text of the MIDI track.</returns>
            <remarks>
            The texts of each track in the MIDI file are available via the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_MIDI_TRACK"/>+track tag, where track=0 is the first track. 
            The first text in the first track is generally the title of the MIDI file. 
            <para>RIFF MIDI tags are also available via the standard <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_INFO"/> tag.</para>
            <para>In addition you might also use the <see cref="T:Un4seen.Bass.AddOn.Tags.BassTags"/> class, which provides extended TAG reading support.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The requested tags are not available.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.
            <para><i>Additional effect parameter structures might be implemented by add-ons.</i></para>
            </param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParametersExt(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX_core)">
            <summary>
            .Net core version for BASS_BFX_MIX.
            </summary>
            <param name="handle"></param>
            <param name="par"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParametersExt(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE_core)">
            <summary>
            .Net core version for BASS_BFX_VOLUME_ENV.
            </summary>
            <param name="handle"></param>
            <param name="par"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParametersExt(System.Int32,System.Object)">
            <summary>
            ONLY supported in .Net Full
            </summary>
            <param name="handle"></param>
            <param name="par"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.Object)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.
            <para><i>Additional effect parameter structures might be implemented by add-ons.</i></para>
            </param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
             The structure used depends on the effect type.
            <para>For DX8 effects you might use: <see cref="T:Un4seen.Bass.BASS_DX8_CHORUS"/>, <see cref="T:Un4seen.Bass.BASS_DX8_COMPRESSOR"/>, <see cref="T:Un4seen.Bass.BASS_DX8_DISTORTION"/>, <see cref="T:Un4seen.Bass.BASS_DX8_ECHO"/>, <see cref="T:Un4seen.Bass.BASS_DX8_FLANGER"/>, <see cref="T:Un4seen.Bass.BASS_DX8_GARGLE"/>, <see cref="T:Un4seen.Bass.BASS_DX8_I3DL2REVERB"/>, <see cref="T:Un4seen.Bass.BASS_DX8_PARAMEQ"/>, <see cref="T:Un4seen.Bass.BASS_DX8_REVERB"/>.</para>
            <para>For BASS_FX DSP effetcs you might use: <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV"/>.</para>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add an effect DSP to a channel at anay time and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelRemoveFX(System.Int32,System.Int32)"/> to remove an effect from the channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>One or more of the parameters are invalid, make sure all the values are within the valid ranges.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
            BASS_DX8_ECHO echo = new BASS_DX8_ECHO();
            // add the effect to the DSP chain
            int fxHandle = Bass.BASS_ChannelSetFX(stream, BASSFXType.BASS_FX_ECHO, 0);
            echo.Preset_Long();
            // apply the effect parameters
            Bass.BASS_FXSetParameters(fxHandle, echo);
            // play the channel
            Bass.BASS_ChannelPlay(stream, false);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_DEFAULT)
            Dim echo As New BASS_DX8_ECHO()
            ' add the effect to the DSP chain
            Dim fxHandle As Integer = Bass.BASS_ChannelSetFX(stream, BASSFXType.BASS_FX_ECHO, 0)
            echo.Preset_Long()
            ' apply the effect parameters
            Bass.BASS_FXSetParameters(fxHandle, echo)
            ' play the channel
            Bass.BASS_ChannelPlay(stream, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_FX_VOLUME_PARAM)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_DX8_CHORUS)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_DX8_COMPRESSOR)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_DX8_DISTORTION)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_DX8_ECHO)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_DX8_FLANGER)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_DX8_GARGLE)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_DX8_I3DL2REVERB)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_DX8_PARAMEQ)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.BASS_DX8_REVERB)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4)">
            <summary>
            Sets the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">A poiner to an instance of an effect parameter structures which should be filled.
            <para><i>Additional effect parameter structures might be implemented by add-ons.</i></para>
            </param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParametersExt(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX_core@)">
            <summary>
            .Net core version for BASS_BFX_MIX.
            </summary>
            <param name="handle"></param>
            <param name="par"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParametersExt(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_ENV_NODE_core@)">
            <summary>
            .Net core version for BASS_BFX_ENV_NODE.
            </summary>
            <param name="handle"></param>
            <param name="par"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParametersExt(System.Int32,System.Object)">
            <summary>
            ONLY supported in .Net Full
            </summary>
            <param name="handle"></param>
            <param name="par"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.Object)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.
            <para><i>Additional effect parameter structures might be implemented by add-ons.</i></para>
            </param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
             The structure used depends on the effect type.
            <para>For DX8 effects you might use: <see cref="T:Un4seen.Bass.BASS_DX8_CHORUS"/>, <see cref="T:Un4seen.Bass.BASS_DX8_COMPRESSOR"/>, <see cref="T:Un4seen.Bass.BASS_DX8_DISTORTION"/>, <see cref="T:Un4seen.Bass.BASS_DX8_ECHO"/>, <see cref="T:Un4seen.Bass.BASS_DX8_FLANGER"/>, <see cref="T:Un4seen.Bass.BASS_DX8_GARGLE"/>, <see cref="T:Un4seen.Bass.BASS_DX8_I3DL2REVERB"/>, <see cref="T:Un4seen.Bass.BASS_DX8_PARAMEQ"/>, <see cref="T:Un4seen.Bass.BASS_DX8_REVERB"/>.</para>
            <para>For BASS_FX DSP effetcs you might use: <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX"/>, <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV"/>.</para>
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add an effect DSP to a channel at anay time and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelRemoveFX(System.Int32,System.Int32)"/> to remove an effect from the channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_DX8_ECHO echo = new BASS_DX8_ECHO();
            Bass.BASS_FXGetParameters(_fxEchoHandle, echo);
            Console.WriteLine( "Panning={0}", echo.lPanDelay );
            </code>
            <code lang="VB">
            Dim echo As New BASS_DX8_ECHO()
            Bass.BASS_FXGetParameters(_fxEchoHandle, echo)
            Console.WriteLine("Panning={0}", echo.lPanDelay)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_FX_VOLUME_PARAM)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_DX8_CHORUS)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_DX8_COMPRESSOR)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_DX8_DISTORTION)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_DX8_ECHO)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_DX8_FLANGER)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_DX8_GARGLE)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_DX8_I3DL2REVERB)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_DX8_PARAMEQ)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.BASS_DX8_REVERB)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4)">
            <summary>
            Retrieves the parameters of an effect.
            </summary>
            <param name="handle">The effect handle.</param>
            <param name="par">An instance of an effect parameter structures which should be filled.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            See <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> for details.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXReset(System.Int32)">
            <summary>
            Resets the state of an effect or all effects on a channel.
            </summary>
            <param name="handle">The effect or channel handle... a HFX, HSTREAM, HMUSIC, or HRECORD.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Call this function e.g. after changing the position or when you pause a channel or when a stream stalls to avoid clicks when resuming.
            <para>This function flushes the internal buffers of the effect(s). Effects are automatically reset by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, except when called from a "mixtime" <see cref="T:Un4seen.Bass.SYNCPROC"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Bass.BASS_FXSetPriority(System.Int32,System.Int32)">
            <summary>
            Changes the priority of an DSP/FX effect.
            </summary>
            <param name="handle">The effect handle... a HDSP or HFX.</param>
            <param name="priority">The priority of the new DSP/FX, which determines it's position in the DSP chain - DSP/FX with higher priority are applied before those with lower. 
            This parameter has no effect with DX8 effects when the "with FX flag" <a href="../Overview.html#DX8DMOEffects">DX8 effect implementation</a> is used.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Bass.SupportedStreamExtensions">
            <summary>
            Supported stream file extensions of the bass.dll.
            </summary>
            <remarks>
            Note: This list reports a set of file extensions which might be supported by BASS.
            There is no guarantee that the list is complete or might contain formats not being supported on your particular OS.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Bass.SupportedStreamName">
            <summary>
            Supported file format name of the bass.dll.
            </summary>
            <remarks>
            Note: This list reports a set of file formats which might be supported by BASS.
            There is no guarantee that the list is complete or might contain formats not being supported on your particular OS.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Bass.SupportedMusicExtensions">
            <summary>
            Supported music file extensions of the bass.dll.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Bass._configUTF8">
            <summary>
            Was the BASS_CONFIG_UNICODE option set?
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Bass.BASSVERSION">
            <summary>
            Current BASS version (without minor revision).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Bass.FALSE">
            <summary>
            The BASS way to say <see langword="false"/> = 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Bass.TRUE">
            <summary>
            The BASS way to say <see langword="true"/> = 1.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Bass.ERROR">
            <summary>
            The BASS way to say ERROR = -1.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Bass.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSWMA from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassWma.LoadMe();
            ...
            // when not used anymore...
            BassWma.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSWMA from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassWma.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassWma.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Bass.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.Bass.Bass.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.Bass.Bass.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.BASSError">
            <summary>
            BASS error codes as returned e.g. by <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> (int)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_OK">
            <summary>
            All is OK
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_MEM">
            <summary>
            Memory error
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_FILEOPEN">
            <summary>
            Can't open the file
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_DRIVER">
            <summary>
            Can't find a free/valid driver
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_BUFLOST">
            <summary>
            The sample buffer was lost
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_HANDLE">
            <summary>
            Invalid handle
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_FORMAT">
            <summary>
            Unsupported sample format
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_POSITION">
            <summary>
            Invalid playback position
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_INIT">
            <summary>
            BASS_Init has not been successfully called
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_START">
            <summary>
            BASS_Start has not been successfully called
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_SSL">
            <summary>
            SSL/HTTPS support isn't available
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_REINIT">
            <summary>
            device needs to be reinitialized
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOCD">
            <summary>
            No CD in drive
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_CDTRACK">
            <summary>
            Invalid track number
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_ALREADY">
            <summary>
            Already initialized/paused/whatever
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOPAUSE">
            <summary>
            Not paused
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOTAUDIO">
            <summary>
            Not an audio track
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOCHAN">
            <summary>
            Can't get a free channel
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_ILLTYPE">
            <summary>
            An illegal type was specified
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_ILLPARAM">
            <summary>
            An illegal parameter was specified
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NO3D">
            <summary>
            No 3D support
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOEAX">
            <summary>
            No EAX support
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_DEVICE">
            <summary>
            Illegal device number
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOPLAY">
            <summary>
            Not playing
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_FREQ">
            <summary>
            Illegal sample rate
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOTFILE">
            <summary>
            The stream is not a file stream
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOHW">
            <summary>
            No hardware voices available
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_EMPTY">
            <summary>
            The MOD music has no sequence data
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NONET">
            <summary>
            No internet connection could be opened
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_CREATE">
            <summary>
            Couldn't create the file
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOFX">
            <summary>
            Effects are not available
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_PLAYING">
            <summary>
            The channel is playing
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_NOTAVAIL">
            <summary>
            Requested data is not available
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_DECODE">
            <summary>
            The channel is a 'decoding channel'
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_DX">
            <summary>
            A sufficient DirectX version is not installed
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_TIMEOUT">
            <summary>
            Connection timedout
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_FILEFORM">
            <summary>
            Unsupported file format
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_SPEAKER">
            <summary>
            Unavailable speaker
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_VERSION">
            <summary>
            Invalid BASS version (used by add-ons)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_CODEC">
            <summary>
            Codec is not available/supported
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_ENDED">
            <summary>
            The channel/file has ended
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_BUSY">
            <summary>
            The device is busy (eg. in "exclusive" use by another process)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_UNSTREAMABLE">
            <summary>
            Unstreamable file
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_PROTOCOL">
            <summary>
            unsupported protocol
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_DENIED">
            <summary>
            access denied
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_UNKNOWN">
            <summary>
            Some other mystery error
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WMA_LICENSE">
            <summary>
            BassWma: the file is protected
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WMA_WM9">
            <summary>
            BassWma: WM9 is required
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WMA_DENIED">
            <summary>
            BassWma: access denied (user/pass is invalid)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WMA_CODEC">
            <summary>
            BassWma: no appropriate codec is installed
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WMA_INDIVIDUAL">
            <summary>
            BassWma: individualization is needed
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_ACM_CANCEL">
            <summary>
            BassEnc: ACM codec selection cancelled
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_CAST_DENIED">
            <summary>
            BassEnc: Access denied (invalid password)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_SERVER_CERT">
            <summary>
            missing/invalid certificate
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_VST_ERROR_NOINPUTS">
            <summary>
            BassVst: the given effect has no inputs and is probably a VST instrument and no effect
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_VST_ERROR_NOOUTPUTS">
            <summary>
            BassVst:  the given effect has no outputs
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_VST_ERROR_NOREALTIME">
            <summary>
            BassVst: the given effect does not support realtime processing
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WASAPI">
            <summary>
            BASSWASAPI: no WASAPI available
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WASAPI_BUFFER">
            <summary>
            BASSWASAPI: buffer size is invalid
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WASAPI_CATEGORY">
            <summary>
            BASSWASAPI: can't set category
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_MP4_NOSTREAM">
            <summary>
            BASS_AAC: non-streamable due to MP4 atom order ('mdat' before 'moov')
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_MIDI_INCLUDE">
            <summary>
            BASSMIDI: SFZ include file could not be opened
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WEBM_NOTAUDIO">
            <summary>
            BASSWEBM: non-streamable WebM audio
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSError.BASS_ERROR_WEBM_TRACK">
            <summary>
            BASSWEBM: invalid track number
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSInit">
            <summary>
            Initialization flags to be used with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_DEFAULT">
            <summary>
            0 = 16 bit, stereo, no 3D, no Latency calc, no Speaker Assignments
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_MONO">
            <summary>
            Use mono, else stereo.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_16BITS">
            <summary>
            Limit output to 16-bit.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_REINIT">
            <summary>
            Reinitialize
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_LATENCY">
            <summary>
            Calculate device latency (BASS_INFO struct).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_CPSPEAKERS">
            <summary>
            Use the Windows control panel setting to detect the number of speakers.
            <para>Only use this option if BASS doesn't detect the correct number of supported speakers automatically and you want to force BASS to use the number of speakers as configured in the windows control panel.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_SPEAKERS">
            <summary>
            Force enabling of <a href="../Overview.html#SpeakerAssignement">speaker assignment</a> (always 8 speakers will be used regardless if the soundcard supports them).
            <para>Only use this option if BASS doesn't detect the correct number of supported speakers automatically and you want to force BASS to use 8 speakers.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_NOSPEAKER">
            <summary>
            Ignore speaker arrangement
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVIDE_DMIX">
            <summary>
            Linux-only: Initialize the device using the ALSA "dmix" plugin, else initialize the device for exclusive access.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_FREQ">
            <summary>
            Set the device's output rate to freq, otherwise leave it as it is.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_STEREO">
            <summary>
            Limits the output to stereo (only really affects Linux; it's ignored on Windows and OSX).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_HOG">
            <summary>
            Use hog/exclusive mode.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_AUDIOTRACK">
            <summary>
            Initialize the device to use AudioTrack output instead of OpenSL ES. 
            If OpenSL ES is not available (pre-2.3 Android), then this will be applied automatically.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_DSOUND">
            <summary>
            use DirectSound output
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInit.BASS_DEVICE_SOFTWARE">
            <summary>
            Disable hardware/fastpath output
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSDirectSound">
            <summary>
            Direct Sound interface flags for use with <see cref="M:Un4seen.Bass.Bass.BASS_GetDSoundObject(System.Int32)"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDirectSound.BASS_OBJECT_DS">
            <summary>
            Retrieve the IDirectSound interface.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDirectSound.BASS_OBJECT_DS3DL">
            <summary>
            Retrieve the IDirectSound3DListener interface.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSConfig">
            <summary>
            Configuration options to be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_SetConfigPtr(Un4seen.Bass.BASSConfig,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_GetConfigPtr(Un4seen.Bass.BASSConfig)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER">
            <summary>
            Playback buffer length.
            <para>length (int): The buffer length in milliseconds. The minimum length is 1ms above the update period (see <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATEPERIOD"/>), the maximum is 5000 milliseconds. If the length specified is outside this range, it is automatically capped.</para>
            <para>The default buffer length is 500 milliseconds. Increasing the length, decreases the chance of the sound possibly breaking-up on slower computers, but also increases the latency for DSP/FX.</para>
            <para>Small buffer lengths are only required if the sound is going to be changing in real-time, for example, in a soft-synth. If you need to use a small buffer, then the minbuf member of BASS_INFO should be used to get the recommended minimum buffer length supported by the device and it's drivers. Even at this default length, it's still possible that the sound could break up on some systems, it's also possible that smaller buffers may be fine. So when using small buffers, you should have an option in your software for the user to finetune the length used, for optimal performance.</para>
            <para>Using this config option only affects the HMUSIC/HSTREAM channels that you create afterwards, not the ones that have already been created. So you can have channels with differing buffer lengths by using this config option each time before creating them.</para>
            <para>If automatic updating is disabled, make sure you call <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> frequently enough to keep the buffers updated.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATEPERIOD">
            <summary>
            The update period of HSTREAM and HMUSIC channel playback buffers.
            <para>period (int): The update period in milliseconds... 0 = disable automatic updating. The minimum period is 5ms, the maximum is 100ms. If the period specified is outside this range, it is automatically capped.</para>
            <para>The update period is the amount of time between updates of the playback buffers of HSTREAM/HMUSIC channels. Shorter update periods allow smaller buffers to be set with the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> option, but as the rate of updates increases, so the overhead of setting up the updates becomes a greater part of the CPU usage. 
            The update period only affects HSTREAM and HMUSIC channels, it does not affect samples. Nor does it have any effect on decoding channels, as they are not played.</para>
            <para>BASS creates one or more threads (determined by <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATETHREADS"/>) specifically to perform the updating, except when automatic updating is disabled (period=0) - then you must regularly call <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/>instead. This allows you to synchronize BASS's CPU usage with your program's. For example, in a game loop you could call <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> once per frame, which keeps all the processing in sync so that the frame rate is as smooth as possible. BASS_Update should be called at least around 8 times per second, even more often if the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> option is used to set smaller buffers.</para>
            <para>The update period can be altered at any time, including during playback. The default period is 100ms.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_GVOL_SAMPLE">
            <summary>
            Global sample volume.
            <para>volume (int): Sample global volume level... 0 (silent) - 10000 (full).</para>
            <para>This config option allows you to have control over the volume levels of all the samples, which is useful for setup options (eg. separate music and fx volume controls).</para>
            <para>A channel's final volume = channel volume * global volume / max volume. So, for example, if a stream channel's volume is 0.5 and the global stream volume is 8000, then effectively the stream's volume level is 0.4 (0.5 * 8000 / 10000 = 0.4).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_GVOL_STREAM">
            <summary>
            Global stream volume.
            <para>volume (int): Stream global volume level... 0 (silent) - 10000 (full).</para>
            <para>This config option allows you to have control over the volume levels of all streams, which is useful for setup options (eg. separate music and fx volume controls).</para>
            <para>A channel's final volume = channel volume * global volume / max volume. So, for example, if a stream channel's volume is 0.5 and the global stream volume is 8000, then effectively the stream's volume level is 0.4 (0.5 * 8000 / 10000 = 0.4).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_GVOL_MUSIC">
            <summary>
            Global music volume.
            <para>volume (int): MOD music global volume level... 0 (silent) - 10000 (full).</para>
            <para>This config option allows you to have control over the volume levels of all the MOD musics, which is useful for setup options (eg. separate music and fx volume controls).</para>
            <para>A channel's final volume = channel volume * global volume / max volume. So, for example, if a stream channel's volume is 0.5 and the global stream volume is 8000, then effectively the stream's volume level is 0.4 (0.5 * 8000 / 10000 = 0.4).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CURVE_VOL">
            <summary>
            Volume translation curve.
            <para>logvol (bool): Volume curve... <see langword="false"/> = linear, <see langword="true"/> = logarithmic.</para>
            <para>DirectSound uses logarithmic volume and panning curves, which can be awkward to work with. 
            For example, with a logarithmic curve, the audible difference between 10000 and 9000, is not the same as between 9000 and 8000. 
            With a linear "curve" the audible difference is spread equally across the whole range of values, so in the previous example the audible difference between 10000 and 9000, and between 9000 and 8000 would be identical.</para>
            <para>When using the linear curve, the volume range is from 0% (silent) to 100% (full). 
            When using the logarithmic curve, the volume range is from -100 dB (effectively silent) to 0 dB (full). For example, a volume level of 0.5 is 50% linear or -50 dB logarithmic.</para>
            <para>The linear curve is used by default.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CURVE_PAN">
            <summary>
            Panning translation curve.
            <para>logpan (bool): Panning curve... <see langword="false"/> = linear, <see langword="true"/> = logarithmic.</para>
            <para>The panning curve affects panning in exactly the same way as the volume curve (BASS_CONFIG_CURVE_VOL) affects the volume.</para>
            <para>The linear curve is used by default.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_FLOATDSP">
            <summary>
            Pass 32-bit floating-point sample data to all DSP functions?
            <para>floatdsp (bool): If <see langword="true"/>, 32-bit floating-point sample data is passed to all <see cref="T:Un4seen.Bass.DSPPROC"/> callback functions.</para>
            <para>Normally DSP functions receive sample data in whatever format the channel is using, ie. it can be 8, 16 or 32-bit. But using this config option, BASS will convert 8/16-bit sample data to 32-bit floating-point before passing it to DSP functions, and then convert it back after all the DSP functions are done. As well as simplifying the DSP code (no need for 8/16-bit processing), this also means that there is no degradation of quality as sample data passes through a chain of DSP.</para>
            <para>This config option also applies to effects set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>, except for DX8 effects when using the "With FX flag" <a href="../Overview.html#DX8DMO">DX8 effect implementation</a>.</para>
            <para>Changing the setting while there are DSP or FX set could cause problems, so should be avoided.</para>
            <para><b>Platform-specific:</b> On Android and Windows CE, 8.24 bit fixed-point is used instead of floating-point. Floating-point DX8 effect processing requires DirectX 9 (or above) on Windows.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_3DALGORITHM">
            <summary>
            The 3D algorithm for software mixed 3D channels.
            <para>algo (int): Use one of the <see cref="T:Un4seen.Bass.BASS3DAlgorithm"/> flags.</para>
            <para>These algorithms only affect 3D channels that are being mixed in software. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> can be used to check whether a channel is being software mixed.</para>
            <para>Changing the algorithm only affects subsequently created or loaded samples, musics, or streams; it does not affect any that already exist.</para>
            <para>On Windows, DirectX 7 or above is required for this option to have effect. On other platforms, only the BASS_3DALG_DEFAULT and BASS_3DALG_OFF options are available.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_TIMEOUT">
            <summary>
            Time to wait for a server to respond to a connection request.
            <para>timeout (int): The time to wait, in milliseconds.</para>
            <para>The default timeout is 5 seconds (5000 milliseconds).</para>
            <para>The <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_THREAD"/> flag can be used to make the setting specific to the current thread. When that is non-zero, it will override the global setting in the current thread.</para>
            <para>When playlist processing is enabled via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PLAYLIST"/> option, the timeout applies to each playlist entry rather than the playlist as a whole.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_BUFFER">
            <summary>
            The internet download buffer length.
            <para>length (int): The buffer length, in milliseconds.</para>
            <para>Increasing the buffer length decreases the chance of the stream stalling, but also increases the time taken by <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> to create the stream, as it has to pre-buffer more data (adjustable via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PREBUF"/> option). Aside from the pre-buffering, this setting has no effect on streams without either the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_BLOCK"/> or <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_RESTRATE"/> flags.</para>
            <para>When streaming in blocks, this option determines the download buffer length. The effective buffer length can actually be a bit more than that specified, including data that has been read from the buffer by the decoder but not yet decoded.</para>
            <para>The <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_THREAD"/> flag can be used to make the setting specific to the current thread. This config option also determines the buffering used by "buffered" user file streams created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>.</para>
            <para>The default buffer length is 5 seconds (5000 milliseconds). The net buffer length should be larger than the length of the playback buffer (<see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/>), otherwise the stream is likely to briefly stall soon after starting playback.</para>
            <para>Using this config option only affects streams created afterwards, not any that have already been created.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_PAUSE_NOPLAY">
            <summary>
            Prevent channels being played when the output is paused?
            <para>noplay (bool): If <see langword="true"/>, channels can't be played while the output is paused.</para>
            <para>When the output is paused using <see cref="M:Un4seen.Bass.Bass.BASS_Pause"/>, and this config option is enabled, channels can't be played until the output is resumed using <see cref="M:Un4seen.Bass.Bass.BASS_Start"/>. Attempts to play a channel will give a <see cref="F:Un4seen.Bass.BASSError.BASS_ERROR_START"/> error.</para>
            <para>By default, this config option is enabled.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PREBUF">
            <summary>
            Amount to pre-buffer when opening internet streams.
            <para>prebuf (int): Amount (percentage) to pre-buffer.</para>
            <para>This setting determines what percentage of the buffer length (<see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_BUFFER"/>) should be filled by <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>. The default is 75%. Setting this lower (eg. 0) is useful if you want to display a "buffering progress" (using <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/>) when opening internet streams, but note that this setting is just a minimum - BASS will always pre-download a certain amount to verify the stream.</para>
            <para>The pre-buffering can be done by <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> or asynchronously, depending on the BASS_CONFIG_NET_PREBUF_WAIT setting.</para>
            <para>As well as internet streams, this config setting also applies to "buffered" user file streams created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_AGENT">
            <summary>
            The "User-Agent" request header sent to servers.
            <para>agent (string pointer): The "User-Agent" header.</para>
            <para>BASS makes a copy of the provided string, so it does not need to persist beyond the call. Changes take effect from the next internet stream creation call.</para>
            <para>On Windows and Windows CE, the BASS_UNICODE flag can be used with a UTF-16 string.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PROXY">
            <summary>
            Proxy server settings (in the form of "user:pass@server:port"... <see langword="null"/> = don't use a proxy).
            <para>proxy (string pointer): The proxy server settings, in the form of "user:pass@server:port"... NULL = don't use a proxy. "" (empty string) = use the OS's default proxy settings. If only the "user:pass@" part is specified, then those authorization credentials are used with the default proxy server. If only the "server:port" part is specified, then that proxy server is used without any authorization credentials.</para>
            <para>makes a copy of the provided string, so it does not need to persist beyond the call. Changes take effect from the next internet stream creation call.</para>
            <para>On Windows and Windows CE, the BASS_UNICODE flag can be used with a UTF-16 string.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PASSIVE">
            <summary>
            Use passive mode in FTP connections?
            <para>passive (bool): If <see langword="true"/>, passive mode is used, otherwise normal/active mode is used.</para>
            <para>Changes take effect from the next internet stream creation call. By default, passive mode is enabled.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_REC_BUFFER">
            <summary>
            The buffer length for recording channels.
            <para>length (int): The buffer length in milliseconds... 10 (min) - 5000 (max). If the length specified is outside this range, it is automatically capped.</para>
            <para>Unlike a playback buffer, where the aim is to keep the buffer full, a recording buffer is kept as empty as possible and so this setting has no effect on latency. The default recording buffer length is 2000 milliseconds. Unless processing of the recorded data could cause significant delays, or you want to use a large recording period with <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/>, there should be no need to increase this.</para>
            <para>Using this config option only affects the recording channels that are created afterwards, not any that have already been created. So you can have channels with differing buffer lengths by using this config option each time before creating them.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PLAYLIST">
            <summary>
            Process URLs in PLS, M3U, WPL or ASX playlists?
            <para>netlists (int): When to process URLs in PLS, M3U, WPL or ASX playlists... 0 = never, 1 = in <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> only, 2 = in <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> too.</para>
            <para>When enabled, BASS will process PLS, M3U, WPL and ASX playlists, going through each entry until it finds a URL that it can play. 
            By default, playlist procesing is disabled.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MUSIC_VIRTUAL">
            <summary>
            The maximum number of virtual channels to use in the rendering of IT files.
            <para>number (int): The number of virtual channels... 1 (min) to 512 (max). If the value specified is outside this range, it is automatically capped.</para>
            <para>This setting only affects IT files, as the other MOD music formats do not have virtual channels. The default setting is 64. Changes only apply to subsequently loaded files, not any that are already loaded.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_VERIFY">
            <summary>
            The amount of data to check in order to verify/detect the file format.
            <para>length (int): The amount of data to check, in bytes... 1000 (min) to 100000 (max). If the value specified is outside this range, it is automatically capped.</para>
            <para>Of the file formats supported as standard, this setting only affects the detection of MP3/MP2/MP1 formats, 
            but it may also be used by add-ons (see the documentation). For internet (and "buffered" user file) streams, a quarter of the length is used, up to a minimum of 1000 bytes.</para>
            <para>The verification length excludes any tags that may be at the start of the file. The default length is 16000 bytes.</para>
            <para>For internet (and "buffered" user file) streams, the BASS_CONFIG_VERIFY_NET setting determines how much data is checked.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UPDATETHREADS">
            <summary>
            The number of threads to use for updating playback buffers.
            <para>threads (int): The number of threads to use... 0 = disable automatic updating.</para>
            <para>The number of update threads determines how many HSTREAM/HMUSIC channel playback buffers can be updated in parallel; 
            each thread can process one channel at a time. The default is to use a single thread, but additional threads can be used to take advantage of multiple CPU cores. 
            There is generally nothing much to be gained by creating more threads than there are CPU cores, but one benefit of using multiple threads even with a single CPU core is that a slow updating channel need not delay the updating of other channels.</para>
            <para>When automatic updating is disabled (threads = 0), <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> should be used instead.</para>
            <para>The number of update threads can be changed at any time, including during playback.</para>
            <para><b>Platform-specific:</b> The number of update threads is limited to 1 on Windows CE platforms.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DEV_BUFFER">
            <summary>
            Linux, Android and CE only: The output device buffer length.
            <para>length (int): The buffer length in milliseconds.</para>
            <para>The device buffer is where the final mix of all playing channels is placed, ready for the device to play. Its length affects the latency of things like starting and stopping playback of a channel, so you will probably want to avoid setting it unnecessarily high, but setting it too short could result in breaks in the output.</para>
            <para>When using a large device buffer, the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_NOBUFFER"/> attribute could be used to skip the channel buffering stage, to avoid further increasing latency for real-time generated sound and/or DSP/FX changes.</para>
            <para>Changes to this config setting only affect subsequently initialized devices, not any that are already initialized.</para>
            <para>This config option is only available on Linux, Android and Windows CE. The device's buffer is determined automatically on other platforms.</para>
            <para><b>Platform-specific:</b> On Linux, the driver may choose to use a different buffer length if it decides that the specified length is too short or long. The buffer length actually being used can be obtained with <see cref="T:Un4seen.Bass.BASS_INFO"/>, like this: latency + minbuf / 2.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_REC_LOOPBACK">
            <summary>
            Include loopback devices in the device enumeration.
            <para>errors (bool): Include loopback devices? (default is <see langword="true"/>).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_VISTA_TRUEPOS">
            <summary>
            Enable true play position mode on Windows Vista and newer?
            <para>truepos (bool): If enabled, DirectSound's 'true play position' mode is enabled on Windows Vista and newer (default is <see langword="true"/>).</para>
            <para>Unless this option is enabled, the reported playback position will advance in 10ms steps on Windows Vista and newer. As well as affecting the precision of <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, this also affects the timing of non-mixtime syncs. When this option is enabled, it allows finer position reporting but it also increases latency</para>
            <para>The default setting is enabled. Changes only affect channels that are created afterwards, not any that already exist. The latency and minbuf values in the <see cref="T:Un4seen.Bass.BASS_INFO"/> structure reflect the setting at the time of the device's <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_IOS_SESSION">
            <summary>
            Audio session configuration on iOS.
            <para>config (<see cref="T:Un4seen.Bass.BASSiOSSession"/> a combination of these flags)</para>
            <para>BASS_IOS_SESSION_MIX = allow other audio to mix with the app's audio (enables kAudioSessionProperty_OverrideCategoryMixWithOthers).</para>
            <para>BASS_IOS_SESSION_DUCK = also 'duck' the other audio (enables kAudioSessionProperty_OtherMixableAudioShouldDuck).</para>
            <para>BASS_IOS_SESSION_AMBIENT = use the 'ambient' category (enables kAudioSessionCategory_SoloAmbientSound/AmbientSound instead of kAudioSessionCategory_MediaPlayback).</para>
            <para>BASS_IOS_SESSION_SPEAKER = Route the output to the speaker instead of the receiver. Enables AVAudioSessionCategoryOptionDefaultToSpeaker.</para>
            <para>BASS_IOS_SESSION_AIRPLAY = Allow playback on Airplay devices when recording (Airplay is always allowed when only playing). Enables AVAudioSessionCategoryOptionAllowAirPlay.</para>
            <para>BASS_IOS_SESSION_BTHFP = Allow Bluetooth HFP (hands-free) devices when recording (Bluetooth is always allowed when only playing). Enables AVAudioSessionCategoryOptionAllowBluetooth.</para>
            <para>BASS_IOS_SESSION_BTA2DP = Allow Bluetooth A2DP devices when recording (Bluetooth is always allowed when only playing). Enables AVAudioSessionCategoryOptionAllowBluetoothA2DP.</para>
            <para>BASS_IOS_SESSION_DEACTIVATE = Deactivate the audio session when nothing is playing or recording. It is otherwise only deactivated when there are no initialized devices and during interruptions.</para>
            <para>BASS_IOS_SESSION_DISABLE = Disable BASS's audio session configuration management so that the app can handle that itself.</para>
            <para>The default setting is BASS_IOS_SESSION_MIX + BASS_IOS_SESSION_BTHFP.</para>
            <para>When using AAC encoding (via BASS_Encode_StartCA), BASS_CONFIG_IOS_MIXAUDIO needs to be set to 0.</para>
            <para>By default, the audio session category is set to AVAudioSessionCategoryPlayback. If BASS_IOS_SESSION_AMBIENT is set then the category will be set to AVAudioSessionCategorySoloAmbient instead, or AVAudioSessionCategoryAmbient if BASS_IOS_SESSION_MIX or BASS_IOS_SESSION_DUCK is also set. If BASS_IOS_SESSION_SPEAKER is set or BASS_RecordInit has been called then the category will be set to AVAudioSessionCategoryPlayAndRecord (regardless of BASS_IOS_SESSION_AMBIENT). Descriptions of these categories and other options can be found in Apple's AVAudioSession documentation.</para>
            <para>When BASS's audio session configuration management is disabled (BASS_IOS_SESSION_DISABLE is set), BASS will still activate the session during initialization and after an interruption but do nothing else. Except for the 'No Sound' device, the BASS_CONFIG_DEV_PERIOD option is disabled by this; the AVAudioSession setPreferredIOBufferDuration method can be used instead.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_IOS_MIXAUDIO">
            <summary>
            iOS only: Sets the mixing (kAudioSessionProperty_OverrideCategoryMixWithOthers) option.
            <para>mixing (int): 1 = allow other audio to mix with the app's audio (enables kAudioSessionProperty_OverrideCategoryMixWithOthers), 2 = also "duck" the other audio (enables kAudioSessionProperty_OtherMixableAudioShouldDuck), 4 = use the "ambient" category (enables kAudioSessionCategory_SoloAmbientSound/AmbientSound instead of kAudioSessionCategory_MediaPlayback). The default setting is 1.</para>
            <para>When using AAC encoding (via BASS_Encode_StartCA), BASS_CONFIG_IOS_MIXAUDIO needs to be set to 0.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MP3_ERRORS">
            <summary>
            Suppress silencing for corrupted MP3 frames.
            <para>errors (bool): Suppress error correction silences? (default is <see langword="false"/>).</para>
            <para>When BASS is detecting some corruption in an MP3 file's Huffman coding, it silences the frame to avoid any unpleasent noises that can result from corruption.
            Set this parameter to <see langword="true"/> in order to suppress this behavior and </para>
            <para>This applies only to the regular BASS version and NOT the "mp3-free" version.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DEV_DEFAULT">
            <summary>
            Include a 'Default' entry in the output device list?
            <para>default (bool): If <see langword="true"/>, a 'Default' device will be included in the device list (default).</para>
            <paraa>This option adds a 'Default' entry to the output device list, which maps to the device that is currently the system's default. Its output will automatically switch over when the system's default device setting changes.</paraa>
            <para>When enabled, the "Default" device will also become the default device to BASS_Init (with device = -1). Both it and the device that it currently maps to will have the BASS_DEVICE_DEFAULT flag set by <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/>.</para>
            <para>This option is enabled by default, and can only be disabled before <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> has been called.</para>
            <para><b>Platform-specific:</b> This config option is only available on Windows and macOS (a 'Default' entry is always included on other platforms). On Windows, the automatic device switching feature requires Windows Vista or above (Windows 7 when DirectSound is used). <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> can be called with the BASS_DEVICE_REINIT flag to manually switch to the new default device on older Windows.</para>
            <para>When the 'Default' device is used with DirectSound, the <see cref="M:Un4seen.Bass.Bass.BASS_SetVolume(System.Single)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_GetVolume"/> functions work a bit differently to usual; they deal with the 'session' volume, which only affects the current process's output on the device, rather than the device's volume.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_READTIMEOUT">
            <summary>
            The time to wait for a server to deliver more data for an internet stream.
            <para>timeout (int): The time to wait in milliseconds (default=0, no timeout).</para>
            <para>When the timeout is hit, the connection with the server will be closed. The default setting is 0, no timeout. Changes only affect subsequently created streams, not any that already exist.</para>
            <para>The <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_THREAD"/> flag can be used to make the setting specific to the current thread. When that is non-zero, it will override the global setting in the current thread.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_VISTA_SPEAKERS">
            <summary>
            Enable speaker assignment with panning/balance control on Windows Vista and newer?
            <para>enable (bool): If <see langword="true"/>, speaker assignment with panning/balance control is enabled on Windows Vista and newer.</para>
            <para>Panning/balance control via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_PAN"/> attribute is not available when <a href="../Overview.html#SpeakerAssignement">speaker assignment</a> is used on Windows due to the way that the speaker assignment needs to be implemented there. The situation is improved with Windows Vista, and speaker assignment can generally be done in a way that does permit panning/balance control to be used at the same time, but there may still be some drivers that it does not work properly with, so it is disabled by default and can be enabled via this config option. Changes only affect channels that are created afterwards, not any that already exist.</para>
            <para><b>Platform-specific:</b> This config option is only available on Windows. It is available on all Windows versions (not including CE), but only has effect on Windows Vista and newer. Speaker assignment with panning/balance control is always possible on other platforms, where BASS generates the final mix.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_IOS_SPEAKER">
            <summary>
            iOS only: Send the output to the speaker instead of the receiver?
            <para>mixing (int): When set to 1, sends the output to the speaker instead of the receiver (enables kAudioSessionProperty_OverrideCategoryDefaultToSpeaker). The default setting is 0 (off).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MF_DISABLE">
            <summary>
            Disable the use of Media Foundation?
            <para>enable (bool): Disable Media Foundation?</para>
            <para>This option determines whether Media Foundation codecs can be used to decode files and streams. It is set to <see langword="false"/> by default when Media Foundation codecs are available, which is on Windows 7 and above, and updated versions of Vista. It will otherwise be <see langword="true"/> and read-only.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_HANDLES">
            <summary>
            Gets the total number of HSTREAM/HSAMPLE/HMUSIC/HRECORD handles.
            <para>none: only used with <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.</para>
            <para>The handle count may not only include the app-created stuff but also internal stuff, eg. BASS_WASAPI_Init will create a stream when the BASS_WASAPI_BUFFER flag is used.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UNICODE">
            <summary>
            Gets or Sets the Unicode character set in device information.
            <para>utf8 (bool): If <see langword="true"/>, device information will be in UTF-8 form. Otherwise it will be ANSI.</para>
            <para>This config option determines what character set is used in the <see cref="T:Un4seen.Bass.BASS_DEVICEINFO"/> structure and by the <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInputName(System.Int32)"/> function. 
            The default setting is ANSI, and it can only be changed before <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has been called.</para>
            <para><b>Platform-specific:</b> This config option is only available on Windows.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_SRC">
            <summary>
            Gets or Sets the default sample rate conversion quality.
            <para>quality (int): The sample rate conversion quality... 0 = linear interpolation, 1 = 8 point sinc interpolation, 2 = 16 point sinc interpolation, 3 = 32 point sinc interpolation, 4 = 64 point sinc interpolation. Other values are also accepted.</para>
            <para>This config option determines what sample rate conversion quality new channels will initially have, except for sample channels (HCHANNEL), which use the BASS_CONFIG_SRC_SAMPLE setting.
            A channel's sample rate conversion quality can subsequently be changed via the BASS_ATTRIB_SRC attribute (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>).</para>
            <para>The default setting is 1 (8 point sinc interpolation) or 2 when SSE is available (16 point sinc interpolation).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_SRC_SAMPLE">
            <summary>
            Gets or Sets the default sample rate conversion quality for samples.
            <para>quality (int): The sample rate conversion quality... 0 = linear interpolation, 1 = 8 point sinc interpolation, 2 = 16 point sinc interpolation, 3 = 32 point sinc interpolation. Other values are also accepted.</para>
            <para>This config option determines what sample rate conversion quality a new sample channel will initially have, following a <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/> call.
            The channel's sample rate conversion quality can subsequently be changed via the BASS_ATTRIB_SRC attribute (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>).</para>
            <para>The default setting is 0 (linear interpolation).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ASYNCFILE_BUFFER">
            <summary>
            The buffer length for asynchronous file reading (default setting is 65536 bytes (64KB)).
            <para>length (int): The buffer length in bytes. This will be rounded up to the nearest 4096 byte (4KB) boundary.</para>
            <para>This determines the amount of file data that can be read ahead of time with asynchronous file reading. Changes only affect streams that are created afterwards, not any that already exist. So it is possible to have streams with differing buffer lengths by using this config option before creating each of them.</para>
            <para>When asynchronous file reading is enabled, the buffer level is available from <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_IOS_NOTIFY">
            <summary>
            iOS only: Sets a callback function to receive notification of interruptions.
            <para>proc (callback): The <see cref="T:Un4seen.Bass.IOSNOTIFYPROC"/> callback delegate to use.</para>
            <para>You can use that instead of AudioSessionInitialize to receive the interruption notifications</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_OGG_PRESCAN">
            <summary>
            Pre-scan chained OGG files?
            <para>prescan (bool): If <see langword="true"/>, chained OGG files are pre-scanned.</para>
            <para>This option is enabled by default, and is equivalent to including the BASS_STREAM_PRESCAN flag in a <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> call when opening an OGG file. It can be disabled if seeking and an accurate length reading are not required from chained OGG files, for faster stream creation.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MF_VIDEO">
            <summary>
            Play the audio from video files using Media Foundation?
            <para>video (bool): If <see langword="true"/> (default) BASS will Accept video files.</para>
            <para>This config option is only available on Windows, and only has effect on Windows Vista and newer.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_AIRPLAY">
            <summary>
            OSX only: Gets or Sets which Airplay receivers are enabled.
            <para>receivers (int): Enabled receivers... the 1st bit is the 1st reciever, the 2nd bit is the 2nd receiver, etc. If a bit is set, then the corresponding receiver is enabled.</para>
            <para>This config option determines which Airplay receivers will receive the sound when the Airplay output device is used. The receiver configuration is a global setting, so changes will also affect any other software that uses the Airplay device.</para>
            <para><see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> can be used to enumerate the available Airplay receivers. Unlike the output device list, where entries are never removed (the BASS_DEVICE_ENABLED flag is just unset), entries may be removed from the Airplay receiver list as it only contains receivers that are currently available. That means you should not depend on the bit indexes remaining constant.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DEV_NONSTOP">
            <summary>
            Do not stop the output device when nothing is playing?
            <para>nonstop (bool): If <see langword="true"/>, sample data will continue to be sent to the output device while nothing is playing.</para>
            <para>By default, BASS will stop sending data to the output device when nothing is playing, to save a little CPU. When that happens, the device buffer will become empty, and the next playback will begin more quickly as a result. 
            If more consistent playback latency (around the value given by <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/>) is wanted, this option can be enabled to keep the device buffer filled with silence when nothing is playing. The output will still be stopped by <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>.</para>
            <para>The output stopping when nothing is playing does not apply on OSX or iOS, so this config option is not available on those platforms.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_IOS_NOCATEGORY">
            <summary>
            Disable BASS's audio session category management?
            <para>nocat (bool): If <see langword="true"/>, BASS stops handling the Audio Session options.</para>
            <para>When this option is enabled , it disables BASS's audio session category management so that the app can handle that itself. 
            The BASS_CONFIG_IOS_MIXAUDIO/SPEAKER and BASS_CONFIG_DEV_BUFFER settings will have no effect in the case.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_VERIFY_NET">
            <summary>
            The amount of data to check in order to verify/detect the file format of internet streams.
            <para>length (int): The amount of data to check, in bytes... 1000 (min) to 1000000 (max), or 0 = 25% of the BASS_CONFIG_VERIFY setting (with a minimum of 1000 bytes). If the value specified is outside this range, it is automatically capped.</para>
            <para>Of the file formats supported as standard, this setting only affects the detection of MP3/MP2/MP1 formats, but it may also be used by add-ons (see the documentation). 
            The verification length excludes any tags that may be found at the start of the file. The default setting is 0, which means 25% of the BASS_CONFIG_VERIFY setting.</para>
            <para>As well as internet streams, this config setting also applies to "buffered" user file streams created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DEV_PERIOD">
            <summary>
            The output device update period.
            <para>period (int): The update period in milliseconds, or in samples if negative.</para>
            <para>The device update period determines how often data is generated and placed in an output device's buffer. A shorter period allows a smaller buffer and lower latency but may use more CPU than a longer period.</para>
            <para>The system may choose to use a different period if the requested one is too short or long, or needs rounding for granularity. The period actually being used can be obtained with <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/> (the minbuf value).</para>
            <para>The default setting is 10ms. Changes only affect subsequently initialized devices, not any that are already initialized.</para>
            <para>Platform-specific:</para>
            <para>On Windows, this config option only applies pre-Vista and to the 'No Sound' device, the period is otherwise set by Windows (usually 10ms). 
            On iOS, except on the 'No Sound' device, negative (samples) settings are ignored and changes take immediate effect rather than being delayed until the next device initialization. 
            On Windows CE, the default setting is 50ms.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_FLOAT">
            <summary>
            Floating-point sample data is supported?
            <para>This is a read-only config option that indicates whether floating-point sample data is supported, eg. the BASS_SAMPLE_FLOAT flag. A value of 0 means it is not. Floating-point data is not supported on platforms/architectures that do not have an FPU, eg. older ARM platforms/architectures.</para>
            <para>When floating-point data is not supported, the BASS_CONFIG_FLOATDSP option is still available, but it will result in DSPPROC functions receiving 8.24 fixed-point data instead of floating-point.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_SEEK">
            <summary>
            Determines the maximum forward seek that will be allowed when creating an internet or buffered user file stream.
            <para>length (int): the maximum forward seek that will be allowed.</para>
            <para>The seeking involves downloading up to the requested position, so there needs to be some limit to avoid potentially pre-downloading massive files entirely, 
            eg. to read ID3v1 tags from the end.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_AM_DISABLE">
            <summary>
            Disable the use of Android media codecs? 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PLAYLIST_DEPTH">
            <summary>
            Maximum nested playlist processing depth.
            <para>depth (int): Maximum nested playlist processing depth... 0 = do not process nested playlists.</para>
            <para>When playlist processing is enabled via the BASS_CONFIG_NET_PLAYLIST option, this option limits how deep into nested playlists BASS_StreamCreateURL will go. The default depth is 1, which means playlists within the root playlist will be processed, but not playlists within those playlists.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PREBUF_WAIT">
            <summary>
            Wait for pre-buffering when opening internet streams?
            <para>wait (bool): Wait for pre-buffering... <see langword="false"/> = no, <see langword="true"/> = yes.</para>
            <para>This setting determines whether <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> will wait for an amount of data to be downloaded before returning the new stream's handle. 
            The amount is determined by the BASS_CONFIG_NET_BUFFER and BASS_CONFIG_NET_PREBUF settings. 
            The default setting is disabled. When it is disabled, pre-buffering will happen asynchronously and playback will begin in a stalled state while pre-buffering is in progress. 
            The progress can be monitored with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/>.</para>
            <para>As well as internet streams, this config setting also applies to streams created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> and the STREAMFILE_BUFFER file system.
            <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> will never pre-buffer when using the STREAMFILE_BUFFERPUSH system.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ANDROID_SESSIONID">
            <summary>
            The audio session ID to use for output on Android. 
            <para>id (int): The session ID.</para>
            <para>This option allows a session ID to be specified for BASS to use with AAudio or AudioTrack output (OpenSL ES is not affected). The session ID can then be used to apply Android's AudioEffect-based effects on the BASS output (and anything else that uses the same session ID). The AudioManager generateAudioSessionId method can be used to generate a session ID for this.</para>
            <para>Changes take effect from the next <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_LIBSSL">
            <summary>
            The OpenSSL (or compatible) library to use for handling HTTPS connections.
            <para>filename (string pointer): The filename of the OpenSSL library to use... NULL = use default. This should include the full path if it is not in the system library search path.</para>
            <para>By default, BASS will try to use the system's OpenSSL library to handle HTTPS connections. It will look for libssl.so, libssl.so.10, or libssl.so.1.0.0. If the target system uses a different filename for it, or you want to use a custom OpenSSL build, this option should be set to that. That should be done before the first HTTPS connection is opened. If the specified library cannot be loaded, BASS will fallback to trying the defaults.</para>
            <para>BASS makes a copy of the provided string, so it does not need to persist beyond the call..</para>
            <para>This option is only available on the Linux and Android platforms.
            On Android, BASS will look for the library in the app's library directory if a full path is not provided. A BASS_SSL add-on is available, which will be used by default when present. If that is not present then the default is to use the system's libssl.so or libboringssl.so library, but note that is not possible when targetting Android 7 (API level 24) or above.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_WASAPI_PERSIST">
            <summary>
            Presist resp. retain Windows mixer settings when using WASAPI output?
            <para>retain (bool): Retain Windows mixer settings... <see langword="false"/> = no, <see langword="true"/> = yes (default).</para>
            <para>Changes should be made before calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_REC_WASAPI">
            <summary>
            Use WASAPI when recording?
            <para>enable (bool): Enable the use of WASAPI for recording? (default is <see langword="true"/>)</para>
            <para>WASAPI is always used when recording from loopback devices, but this config option determines whether it or DirectSound is used when recording from other devices. WASAPI is enabled by default when available (on Windows Vista and above). Changes take effect from the next <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> call, and any already initialized devices are unaffected.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ANDROID_AAUDIO">
            <summary>
            Enable AAudio output on Android? 
            <para>enable (bool): Enable AAudio output?</para>
            <para>Android has three audio APIs: AudioTrack, OpenSL ES, AAudio. AudioTrack is available in all Android versions. OpenSL ES was introduced in Android 2.3. AAudio was introduced in Android 8. BASS includes support for all three. AudioTrack is used if the BASS_DEVICE_AUDIOTRACK flag is specified with <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> (or on pre-2.3 Android). Otherwise, this option determes whether OpenSL ES or AAudio is used.</para>
            <para>The default setting is <see langword="true"/> (AAudio enabled) on Android 8.1 and above, and <see langword="false"/> on earlier Android versions. It can be set to <see langword="true"/> on Android 8.0 devices too but AAudio is known to be buggy/crash on some of those devices. The setting will be ignored on older Android versions where AAudio is not available. Changes take effect from the next <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_SAMPLE_ONEHANDLE">
            <summary>
            Use the same handle for a sample and its single playback channel?
            <para>onehandle (bool): Use the same handle for a sample and its single channel? (default is <see langword="true"/>)</para>
            <para>When a sample has a channel limit of only one (max = 1 with <see cref="M:Un4seen.Bass.Bass.BASS_SampleLoad(System.String,System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_SampleCreate(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>), the same handle may be used for the sample (HSAMPLE) and its playback channel (HCHANNEL), depending on this config setting. When the same handle is used, <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/> still needs to be called to create the playback channel.</para>
            <para>This config option is enabled by default. Changes take effect from the next <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/> call.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DEV_TIMEOUT">
            <summary>
            Sets or disables the device timeout.
            <para>timeout (int): device timeout in milliseconds (use 0 to disable it)</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_META">
            <summary>
            Request Shoutcast metadata from internet servers? 
            <para>metadata (bool): metadata... <see langword="false"/> = no, <see langword="true"/> = yes (default)</para>
            <para>By default, BASS will request Shoutcast metadata from the server when opening a URL, which is then available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_META). That can be disabled via this config option to save a little bandwidth if Shoutcast metadata is not required.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_RESTRATE">
            <summary>
            The restricted download rate for internet file streams.
            <para>rate (int): The download rate in bytes per second.</para>
            <para>This setting determines the maximum download speed for an internet file stream with rate restriction enabled via the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_RESTRATE"/> flag. The rate restriction only comes into effect while a stream's buffered data exceeds its <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_BUFFER"/> setting, and a download will otherwise be as fast as the connection allows. Note that a too low setting may result in a server closing (timing-out) the connection before the download is complete.</para>
            <para>The default setting is 20000. Changes only affect streams that are created afterwards, not any that already exist.</para>
            <para>As well as internet streams, this config setting also applies to 'buffered' user file streams created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_REC_DEFAULT">
            <summary>
            Include a "Default" entry in the recording device list? 
            <para>default (bool): If <see langword="true"/> (default), a 'Default' device will be included in the device list.</para>
            <para>This option adds a 'Default' entry to the recording device list, which maps to the device that is currently the system's default. Its input will automatically switch over when the system's default device setting changes</para>
            <para>When enabled, the 'Default' device will also become the default device to <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> (with device = -1). Both it and the device that it currently maps to will have the BASS_DEVICE_DEFAULT flag set by <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/>.</para>
            <para>This option is enabled by default, and can only be disabled before <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has been called.</para>
            <para><b>Platform-specific:</b> This config option is only available on Windows and macOS; a 'Default' entry is always included on other platforms. On Windows, the automatic device switching feature requires using WASAPI (not DirectSound) for recording.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NORAMP">
            <summary>
            The default playback ramping setting.
            <para>noramp (int): Enable or disable playback ramping... 0 = enable ramping, 1 = disable ramping, 2 = disable ramping-in only, 3 = disable ramping-out only.</para>
            <para>This config option determines the initial <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_NORAMP"/> attribute setting of new channels. Existing channels are unaffected by changes.</para>
            <para>The default setting is 0 (enable ramping).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_FILENAME">
            <summary>
            The filename of the loaded BASS library.
            <para>This is a read-only config (<see cref="M:Un4seen.Bass.Bass.BASS_GetConfigString(Un4seen.Bass.BASSConfig)"/>) option that gives the full path of the loaded BASS library.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_AC3_DYNRNG">
            <summary>
            BASS_AC3 add-on: dynamic range compression option
            <para>dynrng (bool): If <see langword="true"/> dynamic range compression is enbaled (default is <see langword="false"/>).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_WMA_BASSFILE">
            <summary>
            BASSWMA add-on: use BASS file handling.
            <para>bassfile (bool): Default is disabled (<see langword="false"/>).</para>
            <para>When enabled (<see langword="true"/>) BASSWMA uses BASS's file routines when playing local files. It uses the IStream interface to do that.
            This would also allow to support the "offset" parameter for WMA files with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>.
            The downside of enabling this feature is, that it stops playback while encoding from working.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_WMA_NETSEEK">
            <summary>
            BASSWMA add-on: enable network seeking?
            <para>seek (bool): If <see langword="true"/> seeking in network files/streams is enabled (default is <see langword="false"/>).</para>
            <para>If <see langword="true"/>, it allows seeking before the entire file has been downloaded/cached. Seeking is slow that way, so it's disabled by default.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_WMA_VIDEO">
            <summary>
            BASSWMA add-on: play audio from WMV (video) files?
            <para>playwmv (bool): If <see langword="true"/> (default) BASSWMA will play the audio from WMV video files. If <see langword="false"/> WMV files will not be played.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_WMA_ASYNC">
            <summary>
            BASSWMA add-on: use a seperate thread to decode the data?
            <para>async (bool): If <see langword="true"/> BASSWMA will decode the data in a seperate thread. If <see langword="false"/> (default) the normal file system will be used.</para>
            <para>
            The WM decoder can by synchronous (decodes data on demand) or asynchronous (decodes in the background).
            With the background decoding, BASSWMA buffers the data that it receives from the decoder for the STREAMPROC to access. 
            The start of playback/seeking may well be slightly delayed due to there being no data available immediately.
            Internet streams are only supported by the asynchronous system, but local files can use either, and BASSWMA uses the synchronous system by default.
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_FREEOLD">
            <summary>
            BASSCD add-on: Automatically free an existing stream when creating a new one on the same drive?
            <para>freeold (bool): Only one stream can exist at a time per CD drive. So if a stream using the same drive already exists, stream creation function calls will fail, unless this config option is enabled to automatically free the existing stream. This is enabled by default.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_RETRY">
            <summary>
            BASSCD add-on: Number of times to retry after a read error.
            <para>retries (int): Number of times to retry reading...0 = don't retry. The default is 2 retries.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_AUTOSPEED">
            <summary>
            BASSCD add-on: Automatically reduce the read speed when a read error occurs?
            <para>autospd (bool): By default, this option is disabled.</para>
            <para>If <see langword="true"/>, the read speed will be halved when a read error occurs, before retrying (if the BASS_CONFIG_CD_RETRY config setting allows).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_SKIPERROR">
            <summary>
            BASSCD add-on: Skip past read errors?
            <para>skip (bool): If <see langword="true"/>, reading will skip onto the next frame when a read error occurs, otherwise reading will stop.</para>
            <para>When skipping an error, it will be replaced with silence, so that the track length is unaffected. Before skipping past an error, BASSCD will first retry according to the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_RETRY"/> setting.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_CDDB_SERVER">
            <summary>
            BASSCD add-on: The server to use in CDDB requests.
            <para>server (string): The CDDB server address, in the form of "user:pass@server:port/path". The "user:pass@", ":port" and "/path" parts are optional; only the "server" part is required. If not provided, the port and path default to 80 and "/~cddb/cddb.cgi", respectively.</para>
            <para>A copy is made of the provided server string, so it need not persist beyond the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfigPtr(Un4seen.Bass.BASSConfig,System.IntPtr)"/> call. The default setting is "gnudb.gnudb.org".</para>
            <para>The proxy server, as configured via the BASS_CONFIG_NET_PROXY option, is used when connecting to the CDDB server.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_READ">
            <summary>
            BASSCD add-on: The read block size in frames (the default is 16).
            <para>server (int): The read block size in frames.</para>
            <para>The default is to read from CDs in 16 frame blocks. Some drives may perform better with a different number of frames. Changes only affect subsequently created CD streams, not any that already exist.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CD_TIMEOUT">
            <summary>
            BASSCD add-on: How long to wait (in milliseconds) for a drive to complete a command sent to it.
            <para>server (int): The timeout (in milliseconds).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_PRIORITY">
            <summary>
            BASSenc add-on: Encoder DSP priority (default -1000)
            <para>priority (int): The priorty determines where in the DSP chain the encoding is performed - all DSP with a higher priority will be present in the encoding. Changes only affect subsequent encodings, not those that have already been started. The default priority is -1000.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_QUEUE">
            <summary>
            BASSenc add-on: The maximum queue length (default 6000, 0=no limit)
            <para>limit (int): The async encoder queue size limit in milliseconds; 0=unlimited.</para>
            <para>When the queue's length is unlimited, its buffer will grow as needed to hold the queued data, otherwise the buffer will be preallocated according to the limit during encoder initialization. If the limit is exceeded or the buffer cannot grow due to lack of memory then data will be dropped. <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> can be used to get notification of when that happens, and <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetCount(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCount)"/> used to check how much data has been dropped.
            The default limit is 6 seconds (6000 milliseconds). Changes only apply to new encoders, not any already existing encoders.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_ACM_LOAD">
            <summary>
            BASSenc add-on: ACM codec name to give priority for the formats it supports.
            <para>codec (string pointer): The ACM codec name to give priority (e.g. 'l3codecp.acm').</para>
            <para>BASSenc does make a copy of the config string, so it can be freed right after calling it.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_CAST_TIMEOUT">
            <summary>
            BASSenc add-on: The time to wait to send data to a cast server (default 5000ms)
            <para>timeout (int): The time to wait, in milliseconds.</para>
            <para>When an attempt to send data is timed-out, the data is discarded. <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetNotify(System.Int32,Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC,System.IntPtr)"/> can be used to receive a notification of when this happens.</para>
            <para>The default timeout is 5 seconds (5000 milliseconds). Changes take immediate effect.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_CAST_PROXY">
            <summary>
            BASSenc add-on: Proxy server settings when connecting to Icecast and Shoutcast (in the form of "[user:pass@]server:port"... <see langword="null"/> = don't use a proxy but a direct connection).
            <para>proxy (string pointer): The proxy server settings, in the form of "[user:pass@]server:port"... <see langword="null"/> = don't use a proxy but make a direct connection (default). If only the "server:port" part is specified, then that proxy server is used without any authorization credentials.</para>
            <para>BASSenc does not make a copy of the config string, so it must reside in the heap (not the stack), eg. a global variable. This also means that the proxy settings can subsequently be changed at that location without having to call this function again.</para>
            <para>This setting affects how the following functions connect to servers: <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/>, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastGetStats(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeStats,System.String)"/>, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSetTitle(System.Int32,System.String,System.String)"/>.
            When a proxy server is used, it needs to support the HTTP 'CONNECT' method. The default setting is NULL (do not use a proxy). </para>
            <para>Changes take effect from the next internet stream creation call. By default, BASSenc will not use any proxy settings when connecting to Icecast and Shoutcast.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_CAST_BIND">
            <summary>
            BASSenc add-on: Sets a local IP address to use for cast server connections (<see langword="null"/> = any).
            <para>address (string pointer): The local IP address, to use for cast server connections (<see langword="null"/> = any, default).</para>
            <para>When a system has multiple networks available, this setting determines which is used by <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/> when connecting to a server and by subsequent <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastGetStats(System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeStats,System.String)"/> and <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSetTitle(System.Int32,System.String,System.String)"/> calls. 
            It also determines whether IPv4 or IPv6 is used when a server's hostname has DNS records for both. IPv4 is preferred by default if this option is unset (<see langword="null"/>). The setting is ignored if it is an IPv6 address while the server only has an IPv4 address, and vice versa.
            A copy is made of the provided string, so it does not need to persist beyond this call. Changes take effect from the next <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/> call, so different casters can use different IPs. The other BASS_Encode_CastXXX function calls will use the same IP from when the caster was setup.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_SERVER_CERT">
            <summary>
            BASSenc add-on: The certificate file for encrypted servers.
            <para>filename (string pointer): The filename of the certificate.</para>
            <para>This setting determines what certificate is used for SSL/TLS encrypted server connections. The file should be in PEM format. It can also include intermediate and root certificates (in that order) after the server's certificate. The corresponding private key also needs to be set via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_SERVER_KEY"/> option.</para>
            <para>A copy is made of the provided string, so it does not need to persist beyond the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> call. Changes take effect from the next <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerInit(System.Int32,System.String,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeServer,Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC,System.IntPtr)"/> call. Existing servers are unaffected.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_SERVER_KEY">
            <summary>
            BASSenc add-on: The private key file for encrypted servers.
            <para>filename (string pointer): The filename of the private key.</para>
            <para>This setting determines what private key is used for SSL/TLS encrypted server connections. The file should be in PEM format. The corresponding certificate also needs to be set via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_ENCODE_SERVER_CERT"/> option.</para>
            <para>A copy is made of the provided string, so it does not need to persist beyond the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> call. Changes take effect from the next <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_ServerInit(System.Int32,System.String,System.Int32,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeServer,Un4seen.Bass.AddOn.Enc.ENCODECLIENTPROC,System.IntPtr)"/> call. Existing servers are unaffected.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_COMPACT">
            <summary>
            BASSMIDI add-on: Automatically compact all soundfonts following a configuration change?
            <para>compact (bool): If <see langword="true"/>, all soundfonts are compacted following a MIDI stream being freed, or a <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> call.</para>
            <para>The compacting isn't performed immediately upon a MIDI stream being freed or <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamSetFonts(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_FONT[],System.Int32)"/> being called. It's actually done 2 seconds later (in another thread), so that if another MIDI stream starts using the soundfonts in the meantime, they aren't needlessly closed and reopened.</para>
            <para>Samples that have been preloaded by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_FontLoad(System.Int32,System.Int32,System.Int32)"/> are not affected by automatic compacting. Other samples that have been preloaded by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamLoadSamples(System.Int32)"/> are affected though, so it is probably wise to disable this option when using that function.</para>
            <para>By default, this option is enabled.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_VOICES">
            <summary>
            BASSMIDI add-on: The maximum number of samples to play at a time (polyphony).
            <para>voices (int): Maximum number of samples to play at a time... 1 (min) - 1000 (max).</para>
            <para>This setting determines the maximum number of samples that can play together in a single MIDI stream. This isn't necessarily the same thing as the maximum number of notes, due to presets often layering multiple samples. When there are no voices available to play a new sample, the voice with the lowest volume will be killed to make way for it.</para>
            <para>The more voices that are used, the more CPU that is required. So this option can be used to restrict that, for example on a less powerful system. The CPU usage of a MIDI stream can also be restricted via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CPU"/> attribute.</para>
            <para>Changing this setting only affects subsequently created MIDI streams, not any that have already been created. The default setting is 128 voices.</para>
            <para>Platform-specific</para>
            <para>The default setting is 100, except on iOS, where it is 40.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_AUTOFONT">
            <summary>
            BASSMIDI add-on: Automatically load matching soundfonts?
            <para>autofont (bool): If <see langword="true"/>, BASSMIDI will try to load a soundfont matching the MIDI file.</para>
            <para>This option only applies to local MIDI files, loaded using <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag,System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> via the plugin system). BASSMIDI won't look for matching soundfonts for MIDI files loaded from the internet.</para>
            <para>By default, this option is enabled.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_DEFFONT">
            <summary>
            BASSMIDI add-on: Default soundfont usage
            <para>filename (string): Filename of the default soundfont to use (<see langword="null"/> = no default soundfont).</para>
            <para>When setting the default soundfont, a copy is made of the filename, so it does not need to persist beyond the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfigPtr(Un4seen.Bass.BASSConfig,System.IntPtr)"/> call. If the specified soundfont cannot be loaded, the default soundfont setting will remain as it is. <see cref="M:Un4seen.Bass.Bass.BASS_GetConfigPtr(Un4seen.Bass.BASSConfig)"/> can be used to confirm what that is.</para>
            <para>On Windows, the default is to use one of the Creative soundfonts (28MBGM.SF2 or CT8MGM.SF2 or CT4MGM.SF2 or CT2MGM.SF2), if present in the windows system directory.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_IN_PORTS">
            <summary>
            BASSMIDI add-on: The number of MIDI input ports to make available
            <para>ports (int): Number of input ports... 0 (min) - 10 (max).</para>
            <para>MIDI input ports allow MIDI data to be received from other software, not only MIDI devices. Once a port has been initialized via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InInit(System.Int32,Un4seen.Bass.AddOn.Midi.MIDIINPROC,System.IntPtr)"/>, the ALSA client and port IDs can be retrieved from <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_InGetDeviceInfo(System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_DEVICEINFO)"/>, which other software can use to connect to the port and send data to it. Prior to initialization, an input port will have a client ID of 0.</para>
            <para>The default is for 1 input port to be available. Note: This option is only available on Linux.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIXER_FILTER">
            <summary>
            BASSmix add-on: The order of filter used to reduce aliasing (only available/used pre BASSmix 2.4.7, where BASS_CONFIG_SRC is used).
            <para>order (int): The filter order... 2 (min) to 50 (max), and even. If the value specified is outside this range, it is automatically capped.</para>
            <para>The filter order determines how abruptly the level drops at the cutoff frequency, or the roll-off. The levels rolls off at 6 dB per octave for each order. For example, a 4th order filter will roll-off at 24 dB per octave. A low order filter may result in some aliasing persisting, and sounds close to the cutoff frequency being attenuated. 
            Higher orders reduce those things, but require more processing.</para>
            <para>By default, a 4th order filter is used. Changes only affect channels that are subsequently plugged into a mixer, not those that are already plugged in.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIXER_BUFFER">
            <summary>
            BASSmix add-on: The source channel buffer size multiplier.
            <para>multiple (int): The buffer size multiplier... 1 (min) to 5 (max). If the value specified is outside this range, it is automatically capped.</para>
            <para>When a source channel has buffering enabled, the mixer will buffer the decoded data, so that it is available to the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)"/> functions. 
            To reach the source channel's buffer size, the multiplier (multiple) is applied to the BASS_CONFIG_BUFFER setting at the time of the mixer's creation. If the source is played at it's default rate, then the buffer only need to be as big as the mixer's buffer. 
            But if it's played at a faster rate, then the buffer needs to be bigger for it to contain the data that is currently being heard from the mixer. For example, playing a channel at 2x its normal speed would require the buffer to be 2x the normal size (multiple = 2).</para>
            <para>Larger buffers obviously require more memory, so the multiplier should not be set higher than necessary.</para>
            <para>The default multiplier is 2x. Changes only affect subsequently setup channel buffers. An existing channel can have its buffer reinitilized by disabling and then re-enabling the BASS_MIXER_CHAN_BUFFER flag using <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIXER_POSEX">
            <summary>
            BASSmix add-on: How far back to keep record of source positions to make available for <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPositionEx(System.Int32,Un4seen.Bass.BASSMode,System.Int32)"/>.
            <para>length (int): The length of time to back, in milliseconds.</para>
            <para>If a mixer is not a decoding channel (not using the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> flag), this config setting will just be a minimum and the mixer will always have a position record at least equal to its playback buffer length, as determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option.</para>
            <para>The default setting is 2000ms. Changes only affect newly created mixers, not any that already exist.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_SPLIT_BUFFER">
            <summary>
            BASSmix add-on: The splitter buffer length.
            <para>length (int): The buffer length in milliseconds... 100 (min) to 5000 (max). If the value specified is outside this range, it is automatically capped.</para>
            <para>When a source has its first splitter stream created, a buffer is allocated for its sample data, which all of its subsequently created splitter streams will share. This config option determines how big that buffer is. The default is 2000ms.</para>
            <para>The buffer will always be kept as empty as possible, so its size does not necessarily affect latency; it just determines how far splitter streams can drift apart before there are buffer overflow issues for those left behind.</para>
            <para>Changes do not affect buffers that have already been allocated; any sources that have already had splitter streams created will continue to use their existing buffers.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MP4_VIDEO">
            <summary>
            BASSaac add-on: play audio from mp4 (video) files?
            <para>playmp4 (bool): If <see langword="true"/> (default) BASSaac will play the audio from mp4 video files. If <see langword="false"/> mp4 video files will not be played.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_AAC_PRESCAN">
            <summary>
            BASSaac add-on: pre-scan ADTS AAC files for seek points and accurate length
            <para>prescan (bool): If <see langword="true"/> (default) BASSaac will prescan ADTS AAC files. If <see langword="false"/> prescan is disabled.</para>
            <para>If prescan is disabled, the BASS_STREAM_PRESCAN flag can be used to override that.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_AAC_MP4">
            <summary>
            BASSaac add-on: Support MP4 in BASS_AAC_StreamCreateXXX functions?
            <para>usemp4 (bool): If <see langword="true"/> BASSaac supports MP4 in the BASS_AAC_StreamCreateXXX functions. If <see langword="false"/> (default) only AAC is supported.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_WINAMP_INPUT_TIMEOUT">
            <summary>
            BASSWinamp add-on: Winamp input timeout.
            <para>timeout (int): The time (in milliseconds) to wait until timing out, because the plugin is not using the output system.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DSD_FREQ">
            <summary>
            BASSdsd add-on: the default sample rate when converting to PCM.
            <para>freq (int): the sample rate.</para>
            <para>This setting determines what sample rate is used by default when converting to PCM. The rate actually used may be different if the specified rate is not valid for a particular DSD rate, in which case it will be rounded up (or down if there are none higher) to the nearest valid rate; the valid rates are 1/8, 1/16, 1/32, etc. of the DSD rate down to a minimum of 44100 Hz.</para>
            <para>The default setting is 88200 Hz. Changes only affect subsequently created streams, not any that already exist.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DSD_GAIN">
            <summary>
            BASSdsd add-on: the default gain applied when converting to PCM.
            <para>gain (int): the gain in decibels.</para>
            <para>This setting determines what gain is applied by default when converting to PCM. Changes only affect subsequently created streams, not any that already exist. An existing stream's gain can be changed via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_GAIN"/> attribute.</para>
            <para>The default setting is 6dB.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_HLS_DOWNLOAD_TAGS">
            <summary>
            BASShls add-on: receive ID3v2 tags in DOWNLOADPROC callback functions?
            <para>tags (bool): if <see langword="true"/>, DOWNLOADPROC callback functions will receive ID3v2 tags.</para>
            <para>When this option is enabled, a stream's DOWNLOADPROC callback function will receive any ID3v2 tags that the stream contains. This option does not affect the availability of ID3v2 tags from BASS_ChannelGetTags.</para>
            <para>The default setting is <see langword="false"/>. Changes only affect subsequently created HLS streams, not any that already exist.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_HLS_BANDWIDTH">
            <summary>
            BASShls add-on: the maximum bitrate for stream selection from master playlists.
            <para>bitrate (int): The bitrate in bits per second... 0 = ignore bitrate.</para>
            <para>This option sets a maximum bitrate for the selection of a stream to play in a master playlist containing multiple streams. The stream with the closest bitrate that does not exceed it, or the stream with the lowest bitrate if they all exceed it, will be tried first. If that is unsuccessful then the next closest will be tried, and so on until one is successfully opened. If no bitrate has been set then the streams will be tried in their listed order.</para>
            <para>The stream selection is based on each stream's BANDWIDTH attribute, which is for the entire stream and could include video, not only audio.
            The default setting is 0. Changes only affect subsequently created HLS streams, not any that already exist.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_HLS_DELAY">
            <summary>
            BASShls add-on: the delay to aim for in live streams.
            <para>delay (int): the delay (in seconds) to aim for in live streams... 0 = the stream's default delay.</para>
            <para>A live stream's delay is determined by the total length of the media segments in its media playlist (excluding any delay that occurs before the sound reaches the stream). When that exceeds the target delay set via this option, the oldest segments will be skipped to bring the delay down to the target (but not below it). Setting the delay too low may result in stalling during playback.</para>
            <para>The default setting is 30 seconds. Changes only affect subsequently created HLS streams, not any that already exist.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_HLS_TSSCAN">
            <summary>
            BASShls add-on: 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_THREAD">
            <summary>
            FLAG: thread-specific setting
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSiOSSession">
            <summary>
            Audio session configuration on iOS (flags for the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_IOS_SESSION"/> option).
            </summary>
            <remarks>
            <para>By default, the audio session category is set to AVAudioSessionCategoryPlayback. If BASS_IOS_SESSION_AMBIENT is set then the category will be set to AVAudioSessionCategorySoloAmbient instead, or AVAudioSessionCategoryAmbient if BASS_IOS_SESSION_MIX or BASS_IOS_SESSION_DUCK is also set. If BASS_IOS_SESSION_SPEAKER is set or BASS_RecordInit has been called then the category will be set to AVAudioSessionCategoryPlayAndRecord (regardless of BASS_IOS_SESSION_AMBIENT). Descriptions of these categories and other options can be found in Apple's AVAudioSession documentation.</para>
            <para>When BASS's audio session configuration management is disabled (BASS_IOS_SESSION_DISABLE is set), BASS will still activate the session during initialization and after an interruption but do nothing else. Except for the "No Sound" device, the BASS_CONFIG_DEV_PERIOD option is disabled by this; the AVAudioSession setPreferredIOBufferDuration method can be used instead.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASSiOSSession.BASS_IOS_SESSION_MIX">
            <summary>
            Allow other audio to mix with the app's audio (enables kAudioSessionProperty_OverrideCategoryMixWithOthers).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSiOSSession.BASS_IOS_SESSION_DUCK">
            <summary>
            Also duck the other audio (enables kAudioSessionProperty_OtherMixableAudioShouldDuck).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSiOSSession.BASS_IOS_SESSION_AMBIENT">
            <summary>
            Use the ambient category (enables kAudioSessionCategory_SoloAmbientSound/AmbientSound instead of kAudioSessionCategory_MediaPlayback).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSiOSSession.BASS_IOS_SESSION_SPEAKER">
            <summary>
            Route the output to the speaker instead of the receiver. Enables AVAudioSessionCategoryOptionDefaultToSpeaker.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSiOSSession.BASS_IOS_SESSION_DISABLE">
            <summary>
            BASS's audio session configuration management so that the app can handle that itself.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSiOSSession.BASS_IOS_SESSION_DEACTIVATE">
            <summary>
            Deactivate the audio session when nothing is playing or recording. It is otherwise only deactivated when there are no initialized devices and during interruptions.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSiOSSession.BASS_IOS_SESSION_AIRPLAY">
            <summary>
            Allow playback on Airplay devices when recording (Airplay is always allowed when only playing). Enables AVAudioSessionCategoryOptionAllowAirPlay.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSiOSSession.BASS_IOS_SESSION_BTHFP">
            <summary>
            Allow Bluetooth HFP (hands-free) devices when recording (Bluetooth is always allowed when only playing). Enables AVAudioSessionCategoryOptionAllowBluetooth.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSiOSSession.BASS_IOS_SESSION_BTA2DP">
            <summary>
            Allow Bluetooth A2DP devices when recording (Bluetooth is always allowed when only playing). Enables AVAudioSessionCategoryOptionAllowBluetoothA2DP. 
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSDeviceInfo">
            <summary>
            BASS_DEVICEINFO flags to be used with <see cref="T:Un4seen.Bass.BASS_DEVICEINFO"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_NONE">
            <summary>
            The device is not enabled and not initialized.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_ENABLED">
            <summary>
            The device is enabled. It will not be possible to initialize the device if this flag is not present.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_DEFAULT">
            <summary>
            The device is the system default.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_INIT">
            <summary>
            The device is initialized, ie. <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has been called.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_LOOPBACK">
            <summary>
            The device is a loopback device.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_INPUT">
            <summary>
            The device is an input (capture) device.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_UNPLUGGED">
            <summary>
            The device is unplugged.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_DISABLED">
            <summary>
            The device is disabled.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_DEFAULTCOM">
            <summary>
            The device is the system default communication device.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICES_AIRPLAY">
            <summary>
            Flag: Used in the device paramater to enumerate Airplay receivers instead of soundcards.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_NETWORK">
            <summary>
            An audio endpoint device that the user accesses remotely through a network.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_SPEAKERS">
            <summary>
            A set of speakers.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_LINE">
            <summary>
            An audio endpoint device that sends a line-level analog signal to a line-input jack on an audio adapter or that receives a line-level analog signal from a line-output jack on the adapter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_HEADPHONES">
            <summary>
            A set of headphones.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_MICROPHONE">
            <summary>
            A microphone.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_HEADSET">
            <summary>
            An earphone or a pair of earphones with an attached mouthpiece for two-way communication.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_HANDSET">
            <summary>
            The part of a telephone that is held in the hand and that contains a speaker and a microphone for two-way communication.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_DIGITAL">
            <summary>
            An audio endpoint device that connects to an audio adapter through a connector for a digital interface of unknown type.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_SPDIF">
            <summary>
            An audio endpoint device that connects to an audio adapter through a Sony/Philips Digital Interface (S/PDIF) connector.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_HDMI">
            <summary>
            An audio endpoint device that connects to an audio adapter through a High-Definition Multimedia Interface (HDMI) connector.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_DISPLAYPORT">
            <summary>
            An audio endpoint device that connects to an audio adapter through a DisplayPort connector.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSDeviceInfo.BASS_DEVICE_TYPE_MASK">
            <summary>
            Bitmask to identify the device type.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSInfo">
            <summary>
            BASS_INFO flags to be used with <see cref="T:Un4seen.Bass.BASS_INFO"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInfo.DSCAPS_NONE">
            <summary>
            Non of the falgs are set
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInfo.DSCAPS_CONTINUOUSRATE">
            <summary>
            The device supports all sample rates between minrate and maxrate.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInfo.DSCAPS_EMULDRIVER">
            <summary>
            The device's drivers do NOT have DirectSound support, so it is being emulated. Updated drivers should be installed.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInfo.DSCAPS_CERTIFIED">
            <summary>
            The device driver has been certified by Microsoft. This flag is always set on WDM drivers.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInfo.DSCAPS_SECONDARYMONO">
            <summary>
            Mono samples are supported by hardware mixing.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInfo.DSCAPS_SECONDARYSTEREO">
            <summary>
            Stereo samples are supported by hardware mixing.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInfo.DSCAPS_SECONDARY8BIT">
            <summary>
            8-bit samples are supported by hardware mixing.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInfo.DSCAPS_SECONDARY16BIT">
            <summary>
            16-bit samples are supported by hardware mixing.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSRecordInfo">
            <summary>
            BASS_RECORDINFO flags to be used with <see cref="T:Un4seen.Bass.BASS_RECORDINFO"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordInfo.DSCAPS_NONE">
            <summary>
            Non of the flags is set
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordInfo.DSCAPS_EMULDRIVER">
            <summary>
            The device's drivers do NOT have DirectSound support, so it is being emulated. Updated drivers should be installed.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordInfo.DSCAPS_CERTIFIED">
            <summary>
            The device driver has been certified by Microsoft. This flag is always set on WDM drivers.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSRecordFormat">
            <summary>
            Formats flags of BASS_RECORDINFO.formats member to be used with <see cref="T:Un4seen.Bass.BASS_RECORDINFO"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_UNKNOWN">
            <summary>
            unknown format
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_1M08">
            <summary>
            11.025 kHz, Mono,   8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_1S08">
            <summary>
            11.025 kHz, Stereo, 8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_1M16">
            <summary>
            11.025 kHz, Mono,   16-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_1S16">
            <summary>
            11.025 kHz, Stereo, 16-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_2M08">
            <summary>
            22.05  kHz, Mono,   8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_2S08">
            <summary>
            22.05  kHz, Stereo, 8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_2M16">
            <summary>
            22.05  kHz, Mono,   16-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_2S16">
            <summary>
            22.05  kHz, Stereo, 16-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_4M08">
            <summary>
            44.1   kHz, Mono,   8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_4S08">
            <summary>
            44.1   kHz, Stereo, 8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_4M16">
            <summary>
            44.1   kHz, Mono,   16-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_4S16">
            <summary>
            44.1   kHz, Stereo, 16-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_48M08">
            <summary>
            48 kHz, Mono, 8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_48S08">
            <summary>
            48 kHz, Stereo, 8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_48M16">
            <summary>
            48 kHz, Mono, 16-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_48S16">
            <summary>
            48 kHz, Stereo, 16-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_96M08">
            <summary>
            96 kHz, Mono, 8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_96S08">
            <summary>
            96 kHz, Stereo, 8-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_96M16">
            <summary>
            96 kHz, Mono, 16-bit
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSRecordFormat.WAVE_FORMAT_96S16">
            <summary>
            96 kHz, Stereo, 16-bit
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS3DMode">
            <summary>
            3D Channel Mode flags to be used with e.g. <see cref="T:Un4seen.Bass.BASS_SAMPLE"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS3DMode.BASS_3DMODE_LEAVECURRENT">
            <summary>
            To be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DAttributes(System.Int32,Un4seen.Bass.BASS3DMode,System.Single,System.Single,System.Int32,System.Int32,System.Int32)"/> in order to leave the current 3D processing mode unchanged.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS3DMode.BASS_3DMODE_NORMAL">
            <summary>
            normal 3D processing
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS3DMode.BASS_3DMODE_RELATIVE">
            <summary>
            The channel's 3D position (position/velocity/orientation) are relative to the listener. 
            <para>When the listener's position/velocity/orientation is changed with <see cref="M:Un4seen.Bass.Bass.BASS_Set3DPosition(Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>, the channel's position relative to the listener does not change.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS3DMode.BASS_3DMODE_OFF">
            <summary>
            Turn off 3D processing on the channel, the sound will be played in the center.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSMode">
            <summary>
            Channel Position Mode flags to be used with e.g. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_BYTE">
            <summary>
            Byte position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_MUSIC_ORDER">
            <summary>
            Order.Row position (HMUSIC only).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_MIDI_TICK">
            <summary>
            Tick position (MIDI streams only).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_OGG">
            <summary>
            OGG bitstream number.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_CD_TRACK">
            <summary>
            CD Add-On: the track number.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_MIXER_DELAY">
            <summary>
            BASSmix Add-On: Get the amount remaining of any start delay that was set via <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>. 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_END">
            <summary>
            Trimmed end position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_LOOP">
            <summary>
            Loop start position
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_FLUSH">
            <summary>
            Flag: flush decoder/FX buffers
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_RESET">
            <summary>
            Flag: Reset user file buffers. This allows a user file stream with the BASS_STREAM_BLOCK flag set to be reset, so that it is ready to process new data. 
            This flag can only be used with the BASS_POS_BYTE mode, and pos must be 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_RELATIVE">
            <summary>
            Flag: The requested position is relative to the current position. pos is treated as signed in this case and can be negative.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_INEXACT">
            <summary>
            Flag: Allow inexact seeking. For speed, seeking may stop at the beginning of a block rather than partially processing the block to reach the requested position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_MUSIC_POSRESET">
            <summary>
            MOD Music Flag: Stop all notes when moving position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_MUSIC_POSRESETEX">
            <summary>
            MOD Music Flag: Stop all notes and reset bmp/etc when moving position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_MIXER_CHAN_NORAMPIN">
            <summary>
            Mixer Flag: Don't ramp-in the start after seeking.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_MIXER_RESET">
            <summary>
            Mixer Flag: Clear mixer's playback buffer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_DECODE">
            <summary>
            Get the decoding (not playing) position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_DECODETO">
            <summary>
            Flag: decode to the position instead of seeking.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_POS_SCAN">
            <summary>
            Flag: Scan the file to build a seek table up to the position, if it has not already been scanned.
            <para>Scanning will continue from where it left off previously rather than restarting from the beginning of the file each time. 
            This flag only applies to MP3/MP2/MP1 files and will be ignored with other file formats.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSMode.BASS_MIDI_DECAYSEEK">
            <summary>
            Midi Add-On: Let the old sound decay naturally (including reverb) when changing the position, including looping and such can also be used in <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> calls to have it apply to particular position changes.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSLevel">
            <summary>
            Level retrieval flags (to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSLevel.BASS_LEVEL_ALL">
            <summary>
            Retrieves mono levels
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSLevel.BASS_LEVEL_MONO">
            <summary>
            Retrieves mono levels
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSLevel.BASS_LEVEL_STEREO">
            <summary>
            Retrieves stereo levels
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSLevel.BASS_LEVEL_RMS">
            <summary>
            Optional Flag: If set it returns RMS levels instead of peak leavels
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSLevel.BASS_LEVEL_VOLPAN">
            <summary>
            Volume and Panning attribute affected level retrieval
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSLevel.BASS_LEVEL_NOREMOVE">
            <summary>
            Do not remove any sample data during level retrieval
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS3DAlgorithm">
            <summary>
            Software 3D mixing algorithm modes to be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> using the BASS_CONFIG_3DALGORITHM.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS3DAlgorithm.BASS_3DALG_DEFAULT">
            <summary>
            Default algorithm (currently translates to BASS_3DALG_OFF)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS3DAlgorithm.BASS_3DALG_OFF">
            <summary>
            Uses normal left and right panning. The vertical axis is ignored except for scaling of volume due to distance. 
            <para>Doppler shift and volume scaling are still applied, but the 3D filtering is not performed. 
            This is the most CPU efficient software implementation, but provides no virtual 3D audio effect. 
            Head Related Transfer Function processing will not be done. 
            Since only normal stereo panning is used, a channel using this algorithm may be accelerated by a 2D hardware voice if no free 3D hardware voices are available.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS3DAlgorithm.BASS_3DALG_FULL">
            <summary>
            This algorithm gives the highest quality 3D audio effect, but uses more CPU.
            <para>Requires Windows 98 2nd Edition or Windows 2000 that uses WDM drivers, if this mode is not available then BASS_3DALG_OFF will be used instead.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS3DAlgorithm.BASS_3DALG_LIGHT">
            <summary>
            This algorithm gives a good 3D audio effect, and uses less CPU than the FULL mode. 
            <para>Requires Windows 98 2nd Edition or Windows 2000 that uses WDM drivers, if this mode is not available then BASS_3DALG_OFF will be used instead.</para>
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSStreamProc">
            <summary>
            STREAMPROC flag used with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/> resp. used with a user sample stream to be used with <see cref="T:Un4seen.Bass.STREAMPROC"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamProc.STREAMPROC_DUMMY">
            <summary>
            Create a "dummy" stream.
            <para>A dummy stream doesn't have any sample data of its own, but a decoding dummy stream (with BASS_STREAM_DECODE flag) can be used to apply DSP/FX processing to any sample data, 
            by setting DSP/FX on the stream and feeding the data through <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>. 
            The dummy stream should have the same sample format as the data being fed through it.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamProc.STREAMPROC_PUSH">
            <summary>
            Create a "push" stream.
            <para>Instead of BASS pulling data from a STREAMPROC function, data is pushed to BASS via <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.IntPtr,System.Int32)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamProc.BASS_STREAMPROC_END">
            <summary>
            Flag to signify that the end of the stream is reached.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSStreamSystem">
            <summary>
            User file system flag to be used with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamSystem.STREAMFILE_NOBUFFER">
            <summary>
            Unbuffered file system (like also used by <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>).
            <para>The unbuffered file system is what is used by <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>. In this system, BASS does not do any intermediate buffering - 
            it simply requests data from the file as and when it needs it. This means that reading (<see cref="T:Un4seen.Bass.FILEREADPROC"/>) must be quick, 
            otherwise the decoding will be delayed and playback buffer underruns (old data repeated) are a possibility. 
            It's not so important for seeking (<see cref="T:Un4seen.Bass.FILESEEKPROC"/>) to be fast, as that is generally not required during decoding, except when looping a file.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamSystem.STREAMFILE_BUFFER">
            <summary>
            Buffered file system (like also used by <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>).
            <para>The buffered file system is what is used by <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>. 
            As the name suggests, data from the file is buffered so that it's readily available for decoding - 
            BASS creates a thread dedicated to "downloading" the data. This is ideal for when the data is coming from a source that has high latency, like the internet. 
            It's not possible to seek in buffered file streams, until the download has reached the requested position - it's not possible to seek at all if it's being streamed in blocks.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamSystem.STREAMFILE_BUFFERPUSH">
            <summary>
            Buffered, with the data pushed to BASS via <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.IntPtr,System.Int32)"/>.
            <para>The push buffered file system is the same as STREAMFILE_BUFFER, except that instead of the file data being pulled from the <see cref="T:Un4seen.Bass.FILEREADPROC"/> function in a "download" thread, 
            the data is pushed to BASS via <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutFileData(System.Int32,System.IntPtr,System.Int32)"/>. A <see cref="T:Un4seen.Bass.FILEREADPROC"/> function is still required, to get the initial data used in the creation of the stream.</para>
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSStreamFilePosition">
            <summary>
            Stream File Position modes to be used with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_CURRENT">
            <summary>
            Position that is to be decoded for playback next. This will be a bit ahead of the position actually being heard due to buffering.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_DOWNLOAD">
            <summary>
            Download progress of an internet file stream or "buffered" user file stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_END">
            <summary>
            End of the file, in other words the file length. When streaming in blocks, the file length is unknown, so the download buffer length is returned instead.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_START">
            <summary>
            Start of stream data in the file.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_CONNECTED">
            <summary>
            Internet file stream or "buffered" user file stream is still connected? 0 = no, 1 = yes.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_BUFFER">
            <summary>
            The amount of data in the buffer of an internet file stream or "buffered" user file stream. 
            <para>Unless streaming in blocks, this is the same as BASS_FILEPOS_DOWNLOAD.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_SOCKET">
            <summary>
            Returns the socket hanlde used for streaming.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_ASYNCBUF">
            <summary>
            The amount of data in the asynchronous file reading buffer. This requires that the BASS_ASYNCFILE flag was used at the stream's creation.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_SIZE">
            <summary>
            Total size of the file.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_BUFFERING">
            <summary>
            The percentage of buffering remaining before playback of an internet file stream or "buffered" user file stream can resume
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_AVAILABLE">
            <summary>
            The amount of data currently available to read from the current position.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_WMA_BUFFER">
            <summary>
            WMA add-on: internet buffering progress (0-100%)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSStreamFilePosition.BASS_FILEPOS_HLS_SEGMENT">
            <summary>
            HLS add-on: segment sequence number
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSVam">
            <summary>
            Voice allocation management flags.
            These flags enable hardware resource stealing... if the hardware has no	available voices, a currently playing buffer will be stopped to make room for the new buffer. 
            </summary>
            <remarks>
            NOTE: only samples loaded/created with the BASS_SAMPLE_VAM flag are considered for termination by the DX7 voice management.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASSVam.BASS_VAM_HARDWARE">
            <summary>
            Play the sample in hardware. If no hardware voices are available then the "play" call will fail
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSVam.BASS_VAM_SOFTWARE">
            <summary>
            Play the sample in software (ie. non-accelerated). No other VAM flags may be used together with this flag.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSVam.BASS_VAM_TERM_TIME">
            <summary>
            If there are no free hardware voices, the buffer to be terminated will be the one with the least time left to play.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSVam.BASS_VAM_TERM_DIST">
            <summary>
            If there are no free hardware voices, the buffer to be terminated will be one that was loaded/created with the BASS_SAMPLE_MUTEMAX flag and is beyond it's max distance. 
            If there are no buffers that match this criteria, then the "play" call will fail.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSVam.BASS_VAM_TERM_PRIO">
            <summary>
            If there are no free hardware voices, the buffer to be terminated will be the one with the lowest priority.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSFlag">
            <summary>
            Stream/Sample/Music/Recording/BASS_FX create flags to be used with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_SampleCreate(System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_SampleLoad(System.String,System.Int64,System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/>, <see cref="T:Un4seen.Bass.BASS_SAMPLE"/>,
            <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/> and 
            <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoCreate(System.Int32,Un4seen.Bass.BASSFlag)"/>, <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_ReverseCreate(System.Int32,System.Single,Un4seen.Bass.BASSFlag)"/>, <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_DecodeGet(System.Int32,System.Double,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,Un4seen.Bass.AddOn.Fx.BPMPROGRESSPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_BPM_CallbackSet(System.Int32,Un4seen.Bass.AddOn.Fx.BPMPROC,System.Double,System.Int32,Un4seen.Bass.AddOn.Fx.BASSFXBpm,System.IntPtr)"/> etc.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_DEFAULT">
            <summary>
            0 = default create stream: 16 Bit, stereo, no Float, hardware mixing, no Loop, no 3D, no speaker assignments...
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_8BITS">
            <summary>
            Use 8-bit resolution. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then the stream is 16-bit. 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_MONO">
            <summary>
            Decode/play the stream (MP3/MP2/MP1 only) in mono, reducing the CPU usage (if it was originally stereo).
            <para>This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMCHAN_NEW">
            <summary>
            BASS_SampleGetChannel: Get a new playback channel
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMCHAN_STREAM">
            <summary>
            BASS_SampleGetChannel: Create a stream
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_LOOP">
            <summary>
            Loop the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_3D">
            <summary>
            Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 
            <para>3D streams must be mono (chans=1). The SPEAKER flags can not be used together with this flag.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_SOFTWARE">
            <summary>
            Force the stream to not use hardware mixing.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_MUTEMAX">
            <summary>
            Sample: muted at max distance (3D only)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_VAM">
            <summary>
            Sample: uses the DX7 voice allocation &amp; management
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_FX">
            <summary>
            Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details.
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the stream. Requires DirectX 8 or above.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_FLOAT">
            <summary>
            Use 32-bit floating-point sample data (see <a href="../Overview.html#FloatingPoint">Floating-Point Channels</a> for details). WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_RECORD_PAUSE">
            <summary>
            Recording: Start the recording paused. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> to start it.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_RECORD_ECHOCANCEL">
            <summary>
            Recording: enable echo cancellation (only available on certain devices, like iOS).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_RECORD_AGC">
            <summary>
            Recording: enabled automatic gain control (only available on certain devices, like iOS).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_STREAM_PRESCAN">
            <summary>
            Enable pin-point accurate seeking (to the exact byte) on the MP3/MP2/MP1 stream.
            <para>This also increases the time taken to create the stream, due to the entire file being pre-scanned for the seek points.
            Note: BASS_STREAM_PRESCAN is ONLY needed for files with a VBR, files with a CBR are always accurate.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_STREAM_AUTOFREE">
            <summary>
            Automatically free the stream's resources when it has reached the end, or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_STREAM_RESTRATE">
            <summary>
            Restrict the download rate of the file to the rate required to sustain playback.
            <para>If this flag is not used, then the file will be downloaded as quickly as possible.
            This flag has no effect on "unbuffered" streams (buffer=<see langword="false"/>).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_STREAM_BLOCK">
            <summary>
            Download and play the file in smaller chunks.
            <para>Uses a lot less memory than otherwise, but it's not possible to seek or loop the stream - once it's ended, the file must be opened again to play it again. 
            This flag will automatically be applied when the file length is unknown. 
            This flag also has the effect of resticting the download rate. 
            This flag has no effect on "unbuffered" streams (buffer=<see langword="false"/>).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE">
            <summary>
            Decode the sample data, without outputting it. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. 
            <para>BASS_SAMPLE_SOFTWARE/3D/FX/AUTOFREE are all ignored when using this flag, as are the SPEAKER flags.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_STREAM_STATUS">
            <summary>
            Pass status info (HTTP/ICY tags) from the server to the DOWNLOADPROC callback during connection. 
            <para>This can be useful to determine the reason for a failure.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_FRONT">
            <summary>
            Front speakers (channel 1/2)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_REAR">
            <summary>
            Rear/Side speakers (channel 3/4)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_CENLFE">
            <summary>
            Center &amp; LFE speakers (5.1, channel 5/6)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_REAR2">
            <summary>
            Rear Center speakers (7.1, channel 7/8; same as SIDE)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_SIDE">
            <summary>
            Side Center speakers (7.1, channel 7/8)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_LEFT">
            <summary>
            Speaker Modifier: left channel only
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_RIGHT">
            <summary>
            Speaker Modifier: right channel only
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_FRONTLEFT">
            <summary>
            Front Left speaker only (channel 1)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_FRONTRIGHT">
            <summary>
            Front Right speaker only (channel 2)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_REARLEFT">
            <summary>
            Rear/Side Left speaker only (channel 3)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_REARRIGHT">
            <summary>
            Rear/Side Right speaker only (channel 4)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_CENTER">
            <summary>
            Center speaker only (5.1, channel 5)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_LFE">
            <summary>
            LFE speaker only (5.1, channel 6)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_SIDELEFT">
            <summary>
            Side Center Left speaker only (7.1, channel 7)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_SIDERIGHT">
            <summary>
            Side Center Right speaker only (7.1, channel 8)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_REAR2LEFT">
            <summary>
            Rear Center Left speaker only (7.1, channel 7; same as SIDELEFT)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_REAR2RIGHT">
            <summary>
            Rear Center Right speaker only (7.1, channel 8; same as SIDERIGHT)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR1">
            <summary>
            speakers Pair 1
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR2">
            <summary>
            speakers Pair 2
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR3">
            <summary>
            speakers Pair 3
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR4">
            <summary>
            speakers Pair 4
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR5">
            <summary>
            speakers Pair 5
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR6">
            <summary>
            Speakers Pair 6
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR7">
            <summary>
            Speakers Pair 7
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR8">
            <summary>
            Speakers Pair 8
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR9">
            <summary>
            Speakers Pair 9
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR10">
            <summary>
            Speakers Pair 10
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR11">
            <summary>
            Speakers Pair 11
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR12">
            <summary>
            Speakers Pair 12
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR13">
            <summary>
            Speakers Pair 13
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR14">
            <summary>
            Speakers Pair 14
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPEAKER_PAIR15">
            <summary>
            Speakers Pair 15
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_ASYNCFILE">
            <summary>
            Use an async look-ahead cache.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_UNICODE">
            <summary>
            File is a Unicode (16-bit characters) filename
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_OVER_VOL">
            <summary>
            Sample: override lowest volume
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_OVER_POS">
            <summary>
            Sample: override longest playing
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_OVER_DIST">
            <summary>
            Sample: override furthest from listener (3D only)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_WV_STEREO">
            <summary>
            BASSWV add-on: limit to stereo
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_AC3_DOWNMIX_2">
            <summary>
            BASS_AC3 add-on: downmix to stereo
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_AC3_DOWNMIX_4">
            <summary>
            BASS_AC3 add-on: downmix to quad
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_DSD_RAW">
            <summary>
            BASSdsd add-on: Produce raw DSD data instead of PCM. The DSD data is in blocks of 8 bits (1 byte) per-channel with the MSB being first/oldest. 
            DSD data is not playable by BASS, so the BASS_STREAM_DECODE flag is required.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_DSD_DOP">
            <summary>
            BASSdsd add-on: Produce DSD-over-PCM data (with 0x05/0xFA markers). DSD-over-PCM data is 24-bit, so the BASS_SAMPLE_FLOAT flag is required.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_DSD_DOP_AA">
            <summary>
            BASSdsd add-on: Produce DSD-over-PCM data with 0xAA markers. DSD-over-PCM data is 24-bit, so the BASS_SAMPLE_FLOAT flag is required.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_AC3_DOWNMIX_DOLBY">
            <summary>
            BASS_AC3 add-on: downmix to dolby
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_AC3_DYNAMIC_RANGE">
            <summary>
            BASS_AC3 add-on: enable dynamic range compression
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_AAC_FRAME960">
            <summary>
            BASS_AAC add-on: use 960 samples per frame
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_AAC_STEREO">
            <summary>
            BASS_AAC add-on: downmatrix to stereo
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_END">
            <summary>
            BASSmix add-on: end the stream when there are no sources
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_PAUSE">
            <summary>
            BASSmix add-on: don't process the source
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_NONSTOP">
            <summary>
            BASSmix add-on: don't stall when there are no sources
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_RESUME">
            <summary>
            BASSmix add-on: resume a stalled mixer immediately upon new/unpaused source
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_ABSOLUTE">
            <summary>
            BASSmix add-on: start is an absolute position
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_POSEX">
            <summary>
            BASSmix add-on: enable <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPositionEx(System.Int32,Un4seen.Bass.BASSMode,System.Int32)"/> support.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_NOSPEAKER">
            <summary>
            BASSmix add-on: ignore speaker arrangement
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_LIMIT">
            <summary>
            BASSmix add-on: Limit mixer processing to the amount available from this source
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_LIMIT">
            <summary>
            BASSmix add-on: Limit mixer processing to the amount available from this source
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_QUEUE">
            <summary>
            BASSmix add-on: queue sources
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_MATRIX">
            <summary>
            BASSmix add-on: Matrix mixing
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_MATRIX">
            <summary>
            BASSmix add-on: Matrix mixing
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_DOWNMIX">
            <summary>
            BASSmix add-on: downmix to stereo (or mono if mixer is mono)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_NORAMPIN">
            <summary>
            BASSmix add-on: don't ramp-in the start
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_NORAMPIN">
            <summary>
            BASSmix add-on: don't ramp-in the start
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPLIT_SLAVE">
            <summary>
            BASSmix add-on: only read buffered data
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_CHAN_BUFFER">
            <summary>
            BASSmix add-on: buffer source data for <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIXER_BUFFER">
            <summary>
            BASSmix add-on: buffer source data for <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_SPLIT_POS">
            <summary>
            BASSmix add-on: The splitter's length and position is based on the splitter's (rather than the source's) channel count.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_CD_SUBCHANNEL">
            <summary>
            BASSCD add-on: Read sub-channel data. 96 bytes of de-interleaved sub-channel data will be returned after each 2352 bytes of audio. This flag can not be used with the BASS_SAMPLE_FLOAT flag, and is ignored if the BASS_STREAM_DECODE flag is not used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_CD_SUBCHANNEL_NOHW">
            <summary>
            BASSCD add-on: Read sub-channel data, without using any hardware de-interleaving. This is identical to the BASS_CD_SUBCHANNEL flag, except that the de-interleaving is always performed by BASSCD even if the drive is apparently capable of de-interleaving itself.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_CD_C2ERRORS">
            <summary>
            BASSCD add-on: Include C2 error info. 296 bytes of C2 error info is returned after each 2352 bytes of audio (and optionally 96 bytes of sub-channel data).
            This flag cannot be used with the BASS_SAMPLE_FLOAT flag, and is ignored if the BASS_STREAM_DECODE flag is not used.
            <para>The first 294 bytes contain the C2 error bits (one bit for each byte of audio), followed by a byte containing the logical OR of all 294 bytes, 
            which can be used to quickly check if there were any C2 errors. The final byte is just padding.</para>
            <para>Note that if you request both sub-channel data and C2 error info, the C2 info will come before the sub-channel data!</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_NODRUMPARAM">
            <summary>
            BASSMIDI add-on: Do not apply default per-drum reverb and chorus levels and instead set them all to full. 
            The default is to set different levels for different types of drum, eg. lower levels on kick drums. The levels can subsequently be changed via the MIDI_EVENT_DRUM_REVERB and MIDI_EVENT_DRUM_CHORUS events. 
            This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, but will only take effect upon a program change or system reset. 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_NOSYSRESET">
            <summary>
            BASSMIDI add-on: Ignore system reset events (MIDI_EVENT_SYSTEM) when the system mode is unchanged. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_DECAYEND">
            <summary>
            BASSMIDI add-on: Let the sound decay naturally (including reverb) instead of stopping it abruptly at the end of the file. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_NOFX">
            <summary>
            BASSMIDI add-on: Disable the MIDI reverb/chorus processing. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_DECAYSEEK">
            <summary>
            BASSMIDI add-on: Let the old sound decay naturally (including reverb) when changing the position, including looping. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>, and can also be used in <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> calls to have it apply to particular position changes.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_NOCROP">
            <summary>
            BASSMIDI add-on: Do not remove empty space (containing no events) from the end of the file.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_NOTEOFF1">
            <summary>
            BASSMIDI add-on: Only release the oldest instance upon a note off event (MIDI_EVENT_NOTE with velocity=0) when there are overlapping instances of the note. Otherwise all instances are released. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_ASYNC">
            <summary>
            BASSMIDI add-on: Process events asynchronously in <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvents(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEventMode,Un4seen.Bass.AddOn.Midi.BASS_MIDI_EVENT[],System.Int32)"/> calls. 
            This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_SINCINTER">
            <summary>
            BASSMIDI add-on: Use sinc interpolated sample mixing. This increases the sound quality, but also requires more CPU. Otherwise linear interpolation is used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_FONT_MEM">
            <summary>
            BASSMIDI add-on: 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_FONT_MMAP">
            <summary>
            BASSMIDI add-on: Map the file into memory. This flag is ignored if the soundfont is packed as the sample data cannot be played directly from a mapping; it needs to be decoded. This flag is also ignored if the file is too large to be mapped into memory.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_FONT_XGDRUMS">
            <summary>
            BASSMIDI add-on: Use bank 127 in the soundfont for XG drum kits. 
            <para>When an XG drum kit is needed, bank 127 in soundfonts that have this flag set will be checked first, before falling back to bank 128 (the standard SF2 drum kit bank) if it is not available there.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_FONT_NOFX">
            <summary>
            BASSMIDI add-on: Ignore the soundfont's reverb and chorus settings.
            <para>If you would like to ignore the soundfont's reverb/chorus on only some presets/banks, then you can load 2 instances of it (one with BASS_MIDI_FONT_NOFX flag and one without), and then assign them as wanted in a BASS_MIDI_StreamSetFonts call. The 2 instances will share resources, so they won't really use any more memory than 1 instance.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_FONT_LINATTMOD">
            <summary>
            BASSMIDI add-on: Use a linear attack phase in SF2 modulation (pitch/filter) envelopes. Otherwise a convex curve is used. The attack phase is always linear in SFZ envelopes.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_FONT_LINDECVOL">
            <summary>
            BASSMIDI add-on: Use linear decay and release phases in volume envelopes. Otherwise a concave curve is used. The attack phase is always linear.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_FONT_NORAMPIN">
            <summary>
            BASSMIDI add-on: Never ramp-in the start of a sample in the soundfont. Otherwise a sample will be ramped-in if its data does not begin with a 0 (further away results in a longer ramp). This is only relevant when the volume envelope has no attack phase.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_FONT_NOLIMITS">
            <summary>
            BASSMIDI add-on: Do not limit SF2 generator values to emulate Creative/SoundBlaster hardware.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_FONT_MINFX">
            <summary>
            BASSMIDI add-on: Treat the reverb/chorus levels in the soundfont as minimums. The higher of them and the MIDI levels (CC91/93) will be used instead of the sum of both.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_PACK_NOHEAD">
            <summary>
            BASSMIDI add-on: Don't send a WAVE header to the encoder. If this flag is used then the sample format (mono 16-bit) must be passed to the encoder some other way, eg. via the command-line.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_PACK_16BIT">
            <summary>
            BASSMIDI add-on: Reduce 24-bit sample data to 16-bit before encoding.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MIDI_PACK_48KHZ">
            <summary>
            BASSMIDI add-on: Set encoding rate to 48000 Hz (else 44100 Hz).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_FX_FREESOURCE">
            <summary>
            BASS_FX add-on: Free the source handle as well?
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_FX_BPM_BKGRND">
            <summary>
            BASS_FX add-on: If in use, then you can do other stuff while detection's in process.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_FX_BPM_MULT2">
            <summary>
            BASS_FX add-on: If in use, then will auto multiply bpm by 2 (if BPM &lt; MinBPM*2)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_FX_TEMPO_ALGO_LINEAR">
            <summary>
            BASS_FX add-on (AddOn.Fx.BassFx.BASS_FX_TempoCreate): Uses a linear interpolation mode (simple).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_FX_TEMPO_ALGO_CUBIC">
            <summary>
            BASS_FX add-on (AddOn.Fx.BassFx.BASS_FX_TempoCreate): Uses a cubic interpolation mode (recommended, default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_FX_TEMPO_ALGO_SHANNON">
            <summary>
            BASS_FX add-on (AddOn.Fx.BassFx.BASS_FX_TempoCreate): Uses a 8-tap band-limited Shannon interpolation (complex, but not much better than cubic).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_FLOAT">
            <summary>
            Music: Use 32-bit floating-point sample data (see <a href="../Overview.html#FloatingPoint">Floating-Point Channels</a> for details). WDM drivers or the BASS_STREAM_DECODE flag are required to use this flag. 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_MONO">
            <summary>
            Music: Decode/play the mod music in mono, reducing the CPU usage (if it was originally stereo).
            This flag is automatically applied if BASS_DEVICE_MONO was specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_LOOP">
            <summary>
            Music: Loop the music. This flag can be toggled at any time using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelFlags(System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASSFlag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_3D">
            <summary>
            Music: Use 3D functionality. This is ignored if BASS_DEVICE_3D wasn't specified when calling <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>. 
            <para>3D streams must be mono (chans=1). The SPEAKER flags can not be used together with this flag.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_FX">
            <summary>
            Music: Enable the old implementation of DirectX 8 effects. See the <a href="../Overview.html#DX8DMOEffects">DX8 effect implementations</a> section for details.
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to add effects to the stream. Requires DirectX 8 or above.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_AUTOFREE">
            <summary>
            Music: Automatically free the music when it ends. This allows you to play a music and forget about it, as BASS will automatically free the music's resources when it has reached the end or when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> (or <see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>) is called. 
            <para>Note that some musics never actually end on their own (ie. without you stopping them).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_DECODE">
            <summary>
            Music: Decode the music into sample data, without outputting it. 
            <para>Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to retrieve decoded sample data. 
            BASS_SAMPLE_SOFTWARE/3D/FX/AUTOFREE are ignored when using this flag, as are the SPEAKER flags.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_PRESCAN">
            <summary>
            Music: Calculate the playback length of the music, and enable seeking in bytes. This slightly increases the time taken to load the music, depending on how long it is. 
            <para>In the case of musics that loop, the length until the loop occurs is calculated. Use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> to retrieve the length.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_RAMP">
            <summary>
            Music: Use "normal" ramping (as used in FastTracker 2).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_RAMPS">
            <summary>
            Music: Use "sensitive" ramping.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_SURROUND">
            <summary>
            Music: Apply XMPlay's surround sound to the music (ignored in mono).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_SURROUND2">
            <summary>
            Music: Apply XMPlay's surround sound mode 2 to the music (ignored in mono).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_FT2PAN">
            <summary>
            Music: Apply FastTracker 2 panning to XM files.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_FT2MOD">
            <summary>
            Music: Play .MOD file as FastTracker 2 would.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_PT1MOD">
            <summary>
            Music: Play .MOD file as ProTracker 1 would.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_NONINTER">
            <summary>
            Music: Use non-interpolated mixing. This generally reduces the sound quality, but can be good for chip-tunes.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_SINCINTER">
            <summary>
             Music: Sinc interpolated sample mixing.
            This increases the sound quality, but also requires quite a bit more processing. If neither this or the BASS_MUSIC_NONINTER flag is specified, linear interpolation is used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_POSRESET">
            <summary>
            Music: Stop all notes when seeking (using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>). 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_POSRESETEX">
            <summary>
            Music: Stop all notes and reset bpm/etc when seeking.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_STOPBACK">
            <summary>
            Music: Stop the music when a backward jump effect is played. This stops musics that never reach the end from going into endless loops. 
            <para>Some MOD musics are designed to jump all over the place, so this flag would cause those to be stopped prematurely. 
            If this flag is used together with the BASS_SAMPLE_LOOP flag, then the music would not be stopped but any BASS_SYNC_END sync would be triggered.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFlag.BASS_MUSIC_NOSAMPLE">
            <summary>
            Music: Don't load the samples. This reduces the time taken to load the music, notably with MO3 files, which is useful if you just want to get the name and length of the music without playing it.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSChannelType">
            <summary>
            Channel Type flags to be used with <see cref="T:Un4seen.Bass.BASS_CHANNELINFO"/> (see also <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/>)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_UNKNOWN">
            <summary>
            Unknown channel format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_SAMPLE">
            <summary>
            Sample channel. (HCHANNEL)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_RECORD">
            <summary>
            Recording channel. (HRECORD)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_MUSIC_MO3">
            <summary>
            MO3 format music.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM">
            <summary>
            User sample stream. This can also be used as a flag to test if the channel is any kind of HSTREAM.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_OGG">
            <summary>
            OGG VORBIS format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP1">
            <summary>
            MP1 format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP2">
            <summary>
            MP2 format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP3">
            <summary>
            MP2 format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AIFF">
            <summary>
            WAV format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_CA">
            <summary>
            CoreAudio codec stream. Additional information is avaliable via the <see cref="T:Un4seen.Bass.BASS_TAG_CACODEC"/> tag.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MF">
            <summary>
            Media Foundation codec stream. Additional information is avaliable via the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_MF"/> tag.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AM">
            <summary>
            Android Foundation codec stream. Additional information is avaliable via the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_AM_MIME"/> tag.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_SAMPLE">
            <summary>
            A sample (HSAMPLE) stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_DUMMY">
            <summary>
            A "dummy" stream (using STREAMPROC_DUMMY). 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_DEVICE">
            <summary>
            A "dummy" stream for device final output mix (using STREAMPROC_DEVICE).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MIXER">
            <summary>
            BASSmix mixer stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_SPLIT">
            <summary>
            BASSmix splitter stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WAV">
            <summary>
            WAV format stream, LOWORD=codec.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WAV_PCM">
            <summary>
            WAV format stream, PCM 16-bit.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WAV_FLOAT">
            <summary>
            WAV format stream, FLOAT 32-bit.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_MUSIC_MOD">
            <summary>
            MOD format music. This can also be used as a flag to test if the channel is any kind of HMUSIC.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_MUSIC_MTM">
            <summary>
            MTM format music.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_MUSIC_S3M">
            <summary>
            S3M format music.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_MUSIC_XM">
            <summary>
            XM format music.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_MUSIC_IT">
            <summary>
            IT format music.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WV">
            <summary>
            WavPack Lossless format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WV_H">
            <summary>
             WavPack Hybrid Lossless format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WV_L">
            <summary>
            WavPack Lossy format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WV_LH">
            <summary>
             WavPack Hybrid Lossy format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_CD">
            <summary>
            Audio-CD, CDA
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WMA">
            <summary>
            WMA format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WMA_MP3">
            <summary>
            MP3 over WMA format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_FLAC">
            <summary>
            FLAC format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_FLAC_OGG">
            <summary>
            FLAC OGG format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_OFR">
            <summary>
            Optimfrog format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_APE">
            <summary>
            APE format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MPC">
            <summary>
            MPC format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AAC">
            <summary>
            AAC format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP4">
            <summary>
            MP4 format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_SPX">
            <summary>
            Speex format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_ALAC">
            <summary>
            Apple Lossless (ALAC) format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_TTA">
            <summary>
            TTA format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AC3">
            <summary>
            AC3 format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_OPUS">
            <summary>
            Opus format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WINAMP">
            <summary>
            Winamp input format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_DSD">
            <summary>
            Direct Stream Digital (DSD) format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MIDI">
            <summary>
            MIDI sound format stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_ADX">
            <summary>
            ADX format stream.
            <para>ADX is a lossy proprietary audio storage and compression format developed by CRI Middleware specifically for use in video games, it is derived from ADPCM.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AIX">
            <summary>
            AIX format stream.
            <para>Only for ADX of all versions (with AIXP support).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_TEMPO">
            <summary>
            BASS_FX tempo stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_REVERSE">
            <summary>
            BASS_FX reverse stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_VIDEO">
            <summary>
            Video format stream.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSData">
            <summary>
            Flags to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_AVAILABLE">
            <summary>
            Query how much data is buffered
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT_INDIVIDUAL">
            <summary>
            FFT flag: FFT for each channel, else all combined
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT_NOWINDOW">
            <summary>
            FFT flag: no Hanning window
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT_REMOVEDC">
            <summary>
            FFT flag: pre-remove DC bias
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT_COMPLEX">
            <summary>
            FFT flag: return complex data
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT_NYQUIST">
            <summary>
            FFT flag: return extra Nyquist value
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_NOREMOVE">
            <summary>
            flag: don't remove data from (recording) buffer
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FIXED">
            <summary>
            flag: return 8.24 fixed-point data
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FLOAT">
            <summary>
            flag: return floating-point sample data
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT256">
            <summary>
            256 sample FFT (returns 128 floating-point values)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT512">
            <summary>
            512 sample FFT (returns 256 floating-point values)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT1024">
            <summary>
            1024 sample FFT (returns 512 floating-point values)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT2048">
            <summary>
            2048 sample FFT (returns 1024 floating-point values)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT4096">
            <summary>
            4096 sample FFT (returns 2048 floating-point values)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT8192">
            <summary>
            8192 sample FFT (returns 4096 floating-point values)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT16384">
            <summary>
            16384 sample FFT (returns 8192 floating-point values)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSData.BASS_DATA_FFT32768">
            <summary>
            32768 sample FFT (returns 16384 floating-point values)
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSActive">
            <summary>
            <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> return values.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSActive.BASS_ACTIVE_STOPPED">
            <summary>
            The channel is not active, or handle is not a valid channel.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSActive.BASS_ACTIVE_PLAYING">
            <summary>
            The channel is playing (or recording).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSActive.BASS_ACTIVE_STALLED">
            <summary>
            Playback of the stream has been stalled due to there not being enough sample data to continue playing. The playback will automatically resume once there's sufficient data to do so.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSActive.BASS_ACTIVE_PAUSED">
            <summary>
            The channel is paused.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSActive.BASS_ACTIVE_PAUSED_DEVICE">
            <summary>
            The channel's device is paused.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSActive.BASS_ACTIVE_WAITING">
            <summary>
            BassMix: The channel is waiting to start because it was delayed by <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamAddChannelEx(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.Int64,System.Int64)"/>. 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSActive.BASS_ACTIVE_QUEUED">
            <summary>
            BassMix: The channel is waiting in a queue.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSInput">
            <summary>
            <see cref="M:Un4seen.Bass.Bass.BASS_RecordSetInput(System.Int32,Un4seen.Bass.BASSInput,System.Single)"/> flags.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInput.BASS_INPUT_NONE">
            <summary>
            No input flag change.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInput.BASS_INPUT_OFF">
            <summary>
            Disable the input. This flag can't be used when the device supports only one input at a time.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInput.BASS_INPUT_ON">
            <summary>
            Enable the input. If the device only allows one input at a time, then any previously enabled input will be disabled by this.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSInputType">
            <summary>
            <see cref="M:Un4seen.Bass.Bass.BASS_RecordSetInput(System.Int32,Un4seen.Bass.BASSInput,System.Single)"/> flags.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_ERROR">
            <summary>
            The type of input is errorness.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_MASK">
            <summary>
            The type of input is also indicated in the high 8-bits of <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInput(System.Int32,System.Single@)"/> (use BASS_INPUT_TYPE_MASK to test the return value).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_UNDEF">
            <summary>
            Anything that is not covered by the other types
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_DIGITAL">
            <summary>
            Digital input source, for example, a DAT or audio CD.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_LINE">
            <summary>
            Line-in. On some devices, "Line-in" may be combined with other analog sources into a single BASS_INPUT_TYPE_ANALOG input.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_MIC">
            <summary>
            Microphone.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_SYNTH">
            <summary>
            Internal MIDI synthesizer.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_CD">
            <summary>
            Analog audio CD.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_PHONE">
            <summary>
            Telephone.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_SPEAKER">
            <summary>
            PC speaker.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_WAVE">
            <summary>
            The device's WAVE/PCM output.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_AUX">
            <summary>
            Auxiliary. Like "Line-in", "Aux" may be combined with other analog sources into a single BASS_INPUT_TYPE_ANALOG input on some devices.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSInputType.BASS_INPUT_TYPE_ANALOG">
            <summary>
            Analog, typically a mix of all analog sources (what you hear).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSTag">
            <summary>
            Types of what's returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_ID3">
            <summary>
            ID3v1 tags : A pointer to a 128 byte block is returned (see <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_ID3"/>).
            <para>See <a href="http://www.id3.org/id3v1.html">www.id3.org</a> for details of the block's structure.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_ID3V2">
            <summary>
            ID3v2 tags : A pointer to a variable length block is returned.
            <para>See <a href="http://www.id3.org">www.id3.org</a> for details of the block's structure.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_OGG">
            <summary>
            OGG comments : Only available when streaming an OGG file. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_HTTP">
            <summary>
            HTTP headers : Only available when streaming from a HTTP server. A pointer to a series of null-terminated ANSI strings is returned, the final string ending with a double null.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_ICY">
            <summary>
            ICY headers : A pointer to a series of null-terminated ANSI strings is returned, the final string ending with a double null.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_META">
            <summary>
            ICY (Shoutcast) metadata :  A single null-terminated ANSI string containing the current stream title and url (usually omitted). The format of the string is: StreamTitle='xxx';StreamUrl='xxx';
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_APE">
            <summary>
            APE (v1 or v2) tags : Only available when streaming an APE file. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MP4">
            <summary>
            iTunes/MP4 metadata : Only available when streaming a MP4 file. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_WMA">
            <summary>
            WMA header tags: WMA tags : Only available when streaming a WMA file. A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_VENDOR">
            <summary>
            OGG encoder : A single null-terminated UTF-8 string.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_LYRICS3">
            <summary>
            Lyric3v2 tag : A single ANSI string is returned, containing the Lyrics3v2 information. See <a href="http://www.id3.org/Lyrics3v2">www.id3.org/Lyrics3v2</a> for details of its format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_WMA_META">
            <summary>
            WMA mid-stream tag: a single UTF-8 string.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_CA_CODEC">
            <summary>
            Apple CoreAudio codec info : <see cref="T:Un4seen.Bass.BASS_TAG_CACODEC"/> structure.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_CUE">
            <summary>
            FLAC cuesheet : <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_CUE"/> structure (which includes <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK"/> and <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK_INDEX"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_WMA_CODEC">
            <summary>
            WMA codec: A description of the codec used by the file. 2 null-terminated UTF-8 strings are returned, with the 1st string being the name of the codec, and the 2nd containing additional information like what VBR setting was used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MF">
            <summary>
            Media Foundation tags :  A pointer to a series of null-terminated UTF-8 strings is returned, the final string ending with a double null.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_WAVEFORMAT">
            <summary>
            WAVE format : A pointer to a <see cref="T:Un4seen.Bass.WAVEFORMATEXT"/> structure is returned.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_AM_NAME">
            <summary>
            Android Media codec name : ASCII string
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_ID3V2_2">
            <summary>
            ID3v2 tags (2nd block) : variable length block
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_AM_MIME">
            <summary>
            Android Media MIME type : ASCII string
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_LOCATION">
            <summary>
            // redirected URL : ASCII string
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_INFO">
            <summary>
            RIFF/WAVE tags : array of null-terminated ANSI strings.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_BEXT">
            <summary>
            BWF/RF64 tags (Broadcast Audio Extension) : A pointer to a variable length block is returned (see <see cref="T:Un4seen.Bass.BASS_TAG_BEXT"/>).
            <para>See the <a href="http://www.ebu.ch/CMSimages/en/tec_doc_t3285_tcm6-10544.pdf">EBU specification</a> for details of the block's structure.</para>
            <para>When reading BWF tags into a <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> structure e.g. via <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> the following mapping is performed if no RIFF_INFO tags are present:</para>
            <para>Description = Title (max. 256 chars)</para>
            <para>Originator = Artist (max. 32 chars)</para>
            <para>OriginatorReference = EncodedBy (max. 32 chars)</para>
            <para>OriginationDate = Year (in format 'yyyy-mm-dd hh:mm:ss')</para>
            <para>TimeReference = Track</para>
            <para>UMID = Copyright (max. 64 chars)</para>
            <para>CodingHistory = Comment</para>
            <para>However, if RIFF_INFO tags are present the BWF tags are present in the NativeTags.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_CART">
            <summary>
            RIFF/BWF Radio Traffic Extension tags : A pointer to a variable length block is returned (see <see cref="T:Un4seen.Bass.BASS_TAG_CART"/>).
            <para>See the <a href="ftp://ftp.orban.com/Audicy/Cart_Chunk_AES46/">EBU specifications</a> for details of the block's structure.</para>
            <para>When reading BWF tags into a <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> structure e.g. via <see cref="M:Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(System.String)"/> the following mapping is performed if no RIFF_INFO tags are present:</para>
            <para>Title = Title (max. 64 chars)</para>
            <para>Artist = Artist (max. 64 chars)</para>
            <para>Category = Grouping (max. 64 chars)</para>
            <para>Classification = Mood (max. 64 chars)</para>
            <para>ProducerAppID = Publisher (max. 64 chars)</para>
            <para>ProducerAppVersion = EncodedBy (max. 64 chars)</para>
            <para>TagText = Comment</para>
            <para>However, if RIFF_INFO tags are present the CART tags are present in the NativeTags.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_DISP">
            <summary>
            RIFF DISP text chunk: a single ANSI string.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_CUE">
            <summary>
            RIFF CUE chunk: see <see cref="T:Un4seen.Bass.BASS_TAG_CUE"/> structure.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_SMPL">
            <summary>
            RIFF SMPL chunk: see <see cref="T:Un4seen.Bass.BASS_TAG_SMPL"/> structure.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_APE_BINARY">
            <summary>
            + index# : <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_APE_BINARY"/> structure.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MUSIC_NAME">
            <summary>
            MOD music name : a single ANSI string.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MUSIC_MESSAGE">
            <summary>
            MOD message : a single ANSI string.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MUSIC_ORDERS">
            <summary>
            MOD music order list: BYTE array of pattern numbers played at that order position.
            <para>Pattern number 254 is "+++" (skip order) and 255 is "---" (end song). You can use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> with BASS_POS_MUSIC_ORDER to get the length of the array.
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MUSIC_AUTH">
            <summary>
            MOD music author: UTF-8 string, only available in files created with the OpenMPT tracker.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MUSIC_INST">
            <summary>
            + instrument#, MOD instrument name : ANSI string
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MUSIC_CHAN">
            <summary>
            + channel #, MOD channel name : ANSI string
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MUSIC_SAMPLE">
            <summary>
            + sample#, MOD sample name : ANSI string
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_MIDI_TRACK">
            <summary>
            + track#, track text : array of null-terminated ANSI strings
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_ADX_LOOP">
            <summary>
             ADX tags: A pointer to the ADX loop structure (see <see cref="T:Un4seen.Bass.AddOn.Adx.BASS_ADX_TAG_LOOP"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_PICTURE">
            <summary>
            + index# : <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_PICTURE"/> structure.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_DSD_ARTIST">
            <summary>
            DSDIFF artist : ASCII string
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_DSD_TITLE">
            <summary>
            DSDIFF title : ASCII string
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_DSD_COMMENT">
            <summary>
            + index, DSDIFF comment : A pointer to the DSDIFF comment tag structure (see <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_DSD_COMMENT"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_HLS_EXTINF">
            <summary>
            HLS tags: segment's EXTINF tag, a single UTF-8 string
            </summary>
            <remarks>The current segment's EXTINF tag in the media playlist. A single UTF-8 string is returned, containing the duration of the segment and possibly a title too (separated by a comma). This will be updated every time a new segment begins downloading.</remarks>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_HLS_STREAMINF">
            <summary>
            HLS tags: segment's EXT-X-STREAM-INF tag, a single UTF-8 string
            </summary>
            <remarks>The EXT-X-STREAM-INF tag from the master playlist for the media playlist that is being used. A single UTF-8 string is returned. This will only be available if a master playlist was opened, rather than a media playlist directly.</remarks>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_HLS_DATE">
            <summary>
            HLS tags: segment's EXT-X-PROGRAM-DATE-TIME tag, a single UTF-8 string
            </summary>
            <remarks>The initial EXT-X-PROGRAM-DATE-TIME tag value in the media playlist. A single string is returned, containg the start date and time in ISO/IEC 8601:2004 form. This will not be updated with the value of any later EXT-X-PROGRAM-DATE-TIME tags that are received.</remarks>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_HLS_SDT">
            <summary>
            HLS tags: DVB SDT, variable length block
            </summary>
            <remarks>The current MPEG-TS/DVB Service Description Table (SDT). See the DVB spec for details on the SDT's format.</remarks>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_HLS_EMSG">
            <summary>
            HLS tags: EMSG, variable length block
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSTag.BASS_TAG_UNKNOWN">
            <summary>
            Unknown tags : not supported tags
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSAttribute">
            <summary>
            Channel attribute options used by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_FREQ">
            <summary>
            The sample rate of a channel.
            <para>freq: The sample rate... 0 = original rate (when the channel was created).</para>
            <para>This attribute applies to playback of the channel, and does not affect the channel's sample data, so has no real effect on decoding channels. It is still adjustable though, so that it can be used by the <see cref="N:Un4seen.Bass.AddOn.Mix">BassMix</see> add-on, and anything else that wants to use it.</para>
            <para>It is not possible to change the sample rate of a channel if the "with FX flag" <a href="../Overview.html#DX8DMOEffects">DX8 effect implementation</a> enabled on it, unless DirectX 9 or above is installed.</para>
            <para>Increasing the sample rate of a stream or MOD music increases its CPU usage, and reduces the length of its playback buffer in terms of time. If you intend to raise the sample rate above the original rate, then you may also need to increase the buffer length via the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option to avoid break-ups in the sound.</para>
            <para>When using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSlideAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single,System.Int32)"/> to slide this attribute, the BASS_SLIDE_LOG flag can be used to make a slide logarithmic rather than linear.</para>
            <para><b>Platform-specific</b></para>
            <para>When using DirectSound output on Windows, the sample rate will get rounded down to a whole number during playback.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL">
            <summary>
            The volume level of a channel.
            <para>volume: The volume level... 0 (silent) to 1 (full). This can go above 1.0 for amplification.</para>
            <para>This attribute applies to playback of the channel, and does not affect the channel's sample data, so has no real effect on decoding channels. It is still adjustable though, so that it can be used by the <see cref="N:Un4seen.Bass.AddOn.Mix">BassMix</see> add-on, and anything else that wants to use it.
            The BASS_FX_VOLUME effect can be used via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/> to change the level of a channel's sample data.</para>
            <para>When using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSlideAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single,System.Int32)"/> to slide this attribute, a negative volume value can be used to fade-out and then stop the channel.
            When the linear volume curve is in use, the BASS_SLIDE_LOG flag can also be used to make a slide logarithmic rather than linear.</para>
            <para>When using DirectSound output on Windows, amplification is not supported so this attribute will be limited to 1.0. On platforms/architectures without floating-point support (see BASS_CONFIG_FLOAT), amplification is limited to 16x.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_PAN">
            <summary>
            The panning/balance position of a channel.
            <para>pan: The pan position... -1 (full left) to +1 (full right), 0 = centre.</para>
            <para>This attribute applies to playback of the channel, and does not affect the channel's sample data, so has no real effect on decoding channels. It is still adjustable though, so that it can be used by the <see cref="N:Un4seen.Bass.AddOn.Mix">BassMix</see> add-on, and anything else that wants to use it.</para>
            <para>It is not possible to set the pan position of a 3D channel. It is also not possible to set the pan position when using <a href="../Overview.html#SpeakerAssignement">speaker assignment</a>, but if needed, it can be done via a <see cref="T:Un4seen.Bass.DSPPROC">DSP function</see> instead (not on mono channels).</para>
            <para><b>Platform-specific</b></para>
            <para>On Windows, this attribute has no effect when <a href="../Overview.html#SpeakerAssignement">speaker assignment</a> is used, except on Windows Vista and newer with the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_VISTA_SPEAKERS"/> config option enabled. Balance control could be implemented via a <see cref="T:Un4seen.Bass.DSPPROC">DSP function</see> instead</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_EAXMIX">
            <summary>
            The wet (reverb) / dry (no reverb) mix ratio on a sample, stream, or MOD music channel with 3D functionality.
            <para>mix: The wet / dry ratio... 0 (full dry) to 1 (full wet), -1 = automatically calculate the mix based on the distance (the default).</para>
            <para>Obviously, EAX functions have no effect if the output device does not support EAX. <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/> can be used to check that. EAX only affects 3D channels, but EAX functions do not require <see cref="M:Un4seen.Bass.Bass.BASS_Apply3D"/> to apply the changes.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">Additional ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_NOEAX</term><description>The channel does not have EAX support. EAX only applies to 3D channels that are mixed by the hardware/drivers. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> can be used to check if a channel is being mixed by the hardware.</description></item>
            </list>
            </para>
            <para>EAX is only supported on Windows.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_NOBUFFER">
            <summary>
            Non-Windows: Disable playback buffering?
            <para>nobuffer: Disable playback buffering... 0 = no, else yes..</para>
            <para>A playing channel is normally asked to render data to its playback buffer in advance, via automatic buffer updates or the <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> functions, ready for mixing with other channels to produce the final mix that is given to the output device.
            When this attribute is switched on (the default is off), that buffering is skipped and the channel will only be asked to produce data as it is needed during the generation of the final mix. This allows the lowest latency to be achieved, but also imposes tighter timing requirements on the channel to produce its data and apply any DSP/FX (and run mixtime syncs) that are set on it; if too long is taken, there will be a break in the output, affecting all channels that are playing on the same device.</para>
            <para>The channel's data is still placed in its playback buffer when this attribute is on, which allows <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> to be used, although there is likely to be less data available to them due to the buffer being less full.</para>
            <para>This attribute can be changed mid-playback. If switched on, any already buffered data will still be played, so that there is no break in sound.</para>
            <para>This attribute is not available on Windows, as BASS does not generate the final mix.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VBR">
            <summary>
            Unknown, Gets the VBR vallue?
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_CPU">
            <summary>
            The CPU usage of a channel.
            <para>cpu: The CPU usage (in percentage).</para>
            <para>This attribute gives the percentage of CPU that the channel is using, including the time taken by decoding and DSP processing, and any FX that are not using the "with FX flag" <a href="../Overview.html#DX8DMOEffects">DX8 effect implementation</a>. It does not include the time taken to add the channel's data to the final output mix during playback. The processing of some add-on stream formats may also not be entirely included, if they use additional decoding threads; see the add-on documentation for details.</para>
            <para>Like <see cref="M:Un4seen.Bass.Bass.BASS_GetCPU"/>, this function does not strictly tell the CPU usage, but rather how timely the processing is. For example, if it takes 10ms to generate 100ms of data, that would be 10%. If the reported usage exceeds 100%, that means the channel's data is taking longer to generate than to play. The duration of the data is based on the channel's current sample rate (<see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_FREQ"/>).</para>
            <para>A channel's CPU usage is updated whenever it generates data. That could be during a playback buffer update cycle, or a <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> call, or a <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> call. For a decoding channel, it would be in a <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> call.</para>
            <para>This attribute is read-only, so cannot be modified via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_SRC">
            <summary>
            The sample rate conversion quality of a channel.
            <para>quality: The sample rate conversion quality... 0 = linear interpolation, 1 = 8 point sinc interpolation, 2 = 16 point sinc interpolation, 3 = 32 point sinc interpolation, 4 = 64 point sinc interpolation. Other values are also accepted but will be interpreted as 0 or 4, depending on whether they are lower or higher.</para>
            <para>When a channel has a different sample rate to what the output device is using, the channel's sample data will need to be converted to match the output device's rate during playback. This attribute determines how that is done. The linear interpolation option uses less CPU, but the sinc interpolation gives better sound quality (less aliasing), with the quality and CPU usage increasing with the number of points. A good compromise for lower spec systems could be to use sinc interpolation for music playback and linear interpolation for sound effects.</para>
            <para>Whenever possible, a channel's sample rate should match the output device's rate to avoid the need for any sample rate conversion. The device's sample rate could be used in <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> or <see cref="N:Un4seen.Bass.AddOn.Midi"/> stream creation calls, for example.</para>
            <para>The sample rate conversion occurs (when required) during playback, after the sample data has left the channel's playback buffer, so it does not affect the data delivered by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>. Although this attribute has no direct effect on decoding channels, it is still available so that it can be used by the <see cref="N:Un4seen.Bass.AddOn.Mix"/> add-on and anything else that wants to use it.</para>
            <para>This attribute can be set at any time, and changes take immediate effect. A channel's initial setting is determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_SRC"/> config option, or <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_SRC_SAMPLE"/> in the case of a sample channel.</para>
            <para><b>Platform-specific</b></para>
            <para>On Windows, sample rate conversion is handled by Windows or the output device/driver rather than BASS, so this setting has no effect on playback there.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_NET_RESUME">
            <summary>
            The download buffer level required to resume stalled playback.
            <para>resume: The resumption level in percent... 0 - 100 (the default is 50%).</para>
            <para>This attribute determines what percentage of the download buffer (<see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_BUFFER"/>) needs to be filled before playback of a stalled internet stream will resume.
            It also applies to 'buffered' user file streams created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>.
            The buffering progress can be monitored with <see cref="M:Un4seen.Bass.Bass.BASS_StreamGetFilePosition(System.Int32,Un4seen.Bass.BASSStreamFilePosition)"/> (BASS_FILEPOS_BUFFERING).</para>
            <para>This attribute can be set at any time, and changes take immediate effect, including mid-stall. The initial value is determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NET_PREBUF"/> config option.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_SCANINFO">
            <summary>
            The scanned info of a channel.
            <para>scaninfo: The scanned info.</para>
            <para>size: The size of the scanned info.</para>
            <para>This attribute is the information that is scanned from a file when the BASS_STREAM_PRESCAN flag is used in a <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> call or when the BASS_POS_SCAN flag is used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>.
            It is supported on MP3/MP2/MP1 files and chained OGG files. It may be supported by add-ons too; see the documentation.</para>
            <para>The structure of the scanned info may change in future versions, so if the data is stored, be prepared for BASS_ChannelSetAttributeEx to fail when trying to apply it; the file can be scanned again if that happens.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_NORAMP">
            <summary>
            Disable Playback ramping?
            <para>noramp (int): Enable or disable playback ramping... 0 = enable ramping, 1 = disable ramping, 2 = disable ramping-in only, 3 = disable ramping-out only.</para>
            <para>By default, a channel will be ramped-in when starting playback and ramped-out when stopping playback, to avoid sudden level changes that could result in a click sound each time.
            That ramping can be disabled by enabling this option. Volume (BASS_ATTRIB_VOL) and panning (BASS_ATTRIB_PAN) changes are always ramped regardless of this option setting.</para>
            <para>Ramping-in is skipped when a channel's sample data begins at a low level (below -42dB), and ramping-out is skipped when a channel is muted. Ramping-out requires data in the channel's playback buffer, so it generally does not apply when buffering has been disabled via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_BUFFER"/> option unless the channel is a 'push' stream or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> is used to pre-buffer some data.</para>
            <para>This attribute can be set at any time, and changes take immediate effect. A channel's initial setting is determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_NORAMP"/> config option.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_BITRATE">
            <summary>
            Gets the average bitrate (bkps).
            <para>bitrate: The bitrate in kilobits per second (bkps).</para>
            <para>This attribute gives the average bitrate of the file's audio data. If the file also contains video, that is excluded from the bitrate calculation.
            This attribute is read-only, so cannot be modified via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_BUFFER">
            <summary>
            Playback buffering length.
            <para>buffer The buffering length in seconds... 0 = no buffering. This is automatically capped to the full length of the channel's playback buffer.</para>
            <para>This attribute allows the amount of playback buffering to be changed without recreating the channel to get a new buffer. It limits how much data the update thread(s) or the <see cref="M:Un4seen.Bass.Bass.BASS_Update(System.Int32)"/> function will try to keep in the playback buffer; 
            it cannot exceed the length of the buffer, determined by the BASS_CONFIG_BUFFER setting at the time of its creation. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelUpdate(System.Int32,System.Int32)"/> is unaffected and can still be used to fill the entire buffer. Push streams (using STREAMPROC_PUSH) are also unaffected; they will always place as much data as possible in their playback buffers.</para>
            <para>When this attribute is set to 0, no data will be buffered and the channel will only be asked to produce data as it is needed during the generation of the final mix. This allows the lowest latency to be achieved, but also imposes tighter timing requirements on the channel to produce its data and apply any DSP/FX (and run mixtime syncs) that are set on it; 
            if too long is taken, there will be a break in the output, affecting all channels that are playing on the same device. The channel's data is still placed in its playback buffer, which allows <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> to be used, although there is likely to be less data available to them due to the buffer being less full.</para>
            <para>This attribute can be changed mid-playback. Any excess data that is currently in the playback buffer will still be played but not replaced.</para>
            <para>The default value is the channel's full playback buffer length, as determined by the BASS_CONFIG_BUFFER setting at the time of its creation.</para>
            <para>This attribute is not available when using DirectSound output on Windows, as BASS does not generate the final mix.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_GRANULE">
            <summary>
            The processing granularity of a channel.
            <para>handle: The channel handle... a HMUSIC, HSTREAM, HRECORD </para>
            <para>unit: The processing unit size in sample frames... 0 = none </para>
            <para>This attribute allows a channel's processing to be in units of a certain size, which can be helpful for some DSP processing. It does not apply to decoding channels or recording channels without a <see cref="T:Un4seen.Bass.RECORDPROC"/>; their procesing is controlled by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>.</para>
            <para>Each processing cycle will be on a whole number of units, not necessarily only one unit, and the number of units can vary between cycles depending on how much space there is in the channel's playback buffer (or captured data in a recording buffer). There might not be a whole number of units at the end of a file or when a stream stalls.</para>
            <para>When granularity is enabled (non-0), it can change the timing of any DSP/FX changes that are made in mixtime sync callbacks. That is because the DSP/FX processing is done on the entire block of data at the end of the processing cycle then (rather than splitting it at the sync positions), to maintain the specified granularity, resulting in the changes effectively being applied at the start of the processing cycle.</para>
            <para>The default value is 0 (none). Changes take immediate effect.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_USER">
            <summary>
            User-defined info.
            <para>handle: The channel handle.</para>
            <para>info: The info.</para>
            <para>size: The size of the info... 1 (min) to 8 (max).</para>
            <para>This attribute can be used to associate any info with a channel. It can be set to a pointer for larger info.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TAIL">
            <summary>
            An amount of time to add to the length of a channel.
            <para>handle: The channel handle... a HMUSIC, HSTREAM.</para>
            <para>tail: The amount of time to add in seconds.</para>
            <para>This attribute allows some silence to be added to the end a channel, which can be useful for hearing the tail of DSP/FX processing on the channel, eg. from reverb or echo effects. The silence is not added when looping is enabled.</para>
            <para>The default value is 0. Changes take immediate effect.</para>
            <para>Any BASS_SYNC_END syncs that are set on the channel (via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>) will be triggered twice: once at the normal end position and again at the end of the tail. The <see cref="T:Un4seen.Bass.SYNCPROC"/> callback's 'data' parameter will indicate which has occurred.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_PUSH_LIMIT">
            <summary>
            The maximum amount of data that a push stream can have queued.
            <para>handle: The push stream handle.</para>
            <para>limit: The maximum amount of data in bytes... 0 = no limit.</para>
            <para>By default, the amount of data that a push stream (using STREAMPROC_PUSH) can hold is limited only by available memory. This attribute can be used to set a lower limit to prevent a stream's buffer possibly getting out of control, eg. if playback stops but data pushing continues. This limit does not include the stream's playback buffer, if it has one.</para>
            <para>The limit can be changed at any time. If the new limit is lower than what the stream currently holds then the stream will be allowed to stay above the limit but no more data will be accepted until the excess is used.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DOWNLOADPROC">
            <summary>
            The download callback function on an internet stream.
            <para>handle: The channel handle.</para>
            <para>info: A pointer to a <see cref="T:Un4seen.Bass.DOWNLOADPROC"/> callback function and user parameter. The user parameter is optional; if it is not included then the existing value will be kept.</para>
            <para>size: The size of the info. This should be the size of one or two pointers, depending on whether a user parameter is included.</para>
            <para>This attribute can be used to change the <see cref="T:Un4seen.Bass.DOWNLOADPROC"/> callback function that was set in a <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> call. The new callback function will only receive data that is subsequently downloaded, not any that has already been downloaded. Callbacks can be disabled by setting it to <see langword="null"/>.</para>
            <para>This attribute can be set at any time, including within a <see cref="T:Un4seen.Bass.DOWNLOADPROC"/> function.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOLDSP">
            <summary>
            The volume level applied in the DSP chain of a channel.
            <para>handle: The channel handle.</para>
            <para>volume: The volume level... 0 = silent, 1.0 = normal, above 1.0 = amplification.</para>
            <para>Unlike <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL"/>, this attribute does have direct effect on decoding/recording channels and is present in the sample data returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, because it is applied in the channel's DSP chain. By default, the effect is applied at the start of the DSP chain, so that it is present in the data received by all DSP/FX, but that can be changed via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOLDSP_PRIORITY"/> attribute.</para>
            <para>During playback, the effect of changes to this attribute are not heard instantaneously due to buffering. This latency can be reduced via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_BUFFER"/> attribute, but it is generally better to use the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL"/> attribute instead for playback volume control.</para>
            <para>Multiple DSP volume controls and ramping/fading are possible with the BASS_FX_VOLUME effect via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOLDSP_PRIORITY">
            <summary>
            The priority of the volume DSP.
            <para>handle: The channel handle.</para>
            <para>priority: The priority... -2147483648 (min) to 2147483647 (max). This will be rounded down to a whole number.</para>
            <para>This attribute determines where in the DSP chain the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOLDSP"/> attribute is applied; its effect will not be present in the data received by DSP functions with a higher priority. This attribute is write-only, so its value is not available via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single@)"/>.</para>
            <para>The default value is 2147483647 (max). It cannot be changed until after the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOLDSP"/> attribute is first set on the channel.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_AMPLIFY">
            <summary>
            The amplification level of a MOD music.
            <para>amp: Amplification level... 0 (min) to 100 (max). This will be rounded down to a whole number.</para>
            <para>As the amplification level get's higher, the sample data's range increases, and therefore, the resolution increases. But if the level is set too high, then clipping can occur, which can result in distortion of the sound.</para>
            <para>You can check the current level of a MOD music at any time by using <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>. By doing so, you can decide if a MOD music's amplification level needs adjusting.</para>
            <para>The default amplification level is 50.</para>
            <para>During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option to reduce the buffer length.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_PANSEP">
            <summary>
            The pan separation level of a MOD music.
            <para>pansep: Pan separation... 0 (min) to 100 (max), 50 = linear. This will be rounded down to a whole number.</para>
            <para>By default BASS uses a linear panning "curve". If you want to use the panning of FT2, use a pan separation setting of around 35. To use the Amiga panning (ie. full left and right) set it to 100.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_PSCALER">
            <summary>
            The position scaler of a MOD music.
            <para>scale: The scaler... 1 (min) to 256 (max). This will be rounded down to a whole number.</para>
            <para>When calling <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, the row (HIWORD) will be scaled by this value. By using a higher scaler, you can get a more precise position indication.</para>
            <para>The default scaler is 1.</para>
            <para>
            <example>
            Get the position of a MOD music accurate to within a 10th of a row:
            <code lang="C#">
            // set the scaler
            Bass.BASS_ChannelSetAttribute(music, BASSAttribute.BASS_ATTRIB_MUSIC_PSCALER, 10f);
            int pos = Bass.BASS_MusicGetOrderPosition(music);
            // the order
            int order = Utils.LowWord32(pos);
            // the row
            int row = HighWord32(pos) / 10;
            // the 10th of a row
            int row10th = HighWord32(pos) % 10;
            </code>
            <code lang="VB">
            ' set the scaler
            Bass.BASS_ChannelSetAttribute(music, BASSAttribute.BASS_ATTRIB_MUSIC_PSCALER, 10F)
            Dim pos As Integer = Bass.BASS_MusicGetOrderPosition(music)
            ' the order
            Dim order As Integer = Utils.LowWord32(pos)
            ' the row
            Dim row As Integer = HighWord32(pos) / 10
            ' the 10th of a row
            Dim row10th As Integer = HighWord32(pos) Mod 10
            </code>
            </example>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_BPM">
            <summary>
            The BPM of a MOD music.
            <para>bpm: The BPM... 1 (min) to 255 (max). This will be rounded down to a whole number.</para>
            <para>This attribute is a direct mapping of the MOD's BPM, so the value can be changed via effects in the MOD itself.</para>
            <para>Note that by changing this attribute, you are changing the playback length.</para>
            <para>During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option to reduce the buffer length.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_SPEED">
            <summary>
            The speed of a MOD music.
            <para>speed: The speed... 0 (min) to 255 (max). This will be rounded down to a whole number.</para>
            <para>This attribute is a direct mapping of the MOD's speed, so the value can be changed via effects in the MOD itself.</para>
            <para>The "speed" is the number of ticks per row. Setting it to 0, stops and ends the music. Note that by changing this attribute, you are changing the playback length.</para>
            <para>During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option to reduce the buffer length.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_VOL_GLOBAL">
            <summary>
            The global volume level of a MOD music.
            <para>volume: The global volume level... 0 (min) to 64 (max, 128 for IT format). This will be rounded down to a whole number.</para>
            <para>This attribute is a direct mapping of the MOD's global volume, so the value can be changed via effects in the MOD itself.
            The "speed" is the number of ticks per row. Setting it to 0, stops and ends the music. Note that by changing this attribute, you are changing the playback length.</para>
            <para>During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option to reduce the buffer length.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_ACTIVE">
            <summary>
            The number of active channels in a MOD music.
            <para>active: The number of channels.</para>
            <para>This attribute gives the number of channels (including virtual) that are currently active in the decoder, which may not match what is being heard during playback due to buffering. 
            To reduce the time difference, use the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option to reduce the buffer length.</para>
            <para>This attribute is read-only, so cannot be modified via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_VOL_CHAN">
            <summary>
            The volume level of a channel in a MOD music + <i>channel#</i>.
            <para>channel: The channel to set the volume of... 0 = 1st channel.</para>
            <para>volume: The volume level... 0 (silent) to 1 (full).</para>
            <para>The volume curve used by this attribute is always linear, eg. 0.5 = 50%. The <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CURVE_VOL"/> config option setting has no effect on this. The volume level of all channels is initially 1 (full).</para>
            <para>This attribute can also be used to count the number of channels in a MOD Music.</para>
            <para>During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option to reduce the buffer length.</para>
            <para>
            <example>
            Count the number of channels in a MOD music:
            <code lang="C#">
            int channels = 0;
            float dummy;
            while (Bass.BASS_ChannelGetAttribute(music, (BASSAttribute)((int)BASS_ATTRIB_MUSIC_VOL_CHAN + channels), ref dummy))
            {
              channels++; 
            }
            </code>
            <code lang="VB">
            Dim channels As Integer = 0
            Dim dummy As Single
            While Bass.BASS_ChannelGetAttribute(music, CType(CInt(BASS_ATTRIB_MUSIC_VOL_CHAN) + channels, BASSAttribute), dummy)
              channels += 1
            End While
            </code>
            </example>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MUSIC_VOL_INST">
            <summary>
            The volume level of an instrument in a MOD music + <i>inst#</i>.
            <para>inst: The instrument to set the volume of... 0 = 1st instrument.</para>
            <para>volume: The volume level... 0 (silent) to 1 (full).</para>
            <para>The volume curve used by this attribute is always linear, eg. 0.5 = 50%. The <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_CURVE_VOL"/> config option setting has no effect on this. The volume level of all instruments is initially 1 (full). For MOD formats that do not use instruments, read "sample" for "instrument".</para>
            <para>This attribute can also be used to count the number of instruments in a MOD music.</para>
            <para>During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_BUFFER"/> config option to reduce the buffer length.</para>
            <para>
            <example>
            Count the number of instruments in a MOD music:
            <code lang="C#">
            int instruments = 0;
            float dummy;
            while (Bass.BASS_ChannelGetAttribute(music, (BASSAttribute)((int)BASSAttribute.BASS_ATTRIB_MUSIC_VOL_INST + instruments), ref dummy))
            {
              instruments++; 
            }
            </code>
            <code lang="VB">
            Dim instruments As Integer = 0
            Dim dummy As Single
            While Bass.BASS_ChannelGetAttribute(music, CType(CInt(BASSAttribute.BASS_ATTRIB_MUSIC_VOL_INST) + instruments, BASSAttribute), dummy)
              instruments += 1
            End While
            </code>
            </example>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO">
            <summary>
            BASS_FX Tempo: The Tempo in percents (-95%..0..+5000%).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO_PITCH">
            <summary>
            BASS_FX Tempo: The Pitch in semitones (-60..0..+60).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO_FREQ">
            <summary>
            BASS_FX Tempo: The Samplerate in Hz, but calculates by the same % as BASS_ATTRIB_TEMPO.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO_OPTION_USE_AA_FILTER">
            <summary>
            BASS_FX Tempo Option: Use FIR low-pass (anti-alias) filter (gain speed, lose quality)? <see langword="true"/>=1 (default), <see langword="false"/>=0.
            <para>See <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoCreate(System.Int32,Un4seen.Bass.BASSFlag)"/> for details.</para>
            <para>On iOS, Android, WinCE and Linux ARM platforms this is by default disabled for lower CPU usage.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO_OPTION_AA_FILTER_LENGTH">
            <summary>
            BASS_FX Tempo Option: FIR low-pass (anti-alias) filter length in taps (8 .. 128 taps, default = 32, should be %4).
            <para>See <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoCreate(System.Int32,Un4seen.Bass.BASSFlag)"/> for details.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO">
            <summary>
            BASS_FX Tempo Option: Use quicker tempo change algorithm (gain speed, lose quality)? <see langword="true"/>=1, <see langword="false"/>=0 (default).
            <para>See <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoCreate(System.Int32,Un4seen.Bass.BASSFlag)"/> for details.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO_OPTION_SEQUENCE_MS">
            <summary>
            BASS_FX Tempo Option: Tempo Sequence in milliseconds (default = 82).
            <para>See <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoCreate(System.Int32,Un4seen.Bass.BASSFlag)"/> for details.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO_OPTION_SEEKWINDOW_MS">
            <summary>
            BASS_FX Tempo Option: SeekWindow in milliseconds (default = 14).
            <para>See <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoCreate(System.Int32,Un4seen.Bass.BASSFlag)"/> for details.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO_OPTION_OVERLAP_MS">
            <summary>
            BASS_FX Tempo Option: Tempo Overlap in milliseconds (default = 12).
            <para>See <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoCreate(System.Int32,Un4seen.Bass.BASSFlag)"/> for details.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_TEMPO_OPTION_PREVENT_CLICK">
            <summary>
            BASS_FX Tempo Option: Prevents clicks with tempo changes (default = FALSE).
            <para>See <see cref="M:Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_TempoCreate(System.Int32,Un4seen.Bass.BASSFlag)"/> for details.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_REVERSE_DIR">
            <summary>
            BASS_FX Reverse: The Playback direction (-1=BASS_FX_RVS_REVERSE or 1=BASS_FX_RVS_FORWARD).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_PPQN">
            <summary>
            BASSMIDI: Gets the Pulses Per Quarter Note (or ticks per beat) value of the MIDI file.
            <para>ppqn: The PPQN value.</para>
            <para>This attribute is the number of ticks per beat as defined by the MIDI file; it will be 0 for MIDI streams created via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>, 
            It is also read-only, so can't be modified via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</para>
            <para>
            <example>
            Get the currnet position of a MIDI stream in beats:
            <code lang="C#">
            float ppqn;
            Bass.BASS_ChannelGetAttribute(midi, BASSAttribute.BASS_ATTRIB_MIDI_PPQN, ref ppqn);
            long tick = Bass.BASS_ChannelGetPosition(midi, BASSMode.BASS_POS_MIDI_TICK);
            float beat = tick / ppqn;
            </code>
            <code lang="VB">
            Dim ppqn As Single 
            Bass.BASS_ChannelGetAttribute(midi, BASSAttribute.BASS_ATTRIB_MIDI_PPQN, ppqn) 
            Dim tick As Long = Bass.BASS_ChannelGetPosition(midi, BASSMode.BASS_POS_MIDI_TICK) 
            Dim beat As Single = tick / ppqn 
            </code>
            </example>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CPU">
            <summary>
            BASSMIDI: The maximum percentage of CPU time that a MIDI stream can use.
            <para>limit: The CPU usage limit... 0 to 100, 0 = unlimited.</para>
            <para>It is not strictly the CPU usage that is measured, but rather how timely the stream is able to render data. For example, a limit of 50% would mean that the rendering would need to be at least 2x real-time speed. When the limit is exceeded, BASSMIDI will begin killing voices, starting with the most quiet.</para>
            <para>When the CPU usage is limited, the stream's samples are loaded asynchronously so that any loading delays (eg. due to slow disk) do not hold up the stream for too long. If a sample cannot be loaded in time, then it will be silenced until it is available and the stream will continue playing other samples as normal in the meantime.
            This does not affect sample loading via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamLoadSamples(System.Int32)"/>, which always operates synchronously.</para>
            <para>By default, a MIDI stream will have no CPU limit.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_CHANS">
            <summary>
            BASSMIDI: The number of MIDI channels in a MIDI stream.
            <para>channels: The number of MIDI channels... 1 (min) - 128 (max). For a MIDI file stream, the minimum is 16.</para>
            <para>New channels are melodic by default. Any notes playing on a removed channel are immediately stopped.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_VOICES">
            <summary>
            BASSMIDI: The maximum number of samples to play at a time (polyphony) in a MIDI stream.
            <para>voices: The number of voices... 1 (min) - 1000 (max).</para>
            <para>If there are currently more voices active than the new limit, then some voices will be killed to meet the limit. The number of voices currently active is available via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_VOICES_ACTIVE"/> attribute.</para>
            <para>A MIDI stream will initially have a default number of voices as determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_MIDI_VOICES"/> config option.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_VOICES_ACTIVE">
            <summary>
            BASSMIDI: The number of samples currently playing in a MIDI stream.
            <para>voices: The number of voices.</para>
            <para>This attribute is read-only, so cannot be modified via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_STATE">
            <summary>
            BASSMIDI: The current state of a MIDI stream (2nd overload).
            <para>state: the buffer of the state data.</para>
            <para>size: the size of the state data buffer.</para>
            <para>This attribute includes the state of all events in all MIDI channels, except for MIDI_EVENT_NOTE (playing notes are not preserved) and MIDI_EVENT_TEMPO. <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent)"/> can be used to get the MIDI_EVENT_TEMPO event state.</para>
            <para>The structure of the MIDI state data may change in future versions, so if the data is stored, be prepared for <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/> to fail when trying to apply it.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_SRC">
            <summary>
            BASSMIDI: The sample rate conversion quality of a MIDI stream's samples.
            <para>quality: The sample rate conversion quality... 0 = linear interpolation, 1 = 8 point sinc interpolation, 2 = 16 point sinc interpolation.</para>
            <para>The samples in a soundfont will usually need to be played at rates that are different to their original rates. This attribute determines how that is done. The linear interpolation option uses less CPU, but the sinc interpolation gives better sound quality (less aliasing), with the quality and CPU usage increasing with the number of points.</para>
            <para>When this attribute setting is changed, the BASS_MIDI_SINCINTER flag is automatically set or unset on the MIDI stream accordingly, and vice versa. Changes can be made at any time, but the effect of changes during playback will not be heard instantaneously due to buffering.</para>
            <para>Platform-specific:</para>
            <para>On Android and iOS, sinc interpolation requires a NEON supporting CPU. Sinc interpolation is not available on Windows CE. 16 point sinc interpolation is only available on Windows/OSX/Linux and requires an SSE2 supporting CPU.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_KILL">
            <summary>
            BASSMIDI: Disable killed note fading?
            <para>bool: 0 = killed note fading enabled (default), 1 = killed note fading disabled.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_SPEED">
            <summary>
            BASSMIDI: Tempo modification.
            <para>handle: The MIDI stream handle </para>
            <para>speed: The tempo change... 1.0 = normal, below 1.0 = slower, above 1.0 = faster. The final tempo is the product of this value and the original tempo.</para>
            <para>Changing the tempo affects the stream length, and the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/> byte value will no longer be valid. Seeking is not affected.</para>
            <para>Changes can be made at any time, but the effect of changes during playback may not be heard instantaneously due to buffering</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_REVERB">
            <summary>
            BASSMIDI: The reverb effect level.
            <para>handle: The MIDI stream handle.</para>
            <para>level: The reverb level... 0 = silent.</para>
            <para>This attribute is applied on top of the MIDI_EVENT_REVERB_LEVEL event value; the final reverb level is the product of both. Unlike the MIDI_EVENT_REVERB_LEVEL event value, this setting cannot be changed by a MIDI file.</para>
            <para>The default value is 1.0. Changes can be made at any time, but the effect of changes during playback may not be heard instantaneously due to buffering.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_VOL">
            <summary>
            BASSMIDI: The mix level of a MIDI stream.
            <para>handle: The MIDI stream handle </para>
            <para>volume: The volume level... 0 = silent, 1.0 = normal/default, above 1.0 = amplification.</para>
            <para>The volume curve used by this attribute is always linear, eg. 0.5 = 50%. The BASS_CONFIG_CURVE_VOL config option setting has no effect on this.</para>
            <para>During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. This latency can be reduced via the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_BUFFER"/> attribute.</para>
            <para>This attribute differs from the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL"/> attribute in that it changes the level of the generated data, not just playback of it. It can be useful for reducing the level to prevent clipping/distortion.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIDI_TRACK_VOL">
            <summary>
            BASSMIDI: The volume level of a track in a MIDI file stream + <i>track#</i>.
            <para>track#: The track to set the volume of... 0 = first track.</para>
            <para>volume: The volume level (0.0=silent, 1.0=normal/default).</para>
            <para>The volume curve used by this attribute is always linear, eg. 0.5 = 50%. The BASS_CONFIG_CURVE_VOL config option setting has no effect on this.</para>
            <para>During playback, the effect of changes to this attribute are not heard instantaneously, due to buffering. To reduce the delay, use the BASS_CONFIG_BUFFER config option to reduce the buffer length.</para>
            <para>This attribute can also be used to count the number of tracks in a MIDI file stream. MIDI streams created via <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamCreate(System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/> do not have any tracks.</para>
            <para>
            <example>
            Count the number of tracks in a MIDI stream:
            <code lang="C#">
            int tracks = 0;
            float dummy;
            while (Bass.BASS_ChannelGetAttribute(midi, (BASSAttribute)((int)BASSAttribute.BASS_ATTRIB_MIDI_TRACK_VOL + tracks), ref dummy))
            {
              tracks++; 
            }
            </code>
            <code lang="VB">
            Dim tracks As Integer = 0
            Dim dummy As Single
            While Bass.BASS_ChannelGetAttribute(midi, CType(CInt(BASSAttribute.BASS_ATTRIB_MIDI_TRACK_VOL) + tracks, BASSAttribute), dummy)
              tracks += 1
            End While
            </code>
            </example>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_OPUS_ORIGFREQ">
            <summary>
            BASSOPUS: The sample rate of an Opus stream's source material.
            <para>freq: The sample rate.</para>
            <para>Opus streams always have a sample rate of 48000 Hz, and an Opus encoder will resample the source material to that if necessary.
            This attribute presents the original sample rate, which may be stored in the Opus file header. This attribute is read-only, so cannot be modified via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_GAIN">
            <summary>
            BASSdsd: The gain applied when converting to PCM.
            <para>gain: The gain in decibels.</para>
            <para>This attribute is only applicable when converting to PCM, and is unavailable when producing DSD-over-PCM or raw DSD data.
            The default setting is determined by the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_DSD_GAIN"/> config option.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_DSD_RATE">
            <summary>
            BASSdsd: The DSD sample rate.
            <para>rate: The DSD sample rate.</para>
            <para>This attribute is read-only, so cannot be modified via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_LATENCY">
            <summary>
            BASSmix: Custom output latency.
            <para>latency: The latency in seconds.</para>
            <para>When a mixer is played by BASS, the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetLevel(System.Int32)"/> and <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> functions 
            will get the output latency and account for that so that they reflect what is currently being heard, but that cannot be done when a different output system is used, eg. ASIO or WASAPI. 
            In that case, this attribute can be used to tell the mixer what the output latency is, so that those functions can still account for it. The mixer needs to have the BASS_STREAM_DECODE and BASS_MIXER_POSEX flags set to use this attribute.</para>
            <para>The default setting is 0 (no accounting for latency). Changes take immediate effect.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_THREADS">
            <summary>
            BASSmix: The number of threads to use for mixing.
            <para>handle: The mixer stream handle.</para>
            <para>threads: The number of threads... 1 (min) to 16 (max).</para>
            <para>The number of mixing threads determines how many source channels can be processed simultaneously by the mixer. If there are multiple CPU cores available then processing multiple sources simultaneously (if there are multiple sources) will generally mean that the final mix can be produced more quickly. When the BASS_MIXER_CHAN_LIMIT flag is set on a source, that source will always be processed alone first because it determines how much data may be processed from the other sources.</para>
            <para>The default setting is 1. Changes take immediate effect.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_MIXER_VOL">
            <summary>
            BASSmix: Master volume level of a mixer.
            <para>handle: The mixer stream handle.</para>
            <para>volume: volume level... 0 = silent, 1.0 = normal/default, above 1.0 = amplification.</para>
            <para>This attribute differs from the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL"/> attribute in that it changes the level of the generated data, not just playback of it.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_SPLIT_ASYNCBUFFER">
            <summary>
            BASSmix: Amount of data to asynchronously buffer from a splitter's source.
            <para>buffer: The amount to buffer, in seconds... 0 = disable asynchronous buffering.
            The asynchronous buffering will be limited to the splitter's buffer length, as determined by BASS_CONFIG_SPLIT_BUFFER.</para>
            <para>A splitter stream will usually get data from its source only when it is needed. This attribute allows the data to be gotten ahead of time asynchronously instead, so that it is ready for the splitter to access immediately when needed. This is not really useful with normal BASS playback (which is already buffered) but it can be used to implement buffering in other cases, eg. for mixer sources. The setting applies to all splitter streams that have the same source.</para>
            <para>When there are multiple splitters with the same source, the asynchronous buffering is based on the most advanced of them, which means that the asynchronous buffer length should be under the splitter buffer length (BASS_CONFIG_SPLIT_BUFFER) to allow the splitter positions to get apart from each other without the buffer overflowing for any of them. That margin should be at least equal to the maximum amount that you expect the splitter positions to get apart at any time.</para>
            <para>By default, the asynchronous buffering will try to fill any space in the buffer in one data request of the source. It can be broken down into smaller amounts via the BASS_ATTRIB_SPLIT_ASYNCPERIOD attribute.</para>
            <para>If a splitter stream needs more data than has been buffered then it will revert to synchronously getting data from the source for the remainder, unless it has the BASS_SPLIT_SLAVE flag set.</para>
            <para>The amount of data that a splitter has buffered can be retrieved from <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Split_StreamGetAvailable(System.Int32)"/>.</para>
            <para>The default setting is 0 (no asynchronous buffering). Changes take immediate effect.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_SPLIT_ASYNCPERIOD">
            <summary>
            BASSmix: Maximum amount of data to asynchronously buffer at a time from a splitter's source.
            <para>period: The maximum amount to data to asynchronously buffer at a time from the source, in seconds... 0 = as much as possible.</para>
            <para>When asynchronous buffering is enabled via the BASS_ATTRIB_SPLIT_ASYNCBUFFER attribute, this attribute limits how much data is requested from the source at a time. When there is more space available in the buffer, the request will be repeated until the space is filled.</para>
            <para>The setting applies to all splitter streams that have the same source. The default setting is 0 (as much as possible). Changes take immediate effect.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_WEBM_TRACK">
            <summary>
            BASSWEBM: The active track number.
            <para>track: The track number... 1 = first.</para>
            <para>This attribute is read-only, so cannot be modified via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSAttribute.BASS_SLIDE_LOG">
            <summary>
            Flag: Slide the attribute's value logarthmically rather than linearly.
            This cannot be used when going from positive to negative or vice versa. An exception is when using a negative value with BASS_ATTRIB_VOL to fade-out and stop.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSSync">
            <summary>
            Sync types to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> (param flag) and <see cref="T:Un4seen.Bass.SYNCPROC"/> (data flag).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_POS">
            <summary>
            Sync when a channel reaches a position.
            <para>param : position in bytes</para>
            <para>data : not used</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MUSICINST">
            <summary>
            Sync when an instrument (sample for the non-instrument based formats) is played in a MOD music (not including retrigs).
            <para>param : LOWORD=instrument (1=first) HIWORD=note (0=c0...119=b9, -1=all)</para>
            <para>data : LOWORD=note HIWORD=volume (0-64)</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_END">
            <summary>
            Sync when a channel reaches the end.
            <para>param : not used</para>
            <para>data : 1 = the sync is triggered by a backward jump in a MOD music, otherwise not used</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MUSICFX">
            <summary>
            Sync when the "sync" effect (XM/MTM/MOD: E8x/Wxx, IT/S3M: S2x) is used.
            <para>param : 0:data=pos, 1:data="x" value</para>
            <para>data : param=0: LOWORD=order HIWORD=row, param=1: "x" value</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_META">
            <summary>
            Sync when metadata is received in a stream.
            <para>param : not used</para>
            <para>data : not used - the updated metadata is available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_META)</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_SLIDE">
            <summary>
            Sync when an attribute slide is completed.
            <para>param : not used</para>
            <para>data : the type of slide completed (one of the BASS_SLIDE_xxx values)</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_STALL">
            <summary>
            Sync when playback has stalled.
            <para>param : not used</para>
            <para>data : 0=stalled, 1=resumed</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_DOWNLOAD">
            <summary>
            Sync when downloading of an internet (or "buffered" user file) stream has ended.
            <para>param : not used</para>
            <para>data : not used</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_FREE">
            <summary>
            Sync when a channel is freed.
            <para>param : not used</para>
            <para>data : not used</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MUSICPOS">
            <summary>
            Sync when a MOD music reaches an order:row position.
            <para>param : LOWORD=order (0=first, -1=all) HIWORD=row (0=first, -1=all)</para>
            <para>data : LOWORD=order HIWORD=row</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_SETPOS">
            <summary>
            Sync when seeking (inc. looping and restarting). So it could be used to reset DSP/etc.
            <para>param : position in bytes</para>
            <para>data : 0=playback is unbroken, 1=if is it broken (eg. buffer flushed). The latter would be the time to reset DSP/etc.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_OGG_CHANGE">
            <summary>
            Sync when a new logical bitstream begins in a chained OGG stream. Updated tags are available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            <para>param : not used</para>
            <para>data : not used</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_DEV_FAIL">
            <summary>
            Sync when the channel's device stops unexpectedly (eg. if it is disconnected/disabled). When this happens, it will not be possible to resume a recording but it may be possible to resume playback via <see cref="M:Un4seen.Bass.Bass.BASS_Start"/> once the device becomes available again.
            <para>param : not used</para>
            <para>data : not used</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_DEV_FORMAT">
            <summary>
            Sync when the sample format (sample rate and/or channel count) of the channel's device changes. The new format is available from <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/>.
            <para>param : not used</para>
            <para>data : not used</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_THREAD">
            <summary>
            FLAG: call sync in other thread
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIXTIME">
            <summary>
            FLAG: sync at mixtime, else at playtime
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_ONETIME">
            <summary>
            FLAG: sync only once, else continuously
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIXER_ENVELOPE">
            <summary>
            MIX add-on: Sync when an envelope reaches the end.
            <para>param : not used</para>
            <para>data : envelope type</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIXER_ENVELOPE_NODE">
            <summary>
            MIX add-on: Sync when an envelope node is reached.
            <para>param : Optional limit the sync to a certain envelope type (one of the <see cref="T:Un4seen.Bass.AddOn.Mix.BASSMIXEnvelope"/> values).</para>
            <para>data : Will contain the envelope type in the LOWORD and the current node number in the HIWORD.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIXER_QUEUE">
            <summary>
            MIX add-on: Sync when a source is dequeued. This only applies to queued mixers (BASS_MIXER_QUEUE).
            <para>param : not used</para>
            <para>data : dequeued channel handle</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_WMA_CHANGE">
            <summary>
            WMA add-on: Sync on a track change in a server-side playlist. Updated tags are available via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            <para>param : not used</para>
            <para>data : not used</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_WMA_META">
            <summary>
            WMA add-on: Sync on a mid-stream tag change in a server-side playlist. Updated tags are available via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            <para>param : not used</para>
            <para>data : not used - the updated metadata is available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WMA_META)</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_CD_ERROR">
            <summary>
            CD add-on: Sync when playback is stopped due to an error. For example, the drive door being opened.
            <para>param : not used</para>
            <para>data : the position that was being read from the CD track at the time.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_CD_SPEED">
            <summary>
            CD add-on: Sync when the read speed is automatically changed due to the BASS_CONFIG_CD_AUTOSPEED setting.
            <para>param : not used</para>
            <para>data : the new read speed.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_WINAMP_SYNC_BITRATE">
            <summary>
            WINAMP add-on: Sync when bitrate is changed or retrieved from a winamp input plug-in.
            <para>param : not used</para>
            <para>data : the bitrate retrieved from the winamp input plug-in - called when it is retrieved or changed (VBR MP3s, OGGs, etc).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_MARKER">
            <summary>
            MIDI add-on: Sync when a marker is encountered.
            <para>param : not used</para>
            <para>data : the marker index, which can be used in a <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/> call.</para>
            <para>
            <example>
            <code lang="C#">
            private void MidiSync(int handle, int channel, int data, IntPtr user)
            {
              BASS_MIDI_MARK mark = BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_MIDI_MARK_MARKER, data);
              ...
            }
            </code>
            <code lang="VB">
            Private Sub MidiSync(handle As Integer, channel As Integer, data As Integer, user As IntPtr)
              Dim mark As BASS_MIDI_MARK = BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_MIDI_MARK_MARKER, data)
              ...
            End Sub
            </code>
            </example>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_CUE">
            <summary>
            MIDI add-on: Sync when a cue is encountered.
            <para>param : not used</para>
            <para>data : the marker index, which can be used in a <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/> call.</para>
            <para>
            <example>
            <code lang="C#">
            private void MidiSync(int handle, int channel, int data, IntPtr user)
            {
              BASS_MIDI_MARK mark = BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_MIDI_MARK_CUE, data);
              ...
            }
            </code>
            <code lang="VB">
            Private Sub MidiSync(handle As Integer, channel As Integer, data As Integer, user As IntPtr)
              Dim mark As BASS_MIDI_MARK = BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_MIDI_MARK_CUE, data)
              ...
            End Sub
            </code>
            </example>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_LYRIC">
            <summary>
            MIDI add-on: Sync when a lyric event is encountered.
            <para>param : not used</para>
            <para>data : the marker index, which can be used in a <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/> call.
            If the text begins with a '/' (slash) character, a new line should be started. If it begins with a '\' (backslash) character, the display should be cleared.</para>
            <para>
            <example>
            <code lang="C#">
            private void MidiSync(int handle, int channel, int data, IntPtr user)
            {
              BASS_MIDI_MARK mark = BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_MIDI_MARK_LYRIC, data);
              ...
            }
            </code>
            <code lang="VB">
            Private Sub MidiSync(handle As Integer, channel As Integer, data As Integer, user As IntPtr)
              Dim mark As BASS_MIDI_MARK = BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_MIDI_MARK_LYRIC, data)
              ...
            End Sub
            </code>
            </example>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_TEXT">
            <summary>
            MIDI add-on: Sync when a text event is encountered.
            <para>param : not used</para>
            <para>data : the marker index, which can be used in a <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/> call.
            Lyrics can sometimes be found in BASS_MIDI_MARK_TEXT instead of BASS_MIDI_MARK_LYRIC markers.</para>
            <para>
            <example>
            <code lang="C#">
            private void MidiSync(int handle, int channel, int data, IntPtr user)
            {
              BASS_MIDI_MARK mark = BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_SYNC_MIDI_TEXT, data);
              ...
            }
            </code>
            <code lang="VB">
            Private Sub MidiSync(handle As Integer, channel As Integer, data As Integer, user As IntPtr)
              Dim mark As BASS_MIDI_MARK = BassMidi.BASS_MIDI_StreamGetMark(channel, BASSMIDIMarker.BASS_SYNC_MIDI_TEXT, data)
              ...
            End Sub
            </code>
            </example>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_EVENT">
            <summary>
            MIDI add-on: Sync when a type of event is processed, in either a MIDI file or <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/>.
            <para>param : event type (0 = all types).</para>
            <para>data : LOWORD = event parameter, HIWORD = channel  (high 8 bits contain the event type when syncing on all types). See <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamEvent(System.Int32,System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIEvent,System.Int32)"/> for a list of event types and their parameters.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_TICK">
            <summary>
            MIDI add-on: Sync when reaching a tick position.
            <para>param : tick position.</para>
            <para>data : not used</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_TIMESIG">
            <summary>
            MIDI add-on: Sync when a time signature event is processed.
            <para>param : event type.</para>
            <para>data : The time signature events are given (by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/>) in the form of "numerator/denominator metronome-pulse 32nd-notes-per-MIDI-quarter-note", eg. "4/4 24 8".</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_MIDI_KEYSIG">
            <summary>
            MIDI add-on: Sync when a key signature event is processed.
            <para>param : event type.</para>
            <para>data : The key signature events are given (by <see cref="M:Un4seen.Bass.AddOn.Midi.BassMidi.BASS_MIDI_StreamGetMark(System.Int32,Un4seen.Bass.AddOn.Midi.BASSMIDIMarker,System.Int32,Un4seen.Bass.AddOn.Midi.BASS_MIDI_MARK)"/>) in the form of "a b", where a is the number of sharps (if positive) or flats (if negative), and b signifies major (if 0) or minor (if 1).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_HLS_SEGMENT">
            <summary>
            BASShls add-on: Sync when a new segment begins downloading.
            <para>param : not used.</para>
            <para>data : not used.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_HLS_SDT">
            <summary>
            BASShls add-on: Sync when a new MPEG-TS/DVB Service Description Table (SDT) has been received. The updated SDT is available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (type BASS_TAG_HLS_SDT).
            <para>param : not used.</para>
            <para>data : not used.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSSync.BASS_SYNC_HLS_EMSG">
            <summary>
            BASShls add-on: Sync when a new EMSG has been received. The updated EMSG is available from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (type BASS_TAG_HLS_EMSG).
            <para>param : not used.</para>
            <para>data : not used.</para>
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSFXType">
            <summary>
            FX effect types, use with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetFX(System.Int32,Un4seen.Bass.BASSFXType,System.Int32)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_DX8_CHORUS">
            <summary>
            DX8 Chorus. Use <see cref="T:Un4seen.Bass.BASS_DX8_CHORUS"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_DX8_COMPRESSOR">
            <summary>
            DX8 Compressor. Use <see cref="T:Un4seen.Bass.BASS_DX8_COMPRESSOR"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_DX8_DISTORTION">
            <summary>
            DX8 Distortion. Use <see cref="T:Un4seen.Bass.BASS_DX8_DISTORTION"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_DX8_ECHO">
            <summary>
            DX8 Echo. Use <see cref="T:Un4seen.Bass.BASS_DX8_ECHO"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_DX8_FLANGER">
            <summary>
            DX8 Flanger. Use <see cref="T:Un4seen.Bass.BASS_DX8_FLANGER"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_DX8_GARGLE">
            <summary>
            DX8 Gargle. Use <see cref="T:Un4seen.Bass.BASS_DX8_GARGLE"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_DX8_I3DL2REVERB">
            <summary>
            DX8 I3DL2 (Interactive 3D Audio Level 2) reverb. Use <see cref="T:Un4seen.Bass.BASS_DX8_I3DL2REVERB"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_DX8_PARAMEQ">
            <summary>
            DX8 Parametric equalizer. Use <see cref="T:Un4seen.Bass.BASS_DX8_PARAMEQ"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_DX8_REVERB">
            <summary>
            DX8 Reverb. Use <see cref="T:Un4seen.Bass.BASS_DX8_REVERB"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_VOLUME">
            <summary>
            Volume level adjustment. Use <see cref="T:Un4seen.Bass.BASS_FX_VOLUME_PARAM"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_ROTATE">
            <summary>
            BASS_FX Channel Volume Ping-Pong (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ROTATE"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_ECHO">
            <summary>
            BASS_FX Echo (2 channels max). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_FLANGER">
            <summary>
            BASS_FX Flanger (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_FLANGER"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_VOLUME">
            <summary>
            BASS_FX Volume control (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_PEAKEQ">
            <summary>
            BASS_FX Peaking Equalizer (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PEAKEQ"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_REVERB">
            <summary>
            BASS_FX Reverb (2 channels max). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_REVERB"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_LPF">
            <summary>
            BASS_FX Low Pass Filter (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_LPF"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_MIX">
            <summary>
            BASS_FX Channel Swap/Remap/Downmix (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_MIX"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_DAMP">
            <summary>
            BASS_FX Dynamic Amplification (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DAMP"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_AUTOWAH">
            <summary>
            BASS_FX Auto WAH (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_AUTOWAH"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_ECHO2">
            <summary>
            BASS_FX Echo 2 (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO2"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_PHASER">
            <summary>
            BASS_FX Phaser (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PHASER"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_ECHO3">
            <summary>
            BASS_FX Echo 3 (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO3"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_CHORUS">
            <summary>
            BASS_FX Chorus (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_CHORUS"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_APF">
            <summary>
            BASS_FX All Pass Filter (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_APF"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_COMPRESSOR">
            <summary>
            BASS_FX Dynamic Range Compressor (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_DISTORTION">
            <summary>
            BASS_FX Distortion (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_DISTORTION"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_COMPRESSOR2">
            <summary>
            BASS_FX Dynamic Range Compressor (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_COMPRESSOR2"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_VOLUME_ENV">
            <summary>
            BASS_FX Volume Envelope (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_VOLUME_ENV"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_BQF">
            <summary>
            BASS_FX BiQuad filters (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_BQF"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_ECHO4">
            <summary>
            BASS_FX Echo/Reverb 4 (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_ECHO4"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_PITCHSHIFT">
            <summary>
            BASS_FX Pitch Shift using FFT (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_PITCHSHIFT"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXType.BASS_FX_BFX_FREEVERB">
            <summary>
            BASS_FX Pitch Shift using FFT (multi channel). Use <see cref="T:Un4seen.Bass.AddOn.Fx.BASS_BFX_FREEVERB"/> structure to set/get parameters.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSFXPhase">
            <summary>
            DX8 effect types, use with e.g. the <see cref="T:Un4seen.Bass.BASS_DX8_CHORUS"/> and <see cref="T:Un4seen.Bass.BASS_DX8_FLANGER"/> effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXPhase.BASS_FX_PHASE_NEG_180">
            <summary>
            Phase differential between left and right LFOs (-180)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXPhase.BASS_FX_PHASE_NEG_90">
            <summary>
            Phase differential between left and right LFOs (-90)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXPhase.BASS_FX_PHASE_ZERO">
            <summary>
            Phase differential between left and right LFOs (+/-0)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXPhase.BASS_FX_PHASE_90">
            <summary>
            Phase differential between left and right LFOs (+90)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSFXPhase.BASS_FX_PHASE_180">
            <summary>
            Phase differential between left and right LFOs (+180)
            </summary>
        </member>
        <member name="T:Un4seen.Bass.WAVEFormatTag">
            <summary>
            Defines possible wave formats to be used with the <see cref="F:Un4seen.Bass.WAVEFORMATEX.wFormatTag"/> flag.
            </summary>
            <remarks>See the MMREG.H file for more codec numbers.</remarks>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.UNKNOWN">
            <summary>
            Unknown Format
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.PCM">
            <summary>
            PCM format (8 or 16 bit), Microsoft Corporation
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.ADPCM">
            <summary>
            AD PCM Format, Microsoft Corporation
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.IEEE_FLOAT">
            <summary>
            IEEE PCM Float format (32 bit)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.DOLBY_AC2">
            <summary>
            AC2, Dolby Laboratories
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.GSM610">
            <summary>
            GSM 6.10, Microsoft Corporation
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.MSNAUDIO">
            <summary>
            MSN Audio, Microsoft Corporation
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.MPEG">
            <summary>
            MPEG format
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.MPEGLAYER3">
            <summary>
            ISO/MPEG Layer3 Format
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.DOLBY_AC3_SPDIF">
            <summary>
            AC3 Digital, Sonic Foundry
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.RAW_AAC1">
            <summary>
            Raw AAC
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.MSAUDIO1">
            <summary>
            Microsoft Corporation
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.WMA">
            <summary>
            Windows Media Audio. This format is valid for versions 2 through 9
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.WMA_PRO">
            <summary>
            Windows Media Audio 9 Professional
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.WMA_LOSSLESS">
            <summary>
            Windows Media Audio 9 Lossless
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.WMA_SPDIF">
            <summary>
            Windows Media SPDIF Digital Audio
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.MPEG_ADTS_AAC">
            <summary>
            ADTS AAC Audio
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.MPEG_RAW_AAC">
            <summary>
            Raw AAC
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.MPEG_LOAS">
            <summary>
            MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.MPEG_HEAAC">
            <summary>
            High-Efficiency Advanced Audio Coding (HE-AAC) stream
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFormatTag.EXTENSIBLE">
            <summary>
            Extensible Format (user defined)
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASSIOSNotify">
            <summary>
            The notification status used with <see cref="T:Un4seen.Bass.IOSNOTIFYPROC"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSIOSNotify.BASS_IOSNOTIFY_INTERRUPT">
            <summary>
            iOS audio session interruption started.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASSIOSNotify.BASS_IOSNOTIFY_INTERRUPT_END">
            <summary>
            iOS audio session interruption ended.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_PLUGINFORM">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)"/> to retrieve information on the supported plugin formats.
            </summary>
            <remarks>The plugin information does not change, so the returned pointer remains valid for as long as the plugin is loaded.
            <para>The extension filter is for information only. A plugin will check the file contents rather than file extension, to verify that it is a supported format.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_PLUGINFORM.ctype">
            <summary>
            The channel type, as would appear in the <see cref="T:Un4seen.Bass.BASS_CHANNELINFO"/> structure.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_PLUGINFORM.name">
            <summary>
            The Format description or name.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_PLUGINFORM.exts">
            <summary>
            File extension filter, in the form of "*.ext1;*.ext2;etc...".
            </summary>
            <remarks>The extension filter is for information only. A plugin will check the file contents rather than file extension, to verify that it is a supported format.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_PLUGINFORM.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_PLUGINFORM.#ctor(System.String,System.String,Un4seen.Bass.BASSChannelType)">
            <summary>
            Constructor.
            </summary>
            <param name="ChannelType">The channel type, as would appear in the <see cref="T:Un4seen.Bass.BASS_CHANNELINFO"/> structure.</param>
            <param name="Name">The Format description or name.</param>
            <param name="Extensions">File extension filter, in the form of "*.ext1;*.ext2;etc...".</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_PLUGINFORM.ToString">
            <summary>
            A description of the plugin format (name|exts) which can be used for file filter settings.
            </summary>
            <returns>The file filter of the plugin format (name|exts).</returns>
        </member>
        <member name="T:Un4seen.Bass.bass_plugininfo">
            <summary>
            Only used internally! See <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.bass_plugininfo.version">
            <summary>
            plugin version (same form as BASS_GetVersion).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.bass_plugininfo.formatc">
            <summary>
            Number of supported formats.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.bass_plugininfo.formats">
            <summary>
            The pointer to the array of supported formats. The array contains formatc elements.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_PLUGININFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)"/> to retrieve information on a plugin.
            </summary>
            <remarks>This class can not be used directly! It will be returned and created by <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)"/> only.</remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_PLUGININFO.version">
            <summary>
            Plugin version, in the same form as given by <see cref="M:Un4seen.Bass.Bass.BASS_GetVersion"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_PLUGININFO.formatc">
            <summary>
            Number of supported formats.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_PLUGININFO.formats">
            <summary>
            The array of supported formats. The array contains <see cref="F:Un4seen.Bass.BASS_PLUGININFO.formatc"/> number of elements.
            </summary>
            <remarks>
            Note: There is no guarantee that the list of supported formats is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_PLUGININFO.#ctor">
            <summary>
            An instance of this class can not be created directly. Use <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)"/> instead.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_PLUGININFO.#ctor(System.Int32,Un4seen.Bass.BASS_PLUGINFORM[])">
            <summary>
            Internal Constructor.
            </summary>
            <param name="Formats">The formats to use.</param>
            <param name="Version">The version of the plugin.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_PLUGININFO.#ctor(System.IntPtr)">
            <summary>
            Constructor. Can be used with the return value of <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfoPtr(System.Int32)"/>.
            </summary>
            <param name="pluginInfoPtr">A pointer to the <see cref="T:Un4seen.Bass.BASS_PLUGININFO"/> structure.</param>
            <remarks>Should only be used with the return value of <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfoPtr(System.Int32)"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_PLUGININFO.#ctor(System.Int32,System.Int32,System.IntPtr)">
            <summary>
            Constructor
            </summary>
            <param name="ver">The version of the plugin.</param>
            <param name="count">The number of supported formats.</param>
            <param name="fPtr">The pointer to the array of supported formats</param>
            <remarks>Only used internally.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_PLUGININFO.ReadArrayStructure(System.Int32,System.IntPtr)">
            <summary>
            Reads in the <see cref="T:Un4seen.Bass.BASS_PLUGINFORM"/> array.
            </summary>
            <param name="count">Number of array elements to read.</param>
            <param name="p">The pointer to the first array element.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_PLUGININFO.ToString">
            <summary>
            A description of the plugin structure (version, formatc).
            </summary>
            <returns>A description of the plugin structure (version, formatc).</returns>
        </member>
        <member name="T:Un4seen.Bass.BASS_DEVICEINFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_GetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetDeviceInfo(System.Int32,Un4seen.Bass.BASS_DEVICEINFO)"/> to retrieve information on a device.
            </summary>
            <remarks>
            <para>When a device is disabled/disconnected, it is still retained in the device list, but the BASS_DEVICE_ENABLED flag is removed from it. If the device is subsequently re-enabled, it may become available again with the same device number, or the system may add a new entry for it.</para>
            <para>When a new device is connected, it can affect the other devices and result in the system moving them to new device entries. If an affected device is initialized, it will stop working and will need to be reinitialized using its new device number.</para>
            <para><b>Platform-specific</b></para>
            <para>On Windows, <i>driver</i> can reveal the type of driver being used on systems that support both VxD and WDM drivers (Windows Me/98SE). 
            Further information can be obtained from the file via the GetFileVersionInfo function. On Vista and newer, the device's endpoint ID is given rather than its driver filename. 
            On OSX, driver is the device's UID, and on Linux it is the ALSA device name. It is unused on other platforms. 
            The device type is only available on Windows (Vista and newer) and OSX. On Windows, DisplayPort devices will have BASS_DEVICE_TYPE_HDMI rather than BASS_DEVICE_TYPE_DISPLAYPORT.</para>
            <para>Depending on the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_UNICODE"/> config setting, <i>name</i> and <i>driver</i> can be in ANSI or UTF-8 form on Windows.
            They are always in UTF-16 form on Windows CE, and UTF-8 on other platforms - note, that Bass.Net always enables the Unicode form and does all the conversion for you by default!
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_DEVICEINFO.name">
            <summary>
            The description of the device.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DEVICEINFO.driver">
            <summary>
            The filename of the driver being used... <see langword="null"/> = no driver (ie. "no sound" device).
            <para>On systems that can use both VxD and WDM drivers (Windows Me/98SE), this will reveal which type of driver is being used.</para>
            <para>Further information can be obtained from the file using the GetFileVersionInfo Win32 API function.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DEVICEINFO.id">
            <summary>
            The driver id resp. interface name being used... <see langword="null"/> = no id (ie. interface name is not available).
            <para>Only available on Vista/Win7 systems.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DEVICEINFO.flags">
            <summary>
            The device's current status. A combination of these flags (<see cref="T:Un4seen.Bass.BASSDeviceInfo"/>):
            <list type="table">
            <item><term>BASS_DEVICE_ENABLED</term><description>The device is enabled. It will not be possible to initialize the device if this flag is not present.</description></item>
            <item><term>BASS_DEVICE_DEFAULT</term><description>The device is the system default.</description></item>
            <item><term>BASS_DEVICE_INIT</term><description>The device is initialized, ie. <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has been called.</description></item>
            </list>
            The type of device may also be indicated in the high 8 bits (use BASS_DEVICE_TYPE_MASK to test), and can be one of the following:
            <list type="table">
            <item><term>BASS_DEVICE_TYPE_DIGITAL</term><description>An audio endpoint device that connects to an audio adapter through a connector for a digital interface of unknown type.</description></item>
            <item><term>BASS_DEVICE_TYPE_DISPLAYPORT</term><description>An audio endpoint device that connects to an audio adapter through a DisplayPort connector.</description></item>
            <item><term>BASS_DEVICE_TYPE_HANDSET</term><description>The part of a telephone that is held in the hand and that contains a speaker and a microphone for two-way communication.</description></item>
            <item><term>BASS_DEVICE_TYPE_HDMI</term><description>An audio endpoint device that connects to an audio adapter through a High-Definition Multimedia Interface (HDMI) connector.</description></item>
            <item><term>BASS_DEVICE_TYPE_HEADPHONES</term><description>A set of headphones.</description></item>
            <item><term>BASS_DEVICE_TYPE_HEADSET</term><description>An earphone or a pair of earphones with an attached mouthpiece for two-way communication.</description></item>
            <item><term>BASS_DEVICE_TYPE_LINE</term><description>An audio endpoint device that sends a line-level analog signal to a line-input jack on an audio adapter or that receives a line-level analog signal from a line-output jack on the adapter.</description></item>
            <item><term>BASS_DEVICE_TYPE_MICROPHONE</term><description>A microphone.</description></item>
            <item><term>BASS_DEVICE_TYPE_NETWORK</term><description>An audio endpoint device that the user accesses remotely through a network.</description></item>
            <item><term>BASS_DEVICE_TYPE_SPDIF</term><description>An audio endpoint device that connects to an audio adapter through a Sony/Philips Digital Interface (S/PDIF) connector.</description></item>
            <item><term>BASS_DEVICE_TYPE_SPEAKERS</term><description>A set of speakers.</description></item>
            </list>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_DEVICEINFO.status">
            <summary>
            The device's current status. A combination of these flags (<see cref="T:Un4seen.Bass.BASSDeviceInfo"/>):
            <list type="table">
            <item><term>BASS_DEVICE_ENABLED</term><description>The device is enabled. It will not be possible to initialize the device if this flag is not present.</description></item>
            <item><term>BASS_DEVICE_DEFAULT</term><description>The device is the system default.</description></item>
            <item><term>BASS_DEVICE_INIT</term><description>The device is initialized, ie. <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_RecordInit(System.Int32)"/> has been called.</description></item>
            </list>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_DEVICEINFO.type">
            <summary>
            The type of device:
            <list type="table">
            <item><term>BASS_DEVICE_TYPE_DIGITAL</term><description>An audio endpoint device that connects to an audio adapter through a connector for a digital interface of unknown type.</description></item>
            <item><term>BASS_DEVICE_TYPE_DISPLAYPORT</term><description>An audio endpoint device that connects to an audio adapter through a DisplayPort connector.</description></item>
            <item><term>BASS_DEVICE_TYPE_HANDSET</term><description>The part of a telephone that is held in the hand and that contains a speaker and a microphone for two-way communication.</description></item>
            <item><term>BASS_DEVICE_TYPE_HDMI</term><description>An audio endpoint device that connects to an audio adapter through a High-Definition Multimedia Interface (HDMI) connector.</description></item>
            <item><term>BASS_DEVICE_TYPE_HEADPHONES</term><description>A set of headphones.</description></item>
            <item><term>BASS_DEVICE_TYPE_HEADSET</term><description>An earphone or a pair of earphones with an attached mouthpiece for two-way communication.</description></item>
            <item><term>BASS_DEVICE_TYPE_LINE</term><description>An audio endpoint device that sends a line-level analog signal to a line-input jack on an audio adapter or that receives a line-level analog signal from a line-output jack on the adapter.</description></item>
            <item><term>BASS_DEVICE_TYPE_MICROPHONE</term><description>A microphone.</description></item>
            <item><term>BASS_DEVICE_TYPE_NETWORK</term><description>An audio endpoint device that the user accesses remotely through a network.</description></item>
            <item><term>BASS_DEVICE_TYPE_SPDIF</term><description>An audio endpoint device that connects to an audio adapter through a Sony/Philips Digital Interface (S/PDIF) connector.</description></item>
            <item><term>BASS_DEVICE_TYPE_SPEAKERS</term><description>A set of speakers.</description></item>
            </list>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DEVICEINFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DEVICEINFO.ToString">
            <summary>
            A description of the decive info object (name).
            </summary>
            <returns>A description of the decive info object (name).</returns>
        </member>
        <member name="P:Un4seen.Bass.BASS_DEVICEINFO.IsEnabled">
            <summary>
            The device is enabled and can be used.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_DEVICEINFO.IsDefault">
            <summary>
            The device is the system default device.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_DEVICEINFO.IsInitialized">
            <summary>
            The device is already initialized.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_INFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)"/> to retrieve information on the current device.
            </summary>
            <remarks>
            The DSCAPS_SECONDARY flags only indicate which sample formats are supported by hardware mixing.
            <para><b>Platform-specific</b></para>
            <para>On Windows, it is possible for speakers to mistakenly be 2 with some devices/drivers when the device in fact supports more speakers. In that case, the BASS_DEVICE_CPSPEAKERS flag can be used (with BASS_Init) to use the Windows control panel setting, or the BASS_DEVICE_SPEAKERS flag can be used to force the enabling of speaker assignment to up to 8 speakers, even though the device may not really support that many speakers. The result of assigning channels to nonexistent speakers is undefined; they may be heard on other speakers or not heard at all.</para>
            <para>The flags, hwsize, hwfree, freesam, free3d, minrate, maxrate, eax, and dsver members are only used on Windows, as DirectSound and hardware mixing are only available there. The freq member is not available on Windows prior to Vista.</para>
            <para>On Windows, the availability of the latency and minbuf values depends on the BASS_DEVICE_LATENCY flag being used when <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> was called.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.flags">
            <summary>
            The device's capabilities. A combination of these flags (<see cref="T:Un4seen.Bass.BASSInfo"/>):
            <list type="table">
            <item><term>DSCAPS_CONTINUOUSRATE</term><description>The device supports all sample rates between minrate and maxrate.</description></item>
            <item><term>DSCAPS_EMULDRIVER</term><description>The device's drivers do NOT have DirectSound support, so it is being emulated. Updated drivers should be installed.</description></item>
            <item><term>DSCAPS_CERTIFIED</term><description>The device driver has been certified by Microsoft. This flag is always set on WDM drivers.</description></item>
            <item><term>DSCAPS_SECONDARYMONO</term><description>Mono samples are supported by hardware mixing.</description></item>
            <item><term>DSCAPS_SECONDARYSTEREO</term><description>Stereo samples are supported by hardware mixing.</description></item>
            <item><term>DSCAPS_SECONDARY8BIT</term><description>8-bit samples are supported by hardware mixing.</description></item>
            <item><term>DSCAPS_SECONDARY16BIT</term><description>16-bit samples are supported by hardware mixing.</description></item>
            </list>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.hwsize">
            <summary>
            The device's total amount of hardware memory.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.hwfree">
            <summary>
            The device's amount of free hardware memory.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.freesam">
            <summary>
            The number of free sample slots in the hardware.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.free3d">
            <summary>
            The number of free 3D sample slots in the hardware.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.minrate">
            <summary>
            The minimum sample rate supported by the hardware.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.maxrate">
            <summary>
            The maximum sample rate supported by the hardware.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.eax">
            <summary>The device supports EAX and has it enabled?
            <para>The device's "Hardware acceleration" needs to be set to "Full" in it's "Advanced Properties" setup, else EAX is disabled.</para>
            <para>This is always <see langword="false"/> if BASS_DEVICE_3D was not used when <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> was called.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.minbuf">
            <summary>The minimum buffer length (rounded up to the nearest millisecond) recommended for use with the BASS_CONFIG_BUFFER config option (see <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>).
            <para>Requires that BASS_DEVICE_LATENCY was used when <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> was called.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.dsver">
            <summary>
            DirectSound version.
            <para>9 = DX9/8/7/5 features are available, 8 = DX8/7/5 features are available, 7 = DX7/5 features are available, 5 = DX5 features are available. 0 = none of the DX9/8/7/5 features are available.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.latency">
            <summary>The delay (rounded up to the nearest millisecond) for playback of HSTREAM/HMUSIC channels to start and be heard.
            <para>Requires that BASS_DEVICE_LATENCY was used when <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> was called.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.initflags">
            <summary>
            The flags parameter of the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call (<see cref="T:Un4seen.Bass.BASSInit"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.speakers">
            <summary>The number of speakers the device/drivers supports... 2 means that there is no support for speaker assignment - this will always be the case with non-WDM drivers in Windows.
            <para>It's also possible that it could mistakenly be 2 with some devices/drivers, when the device in fact supports more speakers.</para>
            <para>In that case the BASS_DEVICE_SPEAKERS or BASS_DEVICE_CPSPEAKERS flag can be used in the <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> call to force the enabling of speaker assignment.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_INFO.freq">
            <summary>
            The device's current output sample rate. This is only available on Windows Vista and OSX.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_INFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_INFO.ToString">
            <summary>
            A description of the decive info object (speakers, rates, dx, eax).
            </summary>
            <returns>A description of the decive info object (speakers, rates, dx, eax).</returns>
        </member>
        <member name="P:Un4seen.Bass.BASS_INFO.SupportsContinuousRate">
            <summary>
            The device supports all sample rates between minrate and maxrate.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_INFO.SupportsDirectSound">
            <summary>
            The device's drivers has DirectSound support
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_INFO.IsCertified">
            <summary>
            The device driver has been certified by Microsoft. Always true for WDM drivers.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_INFO.SupportsMonoSamples">
            <summary>
            Mono samples are supported by hardware mixing.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_INFO.SupportsStereoSamples">
            <summary>
            Stereo samples are supported by hardware mixing.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_INFO.Supports8BitSamples">
            <summary>
            8-bit samples are supported by hardware mixing.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_INFO.Supports16BitSamples">
            <summary>
            16-bit samples are supported by hardware mixing.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_RECORDINFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_RecordGetInfo(Un4seen.Bass.BASS_RECORDINFO)"/> to retrieve information on the current recording device.
            </summary>
            <remarks>
            <para>The formats member does not represent all the formats supported by the device, just the "standard" ones.</para>
            <para>If there is no DirectSound driver for the device (ie. it's being emulated), then the driver member will contain something like "WaveIn" instead of a filename.</para>
            <para><b>Platform-specific</b></para>
            <para>The flags member is only used on Windows. The formats member is only used on Windows/OSX/iOS, and only for the device's channel count in the case of OSX and iOS. On Windows, it does not necessarily represent all of the formats supported by the device, just the "standard" ones. freq is also only available on Windows/OSX/iOS, but not on Windows prior to Vista.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_RECORDINFO.flags">
            <summary>
            The device's capabilities <see cref="T:Un4seen.Bass.BASSRecordInfo"/>.
            A combination of these flags (see <see cref="T:Un4seen.Bass.BASSRecordInfo"/>):
            <list type="table">
            <item><term>DSCCAPS_EMULDRIVER</term><description>The device's drivers do NOT have DirectSound recording support, so it is being emulated.</description></item>
            <item><term>DSCCAPS_CERTIFIED</term><description>The device driver has been certified by Microsoft.</description></item>
            </list>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_RECORDINFO.formats">
            <summary>
            The standard formats supported by the device (default is WAVE_FORMAT_4S16).
            A combination of these flags (see <see cref="T:Un4seen.Bass.BASSRecordFormat"/>):
            <list type="table">
            <item><term>WAVE_FORMAT_1M08</term><description>11025hz, Mono, 8-bit</description></item>
            <item><term>WAVE_FORMAT_1S08</term><description>11025hz, Stereo, 8-bit</description></item>
            <item><term>WAVE_FORMAT_1M16</term><description>11025hz, Mono, 16-bit</description></item>
            <item><term>WAVE_FORMAT_1S16</term><description>11025hz, Stereo, 16-bit</description></item>
            <item><term>WAVE_FORMAT_2M08</term><description>22050hz, Mono, 8-bit</description></item>
            <item><term>WAVE_FORMAT_2S08</term><description>22050hz, Stereo, 8-bit</description></item>
            <item><term>WAVE_FORMAT_2M16</term><description>22050hz, Mono, 16-bit</description></item>
            <item><term>WAVE_FORMAT_2S16</term><description>22050hz, Stereo, 16-bit</description></item>
            <item><term>WAVE_FORMAT_4M08</term><description>44100hz, Mono, 8-bit</description></item>
            <item><term>WAVE_FORMAT_4S08</term><description>44100hz, Stereo, 8-bit</description></item>
            <item><term>WAVE_FORMAT_4M16</term><description>44100hz, Mono, 16-bit</description></item>
            <item><term>WAVE_FORMAT_4S16</term><description>44100hz, Stereo, 16-bit</description></item>
            </list>
            The number of channels supported by the device is in the high 8 bits.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_RECORDINFO.inputs">
            <summary>
            The number of input sources available to the device
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_RECORDINFO.singlein">
            <summary>
            <see langword="true"/> = only one input may be active at a time
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_RECORDINFO.freq">
            <summary>
            The device's current input sample rate. This is only available on Windows Vista and OSX.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_RECORDINFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_RECORDINFO.ToString">
            <summary>
            A description of the record decive info object (inputs, singlein).
            </summary>
            <returns>A description of the record decive info object (inputs, singlein).</returns>
        </member>
        <member name="P:Un4seen.Bass.BASS_RECORDINFO.WaveFormat">
            <summary>
            The standard wave formats supported by the device (default is WAVE_FORMAT_4S16).
            A combination of these flags (see <see cref="T:Un4seen.Bass.BASSRecordFormat"/>):
            <list type="table">
            <item><term>WAVE_FORMAT_1M08</term><description>11025hz, Mono, 8-bit</description></item>
            <item><term>WAVE_FORMAT_1S08</term><description>11025hz, Stereo, 8-bit</description></item>
            <item><term>WAVE_FORMAT_1M16</term><description>11025hz, Mono, 16-bit</description></item>
            <item><term>WAVE_FORMAT_1S16</term><description>11025hz, Stereo, 16-bit</description></item>
            <item><term>WAVE_FORMAT_2M08</term><description>22050hz, Mono, 8-bit</description></item>
            <item><term>WAVE_FORMAT_2S08</term><description>22050hz, Stereo, 8-bit</description></item>
            <item><term>WAVE_FORMAT_2M16</term><description>22050hz, Mono, 16-bit</description></item>
            <item><term>WAVE_FORMAT_2S16</term><description>22050hz, Stereo, 16-bit</description></item>
            <item><term>WAVE_FORMAT_4M08</term><description>44100hz, Mono, 8-bit</description></item>
            <item><term>WAVE_FORMAT_4S08</term><description>44100hz, Stereo, 8-bit</description></item>
            <item><term>WAVE_FORMAT_4M16</term><description>44100hz, Mono, 16-bit</description></item>
            <item><term>WAVE_FORMAT_4S16</term><description>44100hz, Stereo, 16-bit</description></item>
            </list>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_RECORDINFO.Channels">
            <summary>
            Gets the available channel count for a recording input.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_RECORDINFO.SupportsDirectSound">
            <summary>
            The device's drivers has DirectSound support
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_RECORDINFO.IsCertified">
            <summary>
            The device driver has been certified by Microsoft. Always true for WDM drivers.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_FILEPROCS">
            <summary>
            Table of callback functions used with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/>.
            </summary>
            <remarks>A copy is made of the procs callback function table, so it does not have to persist beyond this function call. 
            This means it is not required to pin the 'procs' instance, but it is still required to keep a reference as long as BASS uses the callback delegates in order to prevent the callbacks from being garbage collected.
            </remarks>
            <example>
            <code lang="C#">
            using Un4seen.Bass;
            ...
            private BASS_FILEPROCS _myStreamCreateUser;
            private FileStream _fs;
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
            // creating the user file callback delegates
            _myStreamCreateUser = new BASS_FILEPROCS(
                new FILECLOSEPROC(MyFileProcUserClose), 
                new FILELENPROC(MyFileProcUserLength), 
                new FILEREADPROC(MyFileProcUserRead), 
                new FILESEEKPROC(MyFileProcUserSeek));
            // open the file...
            _fs = File.OpenRead("test.mp3");
            // create the stream (the PRESCAN flag shows you what BASS is doing at the beginning to scan the entire file)
            // if that generates to much output for you, you can simply remove it
            int stream = Bass.BASS_StreamCreateFileUser(BASSStreamSystem.STREAMFILE_NOBUFFER, BASSFlag.BASS_STREAM_PRESCAN | BASSFlag.BASS_STREAM_AUTOFREE, _myStreamCreateUser, IntPtr.Zero);
            // play the channel
            Bass.BASS_ChannelPlay(stream, false);
            ...
            private void MyFileProcUserClose(IntPtr user)
            {
              if (_fs == null)
                return;
              _fs.Close();
              Console.WriteLine("File Closed");
            }
            
            private long MyFileProcUserLength(IntPtr user)
            {
              if (_fs == null)
                return 0L;
              return _fs.Length;
            }
            
            private int MyFileProcUserRead(IntPtr buffer, int length, IntPtr user)
            {
              if (_fs == null)
                return 0;
              try
              {
                // at first we need to create a byte[] with the size of the requested length
                byte[] data = new byte[length];
                // read the file into data
                int bytesread = _fs.Read(data, 0, length);
                // and now we need to copy the data to the buffer
                // we write as many bytes as we read via the file operation
                Marshal.Copy(data, 0, buffer, bytesread);
                return bytesread;
              }
              catch { return 0; }
            }
            
            private bool MyFileProcUserSeek(long offset, IntPtr user)
            {
              if (_fs == null)
                return false;
              try
              {
                long pos = _fs.Seek(offset, SeekOrigin.Begin);
                return true;
              }
              catch
              {
                return false;
              }
            }
            </code>
            <code lang="VB">
            Imports Un4seen.Bass
            ...
            Private _myStreamCreateUser As BASS_FILEPROCS
            Private _fs As FileStream
            ...
            Bass.BASS_Init(- 1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
            ' creating the user file callback delegates
            _myStreamCreateUser = New BASS_FILEPROCS(
                New FILECLOSEPROC(AddressOf MyFileProcUserClose), 
                New FILELENPROC(AddressOf MyFileProcUserLength), 
                New FILEREADPROC(AddressOf MyFileProcUserRead), 
                New FILESEEKPROC(AddressOf MyFileProcUserSeek))
            ' open the file...
            _fs = File.OpenRead("test.mp3")
            ' create the stream (the PRESCAN flag shows you what BASS is doing at the beginning to scan the entire file)
            ' if that generates to much output for you, you can simply remove it
            Dim stream As Integer = Bass.BASS_StreamCreateFileUser(BASSStreamSystem.STREAMFILE_NOBUFFER, BASSFlag.BASS_STREAM_PRESCAN Or BASSFlag.BASS_STREAM_AUTOFREE, _myStreamCreateUser, IntPtr.Zero)
            ' play the channel
            Bass.BASS_ChannelPlay(stream, False)
            ...
            Private Sub MyFileProcUserClose(user As IntPtr)
              If _fs Is Nothing Then
                Return
              End If 
              _fs.Close()
            End Sub
            
            Private Function MyFileProcUserLength(user As IntPtr) As Long
              If _fs Is Nothing Then
                Return 0L
              End If 
              Return _fs.Length   
            End Function
            
            Private Function MyFileProcUserRead(buffer As IntPtr, length As Integer, user As IntPtr) As Integer
              If _fs Is Nothing Then
                Return 0
              End If 
              Try
                ' at first we need to create a byte[] with the size of the requested length
                Dim data(length - 1) As Byte
                ' read the file into data
                Dim bytesread As Integer = _fs.Read(data, 0, length)
                ' and now we need to copy the data to the buffer
                ' we write as many bytes as we read via the file operation
                Marshal.Copy(data, 0, buffer, bytesread)
                Return bytesread
              Catch
                Return 0
              End Try
            End Function
            
            Private Function MyFileProcUserSeek(offset As Long, user As IntPtr) As Boolean
              If _fs Is Nothing Then
                Return False
              End If 
              Try
                Dim pos As Long = _fs.Seek(offset, SeekOrigin.Begin)
                Return True
              Catch
                Return False
              End Try
            End Function
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.BASS_FILEPROCS.close">
            <summary>
            Callback function to close the file.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_FILEPROCS.length">
            <summary>
            Callback function to get the file length.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_FILEPROCS.read">
            <summary>
            Callback function to read from the file.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_FILEPROCS.seek">
            <summary>
            Callback function to seek in the file. Not used by buffered file streams.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_FILEPROCS.#ctor(Un4seen.Bass.FILECLOSEPROC,Un4seen.Bass.FILELENPROC,Un4seen.Bass.FILEREADPROC,Un4seen.Bass.FILESEEKPROC)">
            <summary>
            Default constructor taking the callback delegates.
            </summary>
            <param name="closeCallback">The <see cref="T:Un4seen.Bass.FILECLOSEPROC"/> callback to use.</param>
            <param name="lengthCallback">The <see cref="T:Un4seen.Bass.FILELENPROC"/> callback to use.</param>
            <param name="readCallback">The <see cref="T:Un4seen.Bass.FILEREADPROC"/> callback to use.</param>
            <param name="seekCallback">The <see cref="T:Un4seen.Bass.FILESEEKPROC"/> callback to use.</param>
        </member>
        <member name="T:Un4seen.Bass.BASS_SAMPLE">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_SampleSetInfo(System.Int32,Un4seen.Bass.BASS_SAMPLE)"/> to retrieve and set the default playback attributes of a sample.
            </summary>
            <remarks>
            <para>When a sample has 3D functionality, the iangle and oangle angles decide how wide the sound is projected around the orientation angle (as set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DPosition(System.Int32,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>). 
            Within the inside angle the volume level is the level set in the volume member (or the <see cref="F:Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL"/> attribute when the sample is playing). 
            Outside the outer angle, the volume changes according to the outvol value. Between the inner and outer angles, the volume gradually changes between the inner and outer volume levels. 
            If the inner and outer angles are 360 degrees, then the sound is transmitted equally in all directions.</para>
            <para>When VAM is enabled, and neither the BASS_VAM_HARDWARE or BASS_VAM_SOFTWARE flags are specified, then the sample will be played in hardware if resources are available, and in software if no hardware resources are available.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.freq">
            <summary>
            Default playback rate (set to 44100 by default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.volume">
            <summary>
            Default volume... 0 (silent) to 1 (full, default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.pan">
            <summary>
            Default panning position -1 (full left) to +1 (full right) - defaulted to 0 = centre.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.flags">
            <summary>
            A combination of these flags (<see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>The samples's resolution is 8-bit. If neither this or the BASS_SAMPLE_FLOAT flags are present, then the sample's resolution is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>The samples's resolution is 32-bit floating-point.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>Looped?</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>The sample has 3D functionality enabled.</description></item>
            <item><term>BASS_SAMPLE_MUTEMAX	</term><description>Mute the sample when it is at (or beyond) it's max distance (3D samples only).</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>The sample is not using hardware mixing... it is being mixed in software by DirectSound.</description></item>
            <item><term>BASS_SAMPLE_VAM</term><description>DX7 voice allocation and management features are enabled (see below).</description></item>
            <item><term>BASS_SAMPLE_OVER_VOL</term><description>Override: the channel with the lowest volume is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_POS</term><description>Override: the longest playing channel is overriden.</description></item>
            <item><term>BASS_SAMPLE_OVER_DIST</term><description>Override: the channel furthest away (from the listener) is overriden (3D samples only).</description></item>
            </list>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.length">
            <summary>
            The length in bytes.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.max">
            <summary>
            Maximum number of simultaneous playbacks (defaulted to 1).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.origres">
            <summary>
            The original resolution (bits per sample)... 0 = undefined (default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.chans">
            <summary>
            Number of channels... 1=mono, 2=stereo (default), etc.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.mingap">
            <summary>
            Minimum time gap in milliseconds between creating channels using <see cref="M:Un4seen.Bass.Bass.BASS_SampleGetChannel(System.Int32,Un4seen.Bass.BASSFlag)"/>. 
            This can be used to prevent flanging effects caused by playing a sample multiple times very close to eachother. 
            The default setting, when loading/creating a sample, is 0 (disabled).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.mode3d">
            <summary>
            The 3D processing mode... one of these flags (see <see cref="T:Un4seen.Bass.BASS3DMode"/>):
            <list type="table">
            <item><term>BASS_3DMODE_NORMAL</term><description>Normal 3D processing (default).</description></item>
            <item><term>BASS_3DMODE_RELATIVE</term><description>The sample's 3D position (position/velocity/orientation) is relative to the listener. When the listener's position/velocity/orientation is changed with <see cref="M:Un4seen.Bass.Bass.BASS_Set3DPosition(Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>, the sample's position relative to the listener does not change.</description></item>
            <item><term>BASS_3DMODE_OFF</term><description>Turn off 3D processing on the sample, the sound will be played in the center.</description></item>
            </list>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.mindist">
            <summary>
            The minimum distance (default 0). The sample's volume is at maximum when the listener is within this distance.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.maxdist">
            <summary>
            The maximum distance (default 0). The sample's volume stops decreasing when the listener is beyond this distance.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.iangle">
            <summary>
            The angle of the inside projection cone in degrees... 0 (no cone, default) - 360 (sphere).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.oangle">
            <summary>
            The angle of the outside projection cone in degrees... 0 (no cone, default) - 360 (sphere).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.outvol">
            <summary>
            The delta-volume outside the outer projection cone... 0 (silent) to 1 (full, default) - same as inside the cone.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.vam">
            <summary>
            The following are the sample's DX7 voice allocation/management settings (if VAM is enabled)...a combination of these (<see cref="T:Un4seen.Bass.BASSVam"/>):
            <list type="table">
            <item><term>BASS_VAM_HARDWARE</term><description>Play the sample in hardware (default). If no hardware voices are available then the play call will fail.</description></item>
            <item><term>BASS_VAM_SOFTWARE</term><description>Play the sample in software (ie. non-accelerated). No other VAM flags may be used together with this flag.</description></item>
            </list>
            The following flags enable hardware resource stealing... if the hardware has no available voices, a currently playing buffer will be stopped to make room for the new buffer. Only samples with VAM enabled are considered for termination:
            <list type="table">
            <item><term>BASS_VAM_TERM_TIME</term><description>If there are no free hardware voices, the buffer to be terminated will be the one with the least time left to play.</description></item>
            <item><term>BASS_VAM_TERM_DIST</term><description>If there are no free hardware voices, the buffer to be terminated will be one that was loaded/created with the BASS_SAMPLE_MUTEMAX flag and is beyond it's max distance (maxdist). If there are no buffers that match this criteria, then the play call will fail.</description></item>
            <item><term>BASS_VAM_TERM_PRIO</term><description>If there are no free hardware voices, the buffer to be terminated will be the one with the lowest priority. This flag may be used with the TERM_TIME or TERM_DIST flag, if multiple voices have the same priority then the time or distance is used to decide which to terminate.</description></item>
            </list>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_SAMPLE.priority">
            <summary>
            Priority, used with the BASS_VAM_TERM_PRIO flag... 0 (min, default) - 0xFFFFFFFF (max)
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_SAMPLE.origresValue">
            <summary>
            The original resolution value in bits per samples.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_SAMPLE.origresIsFloat">
            <summary>
            Is the original resolution floating point?
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_SAMPLE.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_SAMPLE.#ctor(System.Int32,System.Single,System.Single,Un4seen.Bass.BASSFlag,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,Un4seen.Bass.BASS3DMode,System.Single,System.Single,System.Int32,System.Int32,System.Single,Un4seen.Bass.BASSVam,System.Int32)">
            <summary>
            Constructor to initialize the members.
            </summary>
            <param name="Freq">Default playback rate.</param>
            <param name="Volume">Default volume (0-1).</param>
            <param name="Pan">Default pan (-1=left, 0=middle, +1=right).</param>
            <param name="Flags">BASS_SAMPLE_xxx flags (<see cref="T:Un4seen.Bass.BASSFlag"/>).</param>
            <param name="Length">Length (in bytes).</param>
            <param name="Max">Maximum simultaneous playbacks.</param>
            <param name="OrigRes">Original resolution bits.</param>
            <param name="Chans">Number of channels.</param>
            <param name="MinGap">Minimum time gap in milliseconds between creating channels.</param>
            <param name="Flag3D">BASS_3DMODE_xxx mode (<see cref="T:Un4seen.Bass.BASS3DMode"/>).</param>
            <param name="MinDist">Minimum distance.</param>
            <param name="MaxDist">Maximum distance.</param>
            <param name="IAngle">Angle of inside projection cone.</param>
            <param name="OAngle">Angle of outside projection cone.</param>
            <param name="OutVol">Delta-volume outside the projection cone.</param>
            <param name="FlagsVam">Voice allocation/management flags (BASS_VAM_xxx flags <see cref="T:Un4seen.Bass.BASSVam"/>).</param>
            <param name="Priority">Priority (0=lowest, 0xffffffff=highest).</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_SAMPLE.ToString">
            <summary>
            A description of the record decive info object (driver file name, inputs etc.).
            </summary>
            <returns>A description of the record decive info object (driver file name, inputs etc.).</returns>
        </member>
        <member name="T:Un4seen.Bass.BASS_CHANNELINFO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve information on a channel.
            </summary>
            <remarks>
            A "channel" can be a playing sample (HCHANNEL), a sample stream (HSTREAM), a MOD music (HMUSIC), or a recording (HRECORD).
            <para>Each "Channel" function can be used with one or more of these channel types.</para>
            <para>The BASS_SAMPLE_SOFTWARE flag indicates whether or not the channel's sample data is being mixed into the final output by the hardware. It does not indicate (in the case of a stream or MOD music) whether the processing required to generate the sample data is being done by the hardware, this processing is always done in software.</para>
            <para>BASS supports 8/16/32-bit sample data, so if a WAV file, for example, uses another sample resolution, it'll have to be converted by BASS. The origres member can be used to check what the resolution originally was.</para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_CHANNELINFO info = new BASS_CHANNELINFO();
            Bass.BASS_ChannelGetInfo(channel, info); // get info
            if (info.ctype == BassChannel.BASS_CTYPE_STREAM_MP3) 
            {
            	// it's an MP3!
            }
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.BASS_CHANNELINFO.freq">
            <summary>
            Default playback rate.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_CHANNELINFO.chans">
            <summary>
            Number of channels... 1=mono, 2=stereo, etc.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_CHANNELINFO.flags">
            <summary>
            BASS_SAMPLE/STREAM/MUSIC/SPEAKER flags. A combination of these flags (see <see cref="T:Un4seen.Bass.BASSFlag"/>):
            <list type="table">
            <item><term>BASS_SAMPLE_8BITS</term><description>The channel's resolution is 8-bit. If neither this or the BASS_SAMPLE_FLOAT flags are present, then the channel's resolution is 16-bit.</description></item>
            <item><term>BASS_SAMPLE_FLOAT</term><description>The channel's resolution is 32-bit floating-point.</description></item>
            <item><term>BASS_SAMPLE_LOOP</term><description>The channel is looped.</description></item>
            <item><term>BASS_SAMPLE_3D</term><description>The channel has 3D functionality enabled.</description></item>
            <item><term>BASS_SAMPLE_SOFTWARE</term><description>The channel is NOT using hardware mixing... it doesn't benefit from any special hardware interpolation, etc.</description></item>
            <item><term>BASS_SAMPLE_VAM</term><description>The channel is using the DX7 voice allocation and management features. (HCHANNEL only)</description></item>
            <item><term>BASS_SAMPLE_MUTEMAX</term><description>The channel is muted when at (or beyond) it's max distance. (HCHANNEL)</description></item>
            <item><term>BASS_SAMPLE_FX</term><description>The channel has the "with FX flag" <a href="../Overview.html#DX8DMOEffects">DX8 effects implementation</a> enabled. (HSTREAM/HMUSIC)</description></item>
            <item><term>BASS_STREAM_RESTRATE</term><description>The internet file download rate is restricted. (HSTREAM)</description></item>
            <item><term>BASS_STREAM_BLOCK</term><description>The internet file (or "buffered" user file) is streamed in small blocks. (HSTREAM)</description></item>
            <item><term>BASS_STREAM_AUTOFREE</term><description>The channel will automatically be freed when it ends. (HSTREAM/HMUSIC)</description></item>
            <item><term>BASS_STREAM_DECODE</term><description>The channel is a "decoding channel". (HSTREAM/HMUSIC)</description></item>
            <item><term>BASS_MUSIC_RAMP</term><description>The MOD music is using "normal" ramping. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_RAMPS</term><description>The MOD music is using "sensitive" ramping. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_SURROUND</term><description>The MOD music is using surround sound. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_SURROUND2</term><description>The MOD music is using surround sound mode 2. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_NONINTER</term><description>The MOD music is using non-interpolated mixing. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_FT2MOD</term><description>The MOD music is using FastTracker 2 .MOD playback. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_PT1MOD</term><description>The MOD music is using ProTracker 1 .MOD playback. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_POSRESET</term><description>All notes will be stopped when seeking in the MOD music. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_POSRESETEX</term><description>All notes will be stopped and BPM/etc reset when seeking in the MOD music. (HMUSIC)</description></item>
            <item><term>BASS_MUSIC_STOPBACK</term><description>The MOD music will be stopped when a backward jump effect is played. (HMUSIC)</description></item>
            <item><term>BASS_SPEAKER_xxx</term><description><a scr="../Overview.html#SpeakerAssignement">Speaker assignment flags</a>. (HSTREAM/HMUSIC)</description></item>
            <item><term>BASS_UNICODE</term><description>A filename, command-line or argument is a Unicode (UTF-16) string.</description></item>
            </list>
            <i>Other flags may be supported by add-ons, see the documentation.</i>
            </summary>
            <remarks><b>Platform-specific</b>
            <para>On Linux/iOS/OSX, the BASS_UNICODE flag may not be present even if it was used in the stream's creation, as BASS will have translated the filename to the native UTF-8 form. On Windows CE, the opposite is true: the BASS_UNICODE flag may be present even if it was not used in the stream's creation, as BASS will have translated the filename to the native UTF-16 form.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_CHANNELINFO.ctype">
            <summary>
            The type of channel it is, which can be one of the following (see <see cref="T:Un4seen.Bass.BASSChannelType"/>), or another value if it's an add-on format (see the add-on's API).
            <list type="table">
            <item><term>BASS_CTYPE_SAMPLE</term><description>Sample channel. (HCHANNEL)</description></item>
            <item><term>BASS_CTYPE_STREAM</term><description>User sample stream. This can also be used as a flag to test if the channel is any kind of HSTREAM.</description></item>
            <item><term>BASS_CTYPE_STREAM_OGG</term><description>OGG VORBIS format file stream.</description></item>
            <item><term>BASS_CTYPE_STREAM_MP1</term><description>MP1 format file stream.</description></item>
            <item><term>BASS_CTYPE_STREAM_MP2</term><description>MP2 format file stream.</description></item>
            <item><term>BASS_CTYPE_STREAM_MP3</term><description>MP3 format file stream.</description></item>
            <item><term>BASS_CTYPE_STREAM_AIFF</term><description>Audio IFF format stream.</description></item>
            <item><term>BASS_CTYPE_STREAM_CA</term><description>CoreAudio codec stream. Additional information is avaliable via the <see cref="T:Un4seen.Bass.BASS_TAG_CACODEC"/> tag.</description></item>
            <item><term>BASS_CTYPE_STREAM_MF</term><description>Media Foundation codec stream. Additional format information is avaliable from <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> (BASS_TAG_WAVEFORMAT).</description></item>
            <item><term>BASS_CTYPE_STREAM_WAV</term><description>WAVE format flag. This can be used to test if the channel is any kind of WAVE format (LOWORD contains the codec number).</description></item>
            <item><term>BASS_CTYPE_STREAM_WAV_PCM</term><description>WAV format file stream, PCM.</description></item>
            <item><term>BASS_CTYPE_STREAM_WAV_FLOAT</term><description>WAV format file stream, Floating-Point.</description></item>
            <item><term>BASS_CTYPE_MUSIC_MOD</term><description>MOD format music. This can also be used as a flag to test if the channel is any kind of HMUSIC.</description></item>
            <item><term>BASS_CTYPE_MUSIC_MTM</term><description>MTM format music.</description></item>
            <item><term>BASS_CTYPE_MUSIC_S3M</term><description>S3M format music.</description></item>
            <item><term>BASS_CTYPE_MUSIC_XM</term><description>XM format music.</description></item>
            <item><term>BASS_CTYPE_MUSIC_IT</term><description>IT format music.</description></item>
            <item><term>BASS_CTYPE_MUSIC_MO3</term><description>MO3 format flag, used in combination with one of the BASS_CTYPE_MUSIC types.</description></item>
            <item><term>BASS_CTYPE_RECORD</term><description>Recording channel. (HRECORD)</description></item>
            </list>
            <i>Other channel types may be supported by add-ons, see the documentation.</i>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_CHANNELINFO.origres">
            <summary>
            The original resolution (bits per sample)... 0 = undefined.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_CHANNELINFO.plugin">
            <summary>
            The plugin that is handling the channel... 0 = not using a plugin. 
            <para>Note this is only available with streams created using the plugin system via the standard BASS stream creation functions, not those created by add-on functions. 
            Information on the plugin can be retrieved via <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)"/>.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_CHANNELINFO.sample">
            <summary>
            The sample that is playing on the channel. (HCHANNEL only)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_CHANNELINFO.filename">
            <summary>
            The filename associated with the channel. (HSTREAM only)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_CHANNELINFO.origresIsFloat">
            <summary>
            Is the original resolution floating point?
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_CHANNELINFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_CHANNELINFO.IsDecodingChannel">
            <summary>
            Is the channel a decoding channel?
            </summary>
            <remarks>Checks, that the <see cref="F:Un4seen.Bass.BASS_CHANNELINFO.flags"/> property contains the BASS_STREAM_DECODE resp. BASS_MUSIC_DECODE flag.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_CHANNELINFO.Is32bit">
            <summary>
            Gets, if the <see cref="F:Un4seen.Bass.BASS_CHANNELINFO.flags"/> property contains the BASS_SAMPLE_FLOAT resp. BASS_MUSIC_FLOAT flag.
            </summary>
            <remarks><see langword="true"/> is returned for floating-point channels - else <see langword="false"/>.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_CHANNELINFO.Is8bit">
            <summary>
            Gets, if the <see cref="F:Un4seen.Bass.BASS_CHANNELINFO.flags"/> property contains the BASS_SAMPLE_8BITS resp. BASS_MUSIC_8BITS flag.
            </summary>
            <remarks><see langword="true"/> is returned for 8-bit channels - else <see langword="false"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_CHANNELINFO.ToString">
            <summary>
            A description of the decive info object (driver file name, inputs etc.).
            </summary>
            <returns>A description of the decive info object (driver file name, inputs etc.).</returns>
        </member>
        <member name="T:Un4seen.Bass.BASS_3DVECTOR">
            <summary>
            Structure used by the 3D functions to describe positions, velocities, and orientations (e.g. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSet3DPosition(System.Int32,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_Get3DPosition(Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR,Un4seen.Bass.BASS_3DVECTOR)"/>).
            </summary>
            <remarks>
            The left-handed coordinate system is used.
            </remarks>
            Updates the position, velocity and top of the listener:
            <code lang="C#">
            BASS_3DVECTOR position = new BASS_3DVECTOR(camera.RealPosition.x, camera.RealPosition.y, camera.RealPosition.z);
            BASS_3DVECTOR direction = new BASS_3DVECTOR(camera.RealDirection.x, camera.RealDirection.y, camera.RealDirection.z);
            BASS_3DVECTOR up = new BASS_3DVECTOR(-camera.RealUp.x, -camera.RealUp.y, -camera.RealUp.z);
            
            if (!Bass.BASS_Set3DPosition(position, velocity, direction, up))
                throw new AudioException("Could not set the 3d position of the listener", "listener", Bass.BASS_ErrorGetCode());
                
            Bass.BASS_Apply3D();
            </code>
            <code lang="VB">
            Dim position As New BASS_3DVECTOR(camera.RealPosition.x, camera.RealPosition.y, camera.RealPosition.z)
            Dim direction As New BASS_3DVECTOR(camera.RealDirection.x, camera.RealDirection.y, camera.RealDirection.z)
            Dim up As New BASS_3DVECTOR(-camera.RealUp.x, -camera.RealUp.y, -camera.RealUp.z)
            
            If Not Bass.BASS_Set3DPosition(position, velocity, direction, up) Then
                Throw New AudioException("Could not set the 3d position of the listener", "listener", Bass.BASS_ErrorGetCode())
            End If
            
            Bass.BASS_Apply3D()
            </code>
        </member>
        <member name="F:Un4seen.Bass.BASS_3DVECTOR.x">
            <summary>
            +values=right, -values=left (default=0)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_3DVECTOR.y">
            <summary>
            +values=up, -values=down (default=0)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_3DVECTOR.z">
            <summary>
            +values=front, -values=behind (default=0)
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_3DVECTOR.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_3DVECTOR.#ctor(System.Single,System.Single,System.Single)">
            <summary>
            constructor to initialize the members
            </summary>
            <param name="X">X value (+=right, -=left)</param>
            <param name="Y">Y value (+=up, -=down)</param>
            <param name="Z">Z value (+=front, -=behind)</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_3DVECTOR.ToString">
            <summary>
            The 3D vector as a descriptive string (X=, Y=, Z=).
            </summary>
            <returns>The 3D vector as a descriptive string (X=, Y=, Z=)</returns>
        </member>
        <member name="T:Un4seen.Bass.BASS_DX8_CHORUS">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of a chorus effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_CHORUS.fWetDryMix">
            <summary>
            Ratio of wet (processed) signal to dry (unprocessed) signal. Must be in the range from 0 (default) through 100 (all wet).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_CHORUS.fDepth">
            <summary>
            Percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. Must be in the range from 0 through 100. The default value is 25.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_CHORUS.fFeedback">
            <summary>
            Percentage of output signal to feed back into the effect's input, in the range from -99 to 99. The default value is 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_CHORUS.fFrequency">
            <summary>
            Frequency of the LFO, in the range from 0 to 10. The default value is 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_CHORUS.lWaveform">
            <summary>
            Waveform of the LFO... 0 = triangle, 1 = sine. By default, the waveform is a sine.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_CHORUS.fDelay">
            <summary>
            Number of milliseconds the input is delayed before it is played back, in the range from 0 to 20. The default value is 0 ms.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_CHORUS.lPhase">
            <summary>
            Phase differential between left and right LFOs, one of <see cref="T:Un4seen.Bass.BASSFXPhase"/> values. Default is (int)BASSFXPhase.BASS_FX_PHASE_ZERO.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_CHORUS.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_CHORUS.#ctor(System.Single,System.Single,System.Single,System.Single,System.Int32,System.Single,Un4seen.Bass.BASSFXPhase)">
            <summary>
            constructor to initialize the members
            </summary>
            <param name="WetDryMix">Ratio of wet (processed) signal to dry (unprocessed) signal. Must be in the range from 0 through 100 (all wet).</param>
            <param name="Depth">Percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. Must be in the range from 0 through 100.</param>
            <param name="Feedback">Percentage of output signal to feed back into the effect's input, in the range from -99 to 99.</param>
            <param name="Frequency">Frequency of the LFO, in the range from 0 to 10.</param>
            <param name="Waveform">Waveform of the LFO... 0 = triangle, 1 = sine.</param>
            <param name="Delay">Number of milliseconds the input is delayed before it is played back, in the range from 0 to 20.</param>
            <param name="Phase">Phase differential between left and right LFOs (see <see cref="T:Un4seen.Bass.BASSFXPhase"/>).</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_CHORUS.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_CHORUS.Preset_A">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_CHORUS.Preset_B">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_DX8_COMPRESSOR">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of a compression effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_COMPRESSOR.fGain">
            <summary>
            Output gain of signal in dB after compression, in the range from -60 to 60. The default value is 0 dB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_COMPRESSOR.fAttack">
            <summary>
            Time in ms before compression reaches its full value, in the range from 0.01 to 500. The default value is 10 ms.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_COMPRESSOR.fRelease">
            <summary>
            Time (speed) in ms at which compression is stopped after input drops below fThreshold, in the range from 50 to 3000. The default value is 200 ms.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_COMPRESSOR.fThreshold">
            <summary>
            Point at which compression begins, in dB, in the range from -60 to 0. The default value is -20 dB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_COMPRESSOR.fRatio">
            <summary>
            Compression ratio, in the range from 1 to 100. The default value is 3, which means 3:1 compression.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_COMPRESSOR.fPredelay">
            <summary>
            Time in ms after fThreshold is reached before attack phase is started, in milliseconds, in the range from 0 to 4. The default value is 4 ms.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_COMPRESSOR.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_COMPRESSOR.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            constructor to already set the members
            </summary>
            <param name="Gain">Output gain of signal after compression, in the range from -60 to 60.</param>
            <param name="Attack">Time before compression reaches its full value, in the range from 0.01 to 500.</param>
            <param name="Release">Speed at which compression is stopped after input drops below fThreshold, in the range from 50 to 3000.</param>
            <param name="Threshold">Point at which compression begins, in decibels, in the range from -60 to 0.</param>
            <param name="Ratio">Compression ratio, in the range from 1 to 100.</param>
            <param name="Predelay">Time after lThreshold is reached before attack phase is started, in milliseconds, in the range from 0 to 4.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_COMPRESSOR.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_COMPRESSOR.Preset_Soft">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_COMPRESSOR.Preset_Soft2">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_COMPRESSOR.Preset_Medium">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_COMPRESSOR.Preset_Hard">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_COMPRESSOR.Preset_Hard2">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_COMPRESSOR.Preset_HardCommercial">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_DX8_DISTORTION">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of a distortion effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_DISTORTION.fGain">
            <summary>
            Amount of signal change after distortion, in the range from -60 through 0. The default value is 0 dB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_DISTORTION.fEdge">
            <summary>
            Percentage of distortion intensity, in the range in the range from 0 through 100. The default value is 50 percent.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_DISTORTION.fPostEQCenterFrequency">
            <summary>
            Center frequency of harmonic content addition, in the range from 100 through 8000. The default value is 4000 Hz.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_DISTORTION.fPostEQBandwidth">
            <summary>
            Width of frequency band that determines range of harmonic content addition, in the range from 100 through 8000. The default value is 4000 Hz.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_DISTORTION.fPreLowpassCutoff">
            <summary>
            Filter cutoff for high-frequency harmonics attenuation, in the range from 100 through 8000. The default value is 4000 Hz.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_DISTORTION.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_DISTORTION.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            constructor already setting the members
            </summary>
            <param name="Gain">Amount of signal change after distortion, in the range from -60 through 0.</param>
            <param name="Edge">Percentage of distortion intensity, in the range in the range from 0 through 100.</param>
            <param name="PostEQCenterFrequency">Center frequency of harmonic content addition, in the range from 100 through 8000.</param>
            <param name="PostEQBandwidth">Width of frequency band that determines range of harmonic content addition, in the range from 100 through 8000.</param>
            <param name="PreLowpassCutoff">Filter cutoff for high-frequency harmonics attenuation, in the range from 100 through 8000.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_DISTORTION.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_DX8_ECHO">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of a echo effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_ECHO.fWetDryMix">
            <summary>
            Ratio of wet (processed) signal to dry (unprocessed) signal. Must be in the range from 0 (default) through 100 (all wet).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_ECHO.fFeedback">
            <summary>
            Percentage of output fed back into input, in the range from 0 through 100. The default value is 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_ECHO.fLeftDelay">
            <summary>
            Delay for left channel, in milliseconds, in the range from 1 through 2000. The default value is 333 ms.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_ECHO.fRightDelay">
            <summary>
            Delay for right channel, in milliseconds, in the range from 1 through 2000. The default value is 333 ms.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_ECHO.lPanDelay">
            <summary>
            Value that specifies whether to swap left and right delays with each successive echo. The default value is <see langword="false"/>, meaning no swap.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_ECHO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_ECHO.#ctor(System.Single,System.Single,System.Single,System.Single,System.Boolean)">
            <summary>
            constructor already setting the members
            </summary>
            <param name="WetDryMix">Ratio of wet (processed) signal to dry (unprocessed) signal. Must be in the range from 0 through 100 (all wet).</param>
            <param name="Feedback">Percentage of output fed back into input, in the range from 0 through 100.</param>
            <param name="LeftDelay">Delay for left channel, in milliseconds, in the range from 1 through 2000.</param>
            <param name="RightDelay">Delay for right channel, in milliseconds, in the range from 1 through 2000.</param>
            <param name="PanDelay">Value that specifies whether to swap left and right delays with each successive echo.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_ECHO.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_ECHO.Preset_Small">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_ECHO.Preset_Long">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_DX8_FLANGER">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of a flanger effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_FLANGER.fWetDryMix">
            <summary>
            Ratio of wet (processed) signal to dry (unprocessed) signal. Must be in the range from 0 (default) through 100 (all wet).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_FLANGER.fDepth">
            <summary>
            Percentage by which the delay time is modulated by the low-frequency oscillator (LFO), in hundredths of a percentage point. Must be in the range from 0 through 100. The default value is 25.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_FLANGER.fFeedback">
            <summary>
            Percentage of output signal to feed back into the effect's input, in the range from -99 to 99. The default value is 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_FLANGER.fFrequency">
            <summary>
            Frequency of the LFO, in the range from 0 to 10. The default value is 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_FLANGER.lWaveform">
            <summary>
            Waveform of the LFO... 0 = triangle, 1 = sine. By default, the waveform is a sine.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_FLANGER.fDelay">
            <summary>
            Number of milliseconds the input is delayed before it is played back, in the range from 0 to 4. The default value is 0 ms.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_FLANGER.lPhase">
            <summary>
            Phase differential between left and right LFOs, one of the <see cref="T:Un4seen.Bass.BASSFXPhase"/> values. Default (int)BASSFXPhase.BASS_FX_PHASE_ZERO.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_FLANGER.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_FLANGER.#ctor(System.Single,System.Single,System.Single,System.Single,System.Int32,System.Single,Un4seen.Bass.BASSFXPhase)">
            <summary>
            constructor already setting the members
            </summary>
            <param name="WetDryMix">Ratio of wet (processed) signal to dry (unprocessed) signal. Must be in the range from 0 through 100 (all wet).</param>
            <param name="Depth">Percentage by which the delay time is modulated by the low-frequency oscillator (LFO), in hundredths of a percentage point. Must be in the range from 0 through 100.</param>
            <param name="Feedback">Percentage of output signal to feed back into the effect's input, in the range from -99 to 99.</param>
            <param name="Frequency">Frequency of the LFO, in the range from 0 to 10.</param>
            <param name="Waveform">Waveform of the LFO... 0 = triangle, 1 = sine.</param>
            <param name="Delay">Number of milliseconds the input is delayed before it is played back, in the range from 0 to 4.</param>
            <param name="Phase">Phase differential between left and right LFOs, one of <see cref="T:Un4seen.Bass.BASSFXPhase"/>.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_FLANGER.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_FLANGER.Preset_A">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_FLANGER.Preset_B">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_DX8_GARGLE">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of a gargle effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_GARGLE.dwRateHz">
            <summary>
            Rate of modulation, in Hertz. Must be in the range from 1 through 1000. Default 500 Hz.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_GARGLE.dwWaveShape">
            <summary>
            Shape of the modulation wave... 0 = triangle, 1 = square (default).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_GARGLE.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_GARGLE.#ctor(System.Int32,System.Int32)">
            <summary>
            constructor already setting the members
            </summary>
            <param name="RateHz">Rate of modulation, in Hertz. Must be in the range from 1 through 1000.</param>
            <param name="WaveShape">Shape of the modulation wave... 0 = triangle, 1 = square.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_GARGLE.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_DX8_I3DL2REVERB">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of an I3DL2 (Interactive 3D Audio Level 2) reverberation effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.lRoom">
            <summary>
            Attenuation of the room effect, in millibels (mB), in the range from -10000 to 0. The default value is -1000 mB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.lRoomHF">
            <summary>
            Attenuation of the room high-frequency effect, in mB, in the range from -10000 to 0. The default value is 0 mB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.flRoomRolloffFactor">
            <summary>
            Rolloff factor for the reflected signals, in the range from 0 to 10. The default value is 0.0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.flDecayTime">
            <summary>
            Decay time, in seconds, in the range from 0.1 to 20. The default value is 1.49 second.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.flDecayHFRatio">
            <summary>
            Ratio of the decay time at high frequencies to the decay time at low frequencies, in the range from 0.1 to 2. The default value is 0.83.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.lReflections">
            <summary>
            Attenuation of early reflections relative to lRoom, in mB, in the range from -10000 to 1000. The default value is -2602 mB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.flReflectionsDelay">
            <summary>
            Delay time of the first reflection relative to the direct path, in seconds, in the range from 0 to 0.3. The default value is 0.007 seconds.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.lReverb">
            <summary>
            Attenuation of late reverberation relative to lRoom, in mB, in the range from -10000 to 2000. The default value is 200 mB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.flReverbDelay">
            <summary>
            Time limit between the early reflections and the late reverberation relative to the time of the first reflection, in seconds, in the range from 0 to 0.1. The default value is 0.011 seconds.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.flDiffusion">
            <summary>
            Echo density in the late reverberation decay, in percent, in the range from 0 to 100. The default value is 100.0 percent.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.flDensity">
            <summary>
            Modal density in the late reverberation decay, in percent, in the range from 0 to 100. The default value is 100.0 percent.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_I3DL2REVERB.flHFReference">
            <summary>
            Reference high frequency, in hertz, in the range from 20 to 20000. The default value is 5000.0 Hz.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_I3DL2REVERB.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_I3DL2REVERB.#ctor(System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32,System.Single,System.Int32,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            constructor already setting the members
            </summary>
            <param name="Room">Attenuation of the room effect, in millibels (mB), in the range from -10000 to 0.</param>
            <param name="RoomHF">Attenuation of the room high-frequency effect, in mB, in the range from -10000 to 0.</param>
            <param name="RoomRolloffFactor">Rolloff factor for the reflected signals, in the range from 0 to 10.</param>
            <param name="DecayTime">Decay time, in seconds, in the range from 0.1 to 20.</param>
            <param name="DecayHFRatio">Ratio of the decay time at high frequencies to the decay time at low frequencies, in the range from 0.1 to 2.</param>
            <param name="Reflections">Attenuation of early reflections relative to lRoom, in mB, in the range from -10000 to 1000.</param>
            <param name="ReflectionsDelay">Delay time of the first reflection relative to the direct path, in seconds, in the range from 0 to 0.3.</param>
            <param name="Reverb">Attenuation of late reverberation relative to lRoom, in mB, in the range from -10000 to 2000.</param>
            <param name="ReverbDelay">Time limit between the early reflections and the late reverberation relative to the time of the first reflection, in seconds, in the range from 0 to 0.1.</param>
            <param name="Diffusion">Echo density in the late reverberation decay, in percent, in the range from 0 to 100.</param>
            <param name="Density">Modal density in the late reverberation decay, in percent, in the range from 0 to 100.</param>
            <param name="HFReference">Reference high frequency, in hertz, in the range from 20 to 20000.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_I3DL2REVERB.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_DX8_PARAMEQ">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of a parametric equalizer effect.
            </summary>
            <remarks>
            <para><b>Platform-specific</b></para>
            <para>On Windows, fCenter must be in the range of 80 to 16000, and not exceed one-third of the channel's sample rate. On other platforms, the range is above 0 Hz and below half the channel's sample rate.</para>
            </remarks>
            <example>
            Setting up a 3-band EQ:
            <code lang="C#">
            private int[] _fxEQ = {0, 0, 0};
            ...
            // 3-band EQ
            BASS_DX8_PARAMEQ eq = new BASS_DX8_PARAMEQ();
            _fxEQ[0] = Bass.BASS_ChannelSetFX(_stream, BASSFXType.BASS_FX_DX8_PARAMEQ, 0);
            _fxEQ[1] = Bass.BASS_ChannelSetFX(_stream, BASSFXType.BASS_FX_DX8_PARAMEQ, 0);
            _fxEQ[2] = Bass.BASS_ChannelSetFX(_stream, BASSFXType.BASS_FX_DX8_PARAMEQ, 0);
            eq.fBandwidth = 18f;
            eq.fCenter = 100f;
            eq.fGain = 0f;
            Bass.BASS_FXSetParameters(_fxEQ[0], eq);
            eq.fCenter = 1000f;
            Bass.BASS_FXSetParameters(_fxEQ[1], eq);
            eq.fCenter = 8000f;
            Bass.BASS_FXSetParameters(_fxEQ[2], eq);
            ...
            private void UpdateEQ(int band, float gain)
            {
              BASS_DX8_PARAMEQ eq = new BASS_DX8_PARAMEQ();
              if (Bass.BASS_FXGetParameters(_fxEQ[band], eq))
              {
                eq.fGain = gain;
                Bass.BASS_FXSetParameters(_fxEQ[band], eq);
              }
            }
            </code>
            <code lang="VB">
            Private _fxEQ As Integer() =  {0, 0, 0}
            ...
            ' 3-band EQ
            Dim eq As New BASS_DX8_PARAMEQ()
            _fxEQ(0) = Bass.BASS_ChannelSetFX(_stream, BASSFXType.BASS_FX_DX8_PARAMEQ, 0)
            _fxEQ(1) = Bass.BASS_ChannelSetFX(_stream, BASSFXType.BASS_FX_DX8_PARAMEQ, 0)
            _fxEQ(2) = Bass.BASS_ChannelSetFX(_stream, BASSFXType.BASS_FX_DX8_PARAMEQ, 0)
            eq.fBandwidth = 18F
            eq.fCenter = 100F
            Bass.BASS_FXSetParameters(_fxEQ(0), eq)
            eq.fCenter = 1000F
            Bass.BASS_FXSetParameters(_fxEQ(1), eq)
            eq.fCenter = 8000F
            Bass.BASS_FXSetParameters(_fxEQ(2), eq)
            ...
            Private Sub UpdateEQ(band As Integer, gain As Single)
              Dim eq As New BASS_DX8_PARAMEQ()
              If Bass.BASS_FXGetParameters(_fxEQ(band), eq) Then
                eq.fGain = gain
                Bass.BASS_FXSetParameters(_fxEQ(band), eq)
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_PARAMEQ.fCenter">
            <summary>
            Center frequency, in hertz, in the range from 80 to 16000. This value cannot exceed one-third of the frequency of the channel. Default 100 Hz.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_PARAMEQ.fBandwidth">
            <summary>
            Bandwidth, in semitones, in the range from 1 to 36. Default 18 semitones.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_PARAMEQ.fGain">
            <summary>
            Gain, in the range from -15 to 15. Default 0 dB.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_PARAMEQ.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_PARAMEQ.#ctor(System.Single,System.Single,System.Single)">
            <summary>
            constructor already setting the members
            </summary>
            <param name="Center">Center frequency, in hertz, in the range from 80 to 16000. This value cannot exceed one-third of the frequency of the channel.</param>
            <param name="Bandwidth">Bandwidth, in semitones, in the range from 1 to 36.</param>
            <param name="Gain">Gain in dB, in the range from -15 to 15.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_PARAMEQ.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_PARAMEQ.Preset_Low">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_PARAMEQ.Preset_Mid">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_PARAMEQ.Preset_High">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_DX8_REVERB">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of a reverb effect.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_REVERB.fInGain">
            <summary>
            Input gain of signal, in decibels (dB), in the range from -96 through 0. The default value is 0 dB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_REVERB.fReverbMix">
            <summary>
            Reverb mix, in dB, in the range from -96 through 0. The default value is 0 dB.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_REVERB.fReverbTime">
            <summary>
            Reverb time, in milliseconds, in the range from 0.001 through 3000. The default value is 1000.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_DX8_REVERB.fHighFreqRTRatio">
            <summary>
            In the range from 0.001 through 0.999. The default value is 0.001.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_REVERB.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_REVERB.#ctor(System.Single,System.Single,System.Single,System.Single)">
            <summary>
            constructor already setting the members
            </summary>
            <param name="InGain">Input gain of signal, in decibels (dB), in the range from -96 through 0.</param>
            <param name="ReverbMix">Reverb mix, in dB, in the range from -96 through 0.</param>
            <param name="ReverbTime">Reverb time, in milliseconds, in the range from 0.001 through 3000.</param>
            <param name="HighFreqRTRatio">In the range from 0.001 through 0.999.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_DX8_REVERB.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_FX_VOLUME_PARAM">
            <summary>
            Used with <see cref="M:Un4seen.Bass.Bass.BASS_FXGetParameters(System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/> to retrieve and set the parameters of a volume level effect.
            </summary>
            <remarks>
            The fTime value is based on the channel's original sample rate. If the playback rate is changed via the BASS_ATTRIB_FREQ attribute, then the transition time that is heard will be affected accordingly.
            <para>When retrieving parameters, the returned fCurrent value is the level that is currently being applied, not necessarily the level that was last set via <see cref="M:Un4seen.Bass.Bass.BASS_FXSetParameters(System.Int32,System.IntPtr)"/>. 
            During playback, it may not be the value that is currently being heard, due to buffering.</para>
            <para>Unlike the BASS_ATTRIB_VOL attribute, this effect modifies the channel's sample data, so it can be used to change the level of decoding channels and recording channels. 
            The BASS_CONFIG_CURVE_VOL setting does not affect this effect; the fTarget and fCurrent values are always linear.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_FX_VOLUME_PARAM.fTarget">
            <summary>
            The new volume level... 0 = silent, 1.0 = normal, above 1.0 = amplification. The default value is 1.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_FX_VOLUME_PARAM.fCurrent">
            <summary>
            The current volume level... -1 = leave existing current level when setting parameters. The default value is 1.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_FX_VOLUME_PARAM.fTime">
            <summary>
            The time to take to transition from the current level to the new level, in seconds. The default value is 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_FX_VOLUME_PARAM.lCurve">
            <summary>
            The curve to use in the transition... 0 = linear, 1 = logarithmic. The default value is 0.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_FX_VOLUME_PARAM.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_FX_VOLUME_PARAM.#ctor(System.Single,System.Single,System.Single,System.Int32)">
            <summary>
            constructor already setting the members
            </summary>
            <param name="target">The new volume level... 0 = silent, 1.0 = normal, above 1.0 = amplification.</param>
            <param name="current">The current volume level... -1 = leave existing current level when setting parameters.</param>
            <param name="time">The time to take to transition from the current level to the new level, in seconds.</param>
            <param name="curve">The curve to use in the transition... 0 = linear, 1 = logarithmic.</param>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_ID3">
            <summary>
            TAG structure of an ID3v1 block to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            </summary>
            <remarks>Use 'Marshal.PtrToStructure' to convert a tag pointer to this structure.</remarks>
            <example>
            <code lang="C#">
            IntPtr p = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ID3);
            if (p != IntPtr.Zero)
            {
              BASS_TAG_ID3 id3 = (BASS_TAG_ID3)Marshal.PtrToStructure(p, typeof(BASS_TAG_ID3));
              ...
            }
            </code>
            <code lang="VB">
            Dim p As IntPtr = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ID3) 
            If p &lt;&gt; IntPtr.Zero Then 
                Dim id3 As BASS_TAG_ID3 = DirectCast(Marshal.PtrToStructure(p, GetType(BASS_TAG_ID3)), BASS_TAG_ID3) 
                ...
            End If 
            </code>
            </example>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_ID3.ID">
            <summary>
            The id string (should be 'TAG').
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_ID3.Title">
            <summary>
            The title string (max. 30 characters).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_ID3.Artist">
            <summary>
            The artist string (max. 30 characters).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_ID3.Album">
            <summary>
            The album string (max. 30 characters).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_ID3.Year">
            <summary>
            The year string (max. 4 characters).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_ID3.Comment">
            <summary>
            The comment string (max. 28 characters).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_ID3.Dummy">
            <summary>
            The Dummy 0.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_ID3.Track">
            <summary>
            The track number.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_ID3.Genre">
            <summary>
            The genre id.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_BEXT">
            <summary>
            TAG structure of a BWF BEXT block to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            </summary>
            <remarks>Use 'Marshal.PtrToStructure' to convert a tag pointer to this structure.</remarks>
            <example>
            <code lang="C#">
            IntPtr p = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_RIFF_BEXT);
            if (p != IntPtr.Zero)
            {
              BASS_TAG_BEXT bext = (BASS_TAG_BEXT)Marshal.PtrToStructure(p, typeof(BASS_TAG_BEXT));
              string codingHist = bext.GetCodingHistory(p);
              ...
            }
            </code>
            <code lang="VB">
            Dim p As IntPtr = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_RIFF_BEXT) 
            If p &lt;&gt; IntPtr.Zero Then 
                Dim bext As BASS_TAG_BEXT = DirectCast(Marshal.PtrToStructure(p, GetType(BASS_TAG_BEXT)), BASS_TAG_BEXT) 
                Dim codingHist As String = bext.GetCodingHistory(p) 
                ...
            End If 
            </code>
            </example>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_BEXT.Description">
            <summary>
            The description or title (max. 256 characters).
            </summary>
            <remarks>
            The description might contain a short and/or a long
            description. If this field is splitted (by a ";") the first
            entry will contain the short description and the
            second entry will contain the long description.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_BEXT.Originator">
            <summary>
            The name of the originator or artist (max. 32 characters).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_BEXT.OriginatorReference">
            <summary>
            The reference of the originator or encoded by (max. 32 characters).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_BEXT.OriginationDate">
            <summary>
            The date of creation (max. 10 characters, in format yyyy-mm-dd).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_BEXT.OriginationTime">
            <summary>
            The time of creation (max. 10 characters, in format hh:mm:ss).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_BEXT.TimeReference">
            <summary>
            First sample count since midnight (little-endian).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_BEXT.Version">
            <summary>
            The BWF version (little-endian)
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_BEXT.UMID">
            <summary>
            The SMPTE UMID as a hex string in the format 'XX XX XX... XX'.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_BEXT.Reserved">
            <summary>
            Reserved for future use.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_BEXT.ToString">
            <summary>
            The description field of the TAG structure.
            </summary>
            <returns>The description field of the TAG structure.</returns>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_BEXT.GetCodingHistory(System.IntPtr)">
            <summary>
            Returns the coding history for a given BASS_TAG_RIFF_BEXT tag pointer.
            </summary>
            <param name="tag">The bext tag pointer as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.</param>
            <returns>The coding history string or <see langword="null"/> (if the tag pointer is not valid).</returns>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_BEXT.AsByteArray(System.String)">
            <summary>
            Returns a byte array containing the data of this instance plus the given <paramref name="codingHistory"/>.
            </summary>
            <param name="codingHistory">The new (total) coding history string to add to this structure.</param>
            <returns>The byte array containing the instance data plus the given <paramref name="codingHistory"/>.</returns>
            <remarks>This method might be used to create a raw BEXT data chunk (e.g. to be used with the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_AddChunk(System.Int32,System.String,System.IntPtr,System.Int32)"/> method).</remarks>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_CART">
            <summary>
            TAG structure of a BWF CART block to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.
            </summary>
            <remarks>Use 'Marshal.PtrToStructure' to convert a tag pointer to this structure.</remarks>
            <example>
            <code lang="C#">
            IntPtr p = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_RIFF_CART);
            if (p != IntPtr.Zero)
            {
              BASS_TAG_CART cart = (BASS_TAG_CART)Marshal.PtrToStructure(p, typeof(BASS_TAG_CART));
              string tagText = cart.GetTagText(p);
              ...
            }
            </code>
            <code lang="VB">
            Dim p As IntPtr = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_RIFF_CART) 
            If p &lt;&gt; IntPtr.Zero Then 
                Dim cart As BASS_TAG_CART = DirectCast(Marshal.PtrToStructure(p, GetType(BASS_TAG_CART)), BASS_TAG_CART) 
                Dim tagText As String = cart.GetTagText(p) 
                ...
            End If 
            </code>
            </example>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Version">
            <summary>
            The version of the cart data structure (4 characters).
            </summary>
            <remarks>
            The first two numbers shall give the major release level (with leading 0) from 00 to 99
            and the last two shall give the revision level (with leading 0) in the range of 00 to
            99. The version number of the cart data structure as described in this
            document shall be version 1.01, and thus is represented by the string 0101.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Title">
            <summary>
            The title of the cut (max. 64 characters).
            </summary>
            <remarks>
            The title should be a descriptive summary of the audio contents of the file, and may be
            used as an entry into a table of contents, and so on. Applications that do not
            support a 64-character title may truncate the field as needed.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Artist">
            <summary>
            The artist of the cut (max. 64 characters).
            </summary>
            <remarks>
            ASCII string, 64-characters or less, holding the artist or creator name for the audio cut.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.CutID">
            <summary>
            The cut number identification (max. 64 characters).
            </summary>
            <remarks>
            ASCII string, 64-characters or less, representing the cut number, or unique cut
            key. The string shall be left justified. Some consumer systems can have
            restricted cut number lengths or allowable character set. These applications
            should provide some means of synthesizing a usable cut identifier if it has such
            restrictions.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.ClientID">
            <summary>
            The client identification (max. 64 characters).
            </summary>
            <remarks>
            ASCII string, 64-characters or less, holding a client or customer identification or name.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Category">
            <summary>
            The category identification (e.g. PSA, NEWS etc. - max. 64 characters).
            </summary>
            <remarks>
            ASCII string, 64-characters or less, holding a category name. The category
            name may be application dependent. Applications should use common category names. E.g.:
            <para>
            ALL, BED, BEDS, BIT, BITS, COM, COMM, CON, CONT, DAY, EB, EFX, FIL, FILL, ID, INT, INTR, JIN, JING, LIN, LINE, LOG, LOGO, MAG, MAGI, MUS, MUSC, NET, NETW, NEW, NEWS, PRO, PROM, PSA, SEG, SHW, SHOW, SND, SPO, SPOT, SPR, SPRT, STG, STAG, STK, STAK, SWP, SWEP, TST, TEST, TMP, TEMP.
            </para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Classification">
            <summary>
            The classification or auxiliary key (max. 64 characters).
            </summary>
            <remarks>
            ASCII string, 64-characters or less, holding a classification key. This key may
            be used for general classification, selection or sorting based on language,
            locale or other similar applications.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.OutCue">
            <summary>
            The out cue text (max. 64 characters).
            </summary>
            <remarks>
            ASCII string, 64-characters or less, holding the optional out cue phrase to be
            displayed when the cut is being played. This shall be a user readable cue
            string.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.StartDate">
            <summary>
            The start date of the cut (max. 10 characters, in format yyyy-mm-dd).
            </summary>
            <remarks>
            An ASCII date string of the form yyyy-mm-dd, such as 1998-12-25, holding the
            start date. Any valid date can be used. To signify an immediate start date, use
            '1900-01-01.'
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.StartTime">
            <summary>
            The start time of cut (max. 10 characters, in format hh:mm:ss).
            </summary>
            <remarks>
            An ASCII time string of the form hh:mm:ss, such as 12:31:45, representing the
            24 hour time-of-day for the start time on the assigned <see cref="P:Un4seen.Bass.BASS_TAG_CART.StartDate"/>. If blank,
            assume 00:00:00.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.EndDate">
            <summary>
            The end date of the cut (max. 10 characters, in format yyyy-mm-dd).
            </summary>
            <remarks>
            As in start date, but shall indicate the date after which the sequence will no
            longer be active. If the sequence is to run forever, the date shall be 9999-12-31.
            There shall be no default for this field.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.EndTime">
            <summary>
            The end time of cut (max. 10 characters, in format hh:mm:ss).
            </summary>
            <remarks>
            This code shall indicate the time of day on the appointed end date after which
            the sequence becomes inactive. If blank, applications shall assume an end
            time of 23:59:59.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.ProducerAppID">
            <summary>
            The name of the vendor or application (max. 64 characters).
            </summary>
            <remarks>
            An ASCII string, 64 characters or less, containing the vendor name, product
            name or both of the program or application that produced the WAVE file with
            this cart chunk.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.ProducerAppVersion">
            <summary>
            The version of the producer application (max. 64 characters).
            </summary>
            <remarks>
            An ASCII string, 64 characters or less, containing the version of the program
            or applications that produced the WAVE file containing the cart chunk.
            Because this string is informational only, the application may represent the
            version in any convenient format.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.UserDef">
            <summary>
            A user defined text (max. 64 characters).
            </summary>
            <remarks>
            An ASCII string, 64 characters or less, whose use and contents may be
            defined by the user of the system.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.LevelReference">
            <summary>
            Sample value for 0 dB reference (signed Int32).
            </summary>
            <remarks>
            A 32-bit signed (2’s complement) integer word that shall hold the sample value
            of the 0-dB reference level for the originating system. This reference can
            facilitate scaling and metering consistency across disparate systems. As an
            example, a 16-bit linear PCM system that has its meters calibrated as 0
            corresponding to maximum signed digital value shall have the value set to
            32768 (800016).
            <para>
            The peak value shall be the absolute value of the largest sample value possible
            before saturation. In the example given, that of a 16-bit linear system using 2’s
            complement notation, the range of allowable values is -32768 to 32767, thus the
            maximum peak value is 32768 in the example given.
            </para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer1Usage">
            <summary>
            1st timer usage ID (4 characters).
            </summary>
            <remarks>
            Timer types, along with their FOURCC identification should be according to the following table.
            The interpretation and behavior of systems on encountering timer information may be site dependent, implementation dependent, or both:
            <para>SEG: Segue timer (start-end, enumerated, multiples)</para>
            <para>AUD: Audio boundary (start-end)</para>
            <para>INT: Introduction (start-end, enumerated, multiples)</para>
            <para>OUT: Epilog (start-end, enumerated, multiples)</para>
            <para>SEC: Secondary (start-end, enumerated, multiples)</para>
            <para>TER: Tertiary (start-end, enumerated, multiples)</para>
            <para>MRK: Generic marker (multiplesenumerated, )</para>
            <para>EOD: End-of-data (multiples)</para>
            <para>Timers may be qualified in one of three ways:</para>
            <para>a) as start or end timers, by appending a lower case ASCII letter s for a start timer or a lower case ASCII
            letter e for an end timer; for example, the timer identification AUDs designates the start of audio following
            silence, while AUDe designates the end of the audio segment;</para>
            <para>b) as enumerated timers, by appending an ASCII numeric character; for example, SEC1 may be designated
            secondary timer number 1, SEC2 may be secondary number 2, and so on;</para>
            <para>c) as multiple timers, by having multiple instances of the same timer ID; one may have, for example,
            multiple instances of MRK.</para>
            <para>Each application may prioritize the order of the timers.</para>
            <para>
            If a timer is not used, or is not set, its usage identifier should be set to all zero characters (0x00000000).
            </para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer1Value">
            <summary>
            1st timer value in samples from head (unsigned Int32).
            </summary>
            <remarks>
            The time units shall be in sample periods at the sampling frequency of the associated audio data and
            shall be referenced to the first sample of the audio data.
            <para>
            The timer range shall be 232 or 4,294,967,295 sample periods. These periods
            allow timer ranges at a sampling frequency of 48 kHz, for example, to extend
            beyond 24 h (24:51:18).
            These timers may be used to activate events in the cart system.
            </para>
            <para>
            If a timer is not used, or is not set, its timer value set to 0.
            </para>
            <para>Note: This member is actually an unsigned value - but due to the CLS-compliant rule it must have been defined as a signed int.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer2Usage">
            <summary>
            2nd timer usage ID (4 characters).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Usage"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer2Value">
            <summary>
            2nd timer value in samples from head (unsigned Int32).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Value"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer3Usage">
            <summary>
            3rd timer usage ID (4 characters).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Usage"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer3Value">
            <summary>
            3rd timer value in samples from head (unsigned Int32).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Value"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer4Usage">
            <summary>
            4th timer usage ID (4 characters).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Usage"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer4Value">
            <summary>
            4th timer value in samples from head (unsigned Int32).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Value"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer5Usage">
            <summary>
            5th timer usage ID (4 characters).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Usage"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer5Value">
            <summary>
            5th timer value in samples from head (unsigned Int32).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Value"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer6Usage">
            <summary>
            6th timer usage ID (4 characters).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Usage"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer6Value">
            <summary>
            6th timer value in samples from head (unsigned Int32).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Value"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer7Usage">
            <summary>
            7th timer usage ID (4 characters).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Usage"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer7Value">
            <summary>
            7th timer value in samples from head (unsigned Int32).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Value"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer8Usage">
            <summary>
            8th timer usage ID (4 characters).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Usage"/> for details.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.Timer8Value">
            <summary>
            8th timer value in samples from head (unsigned Int32).
            </summary>
            <remarks>See <see cref="P:Un4seen.Bass.BASS_TAG_CART.Timer1Value"/> for details.</remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_CART.Reserved">
            <summary>
            Reserved for future use (276 bytes!).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CART.URL">
            <summary>
            Uniform resource locator (max. 1024 characters).
            </summary>
            <remarks>
            An ASCII string, 1024-characters or less, representing a universal resource
            locator (URL) referencing or referenced by the audio program.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CART.ToString">
            <summary>
            The description field of the TAG structure.
            </summary>
            <returns>The description field of the TAG structure (Artist - Title).</returns>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CART.GetTagText(System.IntPtr)">
            <summary>
            Returns the free form text for scripts or tags for a given BASS_TAG_RIFF_CART tag pointer.
            </summary>
            <param name="tag">The cart tag pointer as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.</param>
            <returns>The tag text string or <see langword="null"/> (if the tag pointer is not valid).</returns>
            <remarks>
            The tag text is a non-restricted ASCII characters containing a collection of strings each
            terminated by CRLF. This text may be system- or user- defined
            descriptive text for the sound, such as live tag, script information, descriptive
            text special instructions, and so on.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CART.AsByteArray(System.String)">
            <summary>
            Returns a byte array containing the data of this instance plus the given <paramref name="tagText"/>.
            </summary>
            <param name="tagText">The new (total) tag text string to add to this structure.</param>
            <returns>The byte array containing the instance data plus the given <paramref name="tagText"/>.</returns>
            <remarks>This method might be used to create a raw CART data chunk (e.g. to be used with the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_AddChunk(System.Int32,System.String,System.IntPtr,System.Int32)"/> method).</remarks>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_CUE">
            <summary>
            RIFF "cue " tag cue point structure to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> 
            and the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_CUE"/> option.
            </summary>
            <remarks>
            Use the static <see cref="M:Un4seen.Bass.BASS_TAG_CUE.GetTag(System.Int32)"/> or <see cref="M:Un4seen.Bass.BASS_TAG_CUE.FromIntPtr(System.IntPtr)"/> methods to retrieve an instance.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CUE.NumCuePoints">
            <summary>
            The number of cue points.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CUE.CuePoints">
            <summary>
            The array of <see cref="T:Un4seen.Bass.BASS_TAG_CUE_POINT"/> cue points (or <see langword="null"/>).
            </summary>
            <remarks>
            Only available with the static <see cref="M:Un4seen.Bass.BASS_TAG_CUE.GetTag(System.Int32)"/> or <see cref="M:Un4seen.Bass.BASS_TAG_CUE.FromIntPtr(System.IntPtr)"/> methods.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CUE.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CUE.GetTag(System.Int32)">
            <summary>
            Gets a BASS_TAG_CUE tag from a given channel handle.
            </summary>
            <param name="handle">The channel handle...a HMUSIC or HSTREAM.</param>
            <returns>Returns a <see cref="T:Un4seen.Bass.BASS_TAG_CUE"/> instance if the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_CUE"/> could be retrieved successfully - else <see langword="null"/> is returned.</returns>
            <remarks>This method internally calles <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> to retrieve the BASS_TAG_RIFF_CUE tag.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CUE.FromIntPtr(System.IntPtr)">
            <summary>
            Creates an instance of the <see cref="T:Un4seen.Bass.BASS_TAG_CUE"/> class from a pointer.
            </summary>
            <param name="p">The pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_CUE"/> structure (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_CUE"/> flag).</param>
            <returns>The created instance of the <see cref="T:Un4seen.Bass.BASS_TAG_CUE"/> class on success - else <see langword="null"/> is returned.</returns>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_CUE_POINT">
            <summary>
            RIFF "cue " tag cue point structure.
            </summary>
            <remarks>
            The structure is given by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> as it is in the RIFF file, which is little-endian, so the members will need to be reversed on big-endian platforms.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CUE_POINT.Name">
            <summary>
            Specifies the cue point name. Each record must have a unique Name field.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CUE_POINT.Position">
            <summary>
            Specifies the sample position of the cue point. This is the sequential sample number within the play order.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CUE_POINT.FourCC">
            <summary>
            Specifies the name or chunk ID of the chunk containing the cue point.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CUE_POINT.ChunkStart">
            <summary>
            Specifies the position of the start of the data chunk containing the cue point. This should be zero if there is only one chunk containing data (as is currently always the case).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CUE_POINT.BlockStart">
            <summary>
            Specifies the position of the start of the block containing the position. This is the byte offset from the start of the data section of the chunk, not the chunk’s FOURCC.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_CUE_POINT.SampleOffset">
            <summary>
            Specifies the sample offset of the cue point relative to the start of the block.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CUE_POINT.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_SMPL">
            <summary>
            RIFF "smpl" tag cue point structure to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> 
            and the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_SMPL"/> option.
            </summary>
            <remarks>
            Use the static <see cref="M:Un4seen.Bass.BASS_TAG_SMPL.GetTag(System.Int32)"/> or <see cref="M:Un4seen.Bass.BASS_TAG_SMPL.FromIntPtr(System.IntPtr)"/> methods to retrieve an instance.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.Manufacturer">
            <summary>
            Specifies the MMA Manufacturer code for the intended target device. 
            </summary>
            <remarks>
            The high byte indicates the number of low order bytes (1 or 3) that are valid for the manufacturer code. 
            For example, this value will be 0x01000013 for Digidesign (the MMA Manufacturer code is one byte, 0x13); whereas 0x03000041 identifies Microsoft (the MMA Manufacturer code is three bytes, 0x00 0x00 0x41). 
            If the sample is not intended for a specific manufacturer, then this field should be set to zero.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.Product">
            <summary>
            Specifies the Product code of the intended target device for the Manufacturer. 
            </summary>
            <remarks>
            If the sample is not intended for a specific manufacturer’s product, then this field should be set to zero.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.SamplePeriod">
            <summary>
            Specifies the period of one sample in nanoseconds (normally 1/nSamplesPerSec from the WAVEFORMAT structure for the RIFF WAVE file--however, this field allows fine tuning).
            </summary>
            <remarks>
            For example, 44.1 kHz would be specified as 22675 (0x00005893).
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.MIDIUnityNote">
            <summary>
            Specifies the MIDI note which will replay the sample at original pitch.
            </summary>
            <remarks>
            This value ranges from 0 to 127 (a value of 60 represents Middle C as defined by the MMA).
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.MIDIPitchFraction">
            <summary>
            Specifies the fraction of a semitone up from the specified MIDIUnityNote.
            </summary>
            <remarks>
            A value of 0x80000000 is 1/2 semitone (50 cents); a value of 0x00000000 represents no fine tuning between semitones.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.SMPTEFormat">
            <summary>
            Specifies the SMPTE time format used in the SMPTEOffset field.
            </summary>
            <remarks>
            Possible values are (unrecognized formats should be ignored): 0 - specifies no SMPTE offset (dwSMPTEOffset should also be zero), 
            24 - specifies 24 frames per second, 25 - specifies 25 frames per second, 29 - specifies 30 frames per second with frame dropping ("30 drop"), 
            30 - specifies 30 frames per second.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.SMPTEOffset">
            <summary>
            Specifies a time offset for the sample if it is to be syncronized or calibrated according to a start time other than 0.
            </summary>
            <remarks>
            The format of this value is 0xhhmmssff. 
            hh is a signed Hours value [-23..23]. 
            mm is an unsigned Minutes value [0..59]. 
            ss is unsigned Seconds value [0..59]. 
            ff is an unsigned value [0..(SMPTEFormat - 1)].
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.NumSampleLoops">
            <summary>
            Specifies the number (count) of <see cref="T:Un4seen.Bass.BASS_TAG_SMPL_LOOP"/> records that are contained in SampleLoops.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.SampleData">
            <summary>
            Specifies the size in bytes of the optional sampler-specific data. Sampler specific data is stored imediately following the SampleLoops records. The cbSamplerData field will be zero if no extended sampler specific information is stored in the chunk.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL.SampleLoops">
            <summary>
            The array of <see cref="T:Un4seen.Bass.BASS_TAG_SMPL_LOOP"/> loops (or <see langword="null"/>).
            </summary>
            <remarks>
            Only available with the static <see cref="M:Un4seen.Bass.BASS_TAG_SMPL.GetTag(System.Int32)"/> or <see cref="M:Un4seen.Bass.BASS_TAG_SMPL.FromIntPtr(System.IntPtr)"/> methods.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_SMPL.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_SMPL.GetTag(System.Int32)">
            <summary>
            Gets a BASS_TAG_SMPL tag from a given channel handle.
            </summary>
            <param name="handle">The channel handle...a HMUSIC or HSTREAM.</param>
            <returns>Returns a <see cref="T:Un4seen.Bass.BASS_TAG_SMPL"/> instance if the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_SMPL"/> could be retrieved successfully - else <see langword="null"/> is returned.</returns>
            <remarks>This method internally calles <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> to retrieve the BASS_TAG_RIFF_SMPL tag.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_SMPL.FromIntPtr(System.IntPtr)">
            <summary>
            Creates an instance of the <see cref="T:Un4seen.Bass.BASS_TAG_SMPL"/> class from a pointer.
            </summary>
            <param name="p">The pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_SMPL"/> structure (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_RIFF_SMPL"/> flag).</param>
            <returns>The created instance of the <see cref="T:Un4seen.Bass.BASS_TAG_SMPL"/> class on success - else <see langword="null"/> is returned.</returns>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_SMPL_LOOP">
            <summary>
            RIFF "smpl" tag loop structure.
            </summary>
            <remarks>
            The structure is given by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> as it is in the RIFF file, which is little-endian, so the members will need to be reversed on big-endian platforms.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL_LOOP.Identifier">
            <summary>
            Identifies the unique ’name’ of the loop. This field may correspond with a name stored in a cue points ("cue ") chunk. The name data is stored in an associated data list ("adtl") chunk.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL_LOOP.Type">
            <summary>
            Specifies the loop type: 0 - Loop forward (normal), 1 - Alternating loop (forward/backward), 2 - Loop backward, 3-31 - reserved for future standard types, 32-? - sampler specific types (manufacturer defined).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL_LOOP.Start">
            <summary>
            Specifies the startpoint of the loop in samples.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL_LOOP.End">
            <summary>
            Specifies the endpoint of the loop in samples (this sample will also be played).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL_LOOP.Fraction">
            <summary>
            Allows fine-tuning for loop fractional areas between samples. Values range from 0x00000000 to 0xFFFFFFFF. A value of 0x80000000 represents 1/2 of a sample length.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_SMPL_LOOP.PlayCount">
            <summary>
            Specifies the number of times.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_SMPL_LOOP.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_CACODEC">
            <summary>
            TAG structure of the Apple CoreAudio codec information structure as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTagsCA(System.Int32)"/>.
            </summary>
            <remarks>A list of file and audio data format identifiers is available from Apple, <a href="http://developer.apple.com/mac/library/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioConverterFormats/SupportedAudioConverterFormats.html"/>.
            Additional formats may be available via third-party codecs.</remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_CACODEC.ftype">
            <summary>
            The file format identifier.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_CACODEC.atype">
            <summary>
            The audio format identifier.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_CACODEC.name">
            <summary>
            The description of the audio file format.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CACODEC.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CACODEC.#ctor(System.IntPtr)">
            <summary>
            Constructor to create an instance from the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> return value.
            </summary>
            <param name="p">The pointer as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>.</param>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_CACODEC.ToString">
            <summary>
            A description of the decive info object (name).
            </summary>
            <returns>A description of the decive info object (name).</returns>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_CACODEC.TAG_CA_CODEC.ftype">
            <summary>
            The file format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_CACODEC.TAG_CA_CODEC.atype">
            <summary>
            The audio format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_CACODEC.TAG_CA_CODEC.name">
            <summary>
            The description of the audio file format.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_APE_BINARY">
            <summary>
            APE binary tag structure as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_APE_BINARY"/> flag.
            </summary>
            <remarks>
            <para>
            When calling <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> with the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_APE_BINARY"/> flag make sure to add the index number of the binray tag to get.
            E.g. call: <code>Bass.BASS_ChannelGetTags( stream, (BASSTag)(BASSTag.BASS_TAG_APE_BINARY + 1) )</code> to get the 2nd binary tag.
            </para>
            </remarks>
            <example>
            Read all APE binary tags:
            <code lang="C#">
            BASS_TAG_APE_BINARY apeBin;
            for (int n = 0; (apeBin = BASS_TAG_APE_BINARY.GetTag(stream, n)) != null; n++)
            {
                Console.WriteLine(apeBin);
                // access the binary data
                byte[] data = apeBin.Data;
            }
            </code>
            <code lang="VB">
            Dim apeBin As BASS_TAG_APE_BINARY
            Dim n As Integer
            For n = 0 To (apeBin BASS_TAG_APE_BINARY.GetTag(stream, n)) &lt;&gt; Nothing Step n + 1
                Console.WriteLine(apeBin)
                ' access the binary data
                Dim data() As Byte = apeBin.Data 
            Next
            </code>
            </example>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_APE_BINARY.Key">
            <summary>
            The name of the tag.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_APE_BINARY.Data">
            <summary>
            The binary tag data.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_APE_BINARY.Length">
            <summary>
            The size of <see cref="P:Un4seen.Bass.BASS_TAG_APE_BINARY.Data"/> in bytes.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_APE_BINARY.ToString">
            <summary>
            Returns the Key of the binary tag.
            </summary>
            <returns>Returns the Key of the binary tag.</returns>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_APE_BINARY.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_APE_BINARY.GetTag(System.Int32,System.Int32)">
            <summary>
            Gets a BASS_TAG_APE_BINARY tag from a given channel handle.
            </summary>
            <param name="handle">The channel handle...a HMUSIC or HSTREAM.</param>
            <param name="index">The zero-based index of the binary tag to get.</param>
            <returns>Returns a <see cref="T:Un4seen.Bass.BASS_TAG_APE_BINARY"/> instance if the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_APE_BINARY"/> could be retrieved successfully - else <see langword="null"/> is returned.</returns>
            <remarks>This method internally calles <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> to retrieve the BASS_TAG_APE_BINARY tag.</remarks>
            <example>
            Read all APE binary tags:
            <code lang="C#">
            BASS_TAG_APE_BINARY apeBin;
            for (int n = 0; (apeBin = BASS_TAG_APE_BINARY.GetTag(stream, n)) != null; n++)
            {
                Console.WriteLine(apeBin);
                // access the binary data
                byte[] data = apeBin.Data;
            }
            </code>
            <code lang="VB">
            Dim apeBin As BASS_TAG_APE_BINARY
            Dim n As Integer
            For n = 0 To (apeBin BASS_TAG_APE_BINARY.GetTag(stream, n)) &lt;&gt; Nothing Step n + 1
                Console.WriteLine(apeBin)
                ' access the binary data
                Dim data() As Byte = apeBin.Data 
            Next
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_APE_BINARY.FromIntPtr(System.IntPtr)">
            <summary>
            Creates an instance of the <see cref="T:Un4seen.Bass.BASS_TAG_APE_BINARY"/> class from a pointer.
            </summary>
            <param name="p">The pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_APE_BINARY"/> structure (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_APE_BINARY"/> flag).</param>
            <returns>The created instance of the <see cref="T:Un4seen.Bass.BASS_TAG_APE_BINARY"/> class on success - else <see langword="null"/> is returned.</returns>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_FLAC_PICTURE">
            <summary>
            FLAC picture tag structure as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_PICTURE"/> flag.
            </summary>
            <remarks>
            The width, height, depth, and colors members may be empty (0) so should not be depended on. That information can be obtained from the picture data itself.
            <para>Use the static <see cref="M:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.GetTag(System.Int32,System.Int32)"/> method to get the FLAC picture tag from a given channel handle.</para>
            <para>
            When calling <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> with the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_PICTURE"/> flag make sure to add the index number of the picture to get.
            E.g. call: <code>Bass.BASS_ChannelGetTags( stream, (BASSTag)(BASSTag.BASS_TAG_FLAC_PICTURE + 1) )</code> to get the 2nd picture.
            </para>
            </remarks>
            <example>
            Read all FLAC picture tags:
            <code lang="C#">
            BASS_TAG_FLAC_PICTURE flacPic;
            for (int n = 0; (flacPic = BASS_TAG_FLAC_PICTURE.GetTag(stream, n)) != null; n++)
            {
                Console.WriteLine(flacPic);
                // access the image picture
                Image img = flacPic.Picture;
                // access the raw image data
                byte[] data = flacPic.Data;
            }
            </code>
            <code lang="VB">
            Dim flacPic As BASS_TAG_FLAC_PICTURE
            Dim n As Integer
            For n = 0 To (flacPic  BASS_TAG_FLAC_PICTURE.GetTag(stream, n)) &lt;&gt; Nothing Step n + 1
                Console.WriteLine(flacPic)
                ' access the image picture
                Dim img As Image = flacPic.Picture 
                ' access the raw image data
                Dim data() As Byte = flacPic.Data 
            Next
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_FLAC_PICTURE._apic">
            <summary>
            The picture type, according to the ID3v2 "APIC" frame specification: see <a href="http://www.id3.org/id3v2.3.0">www.id3.org</a> for details.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Mime">
            <summary>
            The MIME type string. This may be "-->" to signify that data contains a URL of the picture rather than the picture data itself.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Desc">
            <summary>
            A description string of the picture.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Width">
            <summary>
            The width in pixels.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Height">
            <summary>
            The height in pixels.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Depth">
            <summary>
            The colour depth in bits-per-pixel.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Colors">
            <summary>
            The number of colours used for indexed-colour pictures (eg. GIF).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Length">
            <summary>
            The size of <see cref="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Data"/> in bytes.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Data">
            <summary>
            The picture data.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Picture">
            <summary>
            The picture image.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.ImageURL">
            <summary>
            Returns the image URL, if the <see cref="P:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.Mime"/> type is "-->" - else <see langword="null"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.ToString">
            <summary>
            Returns the description and mime type of the picture.
            </summary>
            <returns>Returns e.g. "CoverArt (image/jpeg)".</returns>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.GetTag(System.Int32,System.Int32)">
            <summary>
            Gets a BASS_TAG_FLAC_PICTURE tag from a given channel handle.
            </summary>
            <param name="handle">The channel handle...a HMUSIC or HSTREAM.</param>
            <param name="pictureIndex">The zero-based picture index to get.</param>
            <returns>Returns a <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_PICTURE"/> instance if the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_PICTURE"/> could be retrieved successfully - else <see langword="null"/> is returned.</returns>
            <remarks>This method internally calles <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> to retrieve the BASS_TAG_FLAC_PICTURE tag.</remarks>
            <example>
            Read all FLAC picture tags:
            <code lang="C#">
            BASS_TAG_FLAC_PICTURE flacPic;
            for (int n = 0; (flacPic = BASS_TAG_FLAC_PICTURE.GetTag(stream, n)) != null; n++)
            {
                Console.WriteLine(flacPic);
                // access the image picture
                Image img = flacPic.Picture;
                // access the raw image data
                byte[] data = flacPic.Data;
            }
            </code>
            <code lang="VB">
            Dim flacPic As BASS_TAG_FLAC_PICTURE
            Dim n As Integer
            For n = 0 To (flacPic BASS_TAG_FLAC_PICTURE.GetTag(stream, n)) &lt;&gt; Nothing Step n + 1
                Console.WriteLine(flacPic)
                ' access the image picture
                Dim img As Image = flacPic.Picture 
                ' access the raw image data
                Dim data() As Byte = flacPic.Data 
            Next
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_FLAC_PICTURE.FromIntPtr(System.IntPtr)">
            <summary>
            Creates an instance of the <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_PICTURE"/> class from a pointer.
            </summary>
            <param name="p">The pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_PICTURE"/> structure (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_PICTURE"/> flag).</param>
            <returns>The created instance of the <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_PICTURE"/> class on success - else <see langword="null"/> is returned.</returns>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_FLAC_CUE">
            <summary>
            FLAC cuesheet tag structure as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_CUE"/> flag.
            </summary>
            <remarks>
            <para>Further details can be found in the FLAC format specification, here: <a href="http://flac.sourceforge.net/format.html">flac.sourceforge.net</a>.</para>
            <para>Use the static <see cref="M:Un4seen.Bass.BASS_TAG_FLAC_CUE.GetTag(System.Int32)"/> method to get the FLAC cuesheet tag from a given channel handle.</para>
            </remarks>
            <example>
            Read the FLAC cuesheet tag:
            <code lang="C#">
            BASS_TAG_FLAC_CUE cuesheet = BASS_TAG_FLAC_CUE.GetTag(stream);
            </code>
            <code lang="VB">
            Dim cuesheet As BASS_TAG_FLAC_CUE = BASS_TAG_FLAC_CUE.GetTag(stream)
            </code>
            </example>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE.Catalog">
            <summary>
            The media catalog number.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE.LeadIn">
            <summary>
            The number of lead-in samples.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE.IsCD">
            <summary>
            The cuesheet corresponds to a CD?
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE.NumTracks">
            <summary>
            The number of tracks.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE.Tracks">
            <summary>
            The array of <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK"/> tracks (or <see langword="null"/>).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_FLAC_CUE.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_FLAC_CUE.GetTag(System.Int32)">
            <summary>
            Gets a BASS_TAG_FLAC_CUE tag from a given channel handle.
            </summary>
            <param name="handle">The channel handle...a HMUSIC or HSTREAM.</param>
            <returns>Returns a <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_CUE"/> instance if the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_CUE"/> could be retrieved successfully - else <see langword="null"/> is returned.</returns>
            <remarks>This method internally calles <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> to retrieve the BASS_TAG_FLAC_CUE tag.</remarks>
            <example>
            Read the FLAC cuesheet tag:
            <code lang="C#">
            BASS_TAG_FLAC_CUE cuesheet = BASS_TAG_FLAC_CUE.GetTag(stream);
            </code>
            <code lang="VB">
            Dim cuesheet As BASS_TAG_FLAC_CUE = BASS_TAG_FLAC_CUE.GetTag(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_FLAC_CUE.FromIntPtr(System.IntPtr)">
            <summary>
            Creates an instance of the <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_CUE"/> class from a pointer.
            </summary>
            <param name="p">The pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_CUE"/> structure (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_FLAC_CUE"/> flag).</param>
            <returns>The created instance of the <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_CUE"/> class on success - else <see langword="null"/> is returned.</returns>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK">
            <summary>
            FLAC cuesheet tag track structure as returned by the <see cref="P:Un4seen.Bass.BASS_TAG_FLAC_CUE.Tracks"/> member.
            </summary>
            <example>
            Read the FLAC cuesheet tag:
            <code lang="C#">
            BASS_TAG_FLAC_CUE cuesheet = BASS_TAG_FLAC_CUE.GetTag(stream);
            </code>
            <code lang="VB">
            Dim cuesheet As BASS_TAG_FLAC_CUE = BASS_TAG_FLAC_CUE.GetTag(stream)
            </code>
            </example>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.Offset">
            <summary>
            Track offset in samples.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.Number">
            <summary>
            The track number.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.ISRC">
            <summary>
            The International Standard Recording Code.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.Flags">
            <summary>
            The track flags.
            </summary>
            <remarks>Any combination of the following flags:
            <list type="table">
            <item><term>TAG_FLAC_CUE_TRACK_DATA</term><description>Non-audio.</description></item>
            <item><term>TAG_FLAC_CUE_TRACK_PRE</term><description>Pre-emphasis.</description></item>
            </list>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.NumIndexes">
            <summary>
            The number of <see cref="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.Indexes"/>.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.Indexes">
            <summary>
            The array of <see cref="T:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK_INDEX"/> indexes (or <see langword="null"/>).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.CUESHEETTrackType">
            <summary>
            The possible cuesheet track type <see cref="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.Flags"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.CUESHEETTrackType.TAG_FLAC_CUE_TRACK_AUDIO">
            <summary>
            Audio (default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.CUESHEETTrackType.TAG_FLAC_CUE_TRACK_DATA">
            <summary>
            Non-audio.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.CUESHEETTrackType.TAG_FLAC_CUE_TRACK_PRE">
            <summary>
            Pre-emphasis.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK_INDEX">
            <summary>
            FLAC cuesheet tag track index structure as returned by the <see cref="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK.Indexes"/> member.
            </summary>
            <example>
            Read the FLAC cuesheet tag:
            <code lang="C#">
            BASS_TAG_FLAC_CUE cuesheet = BASS_TAG_FLAC_CUE.GetTag(stream);
            </code>
            <code lang="VB">
            Dim cuesheet As BASS_TAG_FLAC_CUE = BASS_TAG_FLAC_CUE.GetTag(stream)
            </code>
            </example>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK_INDEX.Offset">
            <summary>
            Index offset in samples relative to the track offset.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK_INDEX.Number">
            <summary>
            The index number.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_FLAC_CUE_TRACK_INDEX.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT">
            <summary>
            DSDIFF comment tag structure as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_DSD_COMMENT"/> flag.
            </summary>
            <remarks>
            <para>
            When calling <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> with the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_DSD_COMMENT"/> flag make sure to add the index number of the comment tag to get.
            E.g. call: <code>Bass.BASS_ChannelGetTags( stream, (BASSTag)(BASSTag.BASS_TAG_DSD_COMMENT + 1) )</code> to get the 2nd comment tag.
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_DSD_COMMENT.TimeStampYear">
            <summary>
            The year of the comment creation.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_DSD_COMMENT.TimeStampMonth">
            <summary>
            The month of the comment creation.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_DSD_COMMENT.TimeStampDay">
            <summary>
            The day of the comment creation.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_DSD_COMMENT.TimeStampHour">
            <summary>
            The hour of the comment creation.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_DSD_COMMENT.TimeStampMinutes">
            <summary>
            The minutes of the comment creation.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_DSD_COMMENT.CommentType">
            <summary>
            The comment type... 0 = general comment, 1 = channel comment, 2 = sound source, 3 = file history.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.BASS_TAG_DSD_COMMENT.CommentRef">
            <summary>
            The comment reference. Together with CommentType this indicates to what the comment refers. 
            If CommentType=0 then this should be 0. 
            If CommentType=1 then 0 = all channels, 1 = 1st channel, 2 = 2nd channel, etc. 
            If CommentType=2 then 0 = DSD recording, 1 = analogue recording, 2 = PCM recording. 
            If CommentType=3 then 0 = general remark, 1 = name of the operator, 2 = name or type of the creating machine, 3 = time zone information, 4 = revision of the file.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASS_TAG_DSD_COMMENT.CommentText">
            <summary>
            The description of the comment.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_DSD_COMMENT.ToString">
            <summary>
            Returns the CommentText.
            </summary>
            <returns>Returns the Text of the comment tag.</returns>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_DSD_COMMENT.#ctor">
            <summary>
            Hidden default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_DSD_COMMENT.GetTag(System.Int32,System.Int32)">
            <summary>
            Gets a BASS_TAG_DSD_COMMENT tag from a given channel handle.
            </summary>
            <param name="handle">The channel handle...a HMUSIC or HSTREAM.</param>
            <param name="index">The zero-based index of the binary tag to get.</param>
            <returns>Returns a <see cref="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT"/> instance if the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_DSD_COMMENT"/> could be retrieved successfully - else <see langword="null"/> is returned.</returns>
            <remarks>This method internally calles <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> to retrieve the BASS_TAG_DSD_COMMENT tag.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASS_TAG_DSD_COMMENT.FromIntPtr(System.IntPtr)">
            <summary>
            Creates an instance of the <see cref="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT"/> class from a pointer.
            </summary>
            <param name="p">The pointer to a <see cref="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT"/> structure (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_DSD_COMMENT"/> flag).</param>
            <returns>The created instance of the <see cref="T:Un4seen.Bass.BASS_TAG_DSD_COMMENT"/> class on success - else <see langword="null"/> is returned.</returns>
        </member>
        <member name="T:Un4seen.Bass.WAVEFORMATEX">
            <summary>
            The WAVEFORMATEX structure defines the format of waveform-audio data. 
            Only format information common to all waveform-audio data formats is included in this structure. 
            For formats that require additional information, this structure is included as the first member in another structure, along with the additional information.
            See <see cref="T:Un4seen.Bass.WAVEFORMATEXT"/> for details.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFORMATEX.wFormatTag">
            <summary>
            Waveform-audio format type (see <see cref="T:Un4seen.Bass.WAVEFormatTag"/>). Format tags are registered with Microsoft Corporation for many compression algorithms.
            A complete list of format tags can be found in the Mmreg.h header file. 
            For one- or two-channel PCM data, this value should be WAVE_FORMAT_PCM.
            <para>Default = 1 (WAVE_FORMAT_PCM)</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFORMATEX.nChannels">
            <summary>
            Number of channels in the waveform-audio data. Monaural data uses one
            channel and stereo data uses two channels.
            <para>Default = 2</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFORMATEX.nSamplesPerSec">
            <summary>
            Sample rate, in samples per second (hertz), that each channel should
            be played or recorded. If wFormatTag is WAVE_FORMAT_PCM, then common
            values for nSamplesPerSec are 8.0 kHz, 11.025 kHz, 22.05 kHz, and
            44.1 kHz. For non-PCM formats, this member must be computed according
            to the manufacturer's specification of the format tag.
            <para>Default = 44100</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFORMATEX.nAvgBytesPerSec">
            <summary>
            In most cases, this member contains the required average data-transfer rate, 
            in bytes per second, for the format tag. If wFormatTag is WAVE_FORMAT_PCM, 
            nAvgBytesPerSec should be equal to the product of nSamplesPerSec and nBlockAlign. 
            For non-PCM formats, this member must be computed according to the manufacturer's 
            specification of the format tag. 
            When the Windows Media Audio 9 Codec is in quality-based variable-bit-rate mode, 
            the high-order bytes of this member are set to 0x7fffff and the low-order byte is set to a value 
            from one through 100 which indicates the quality level.
            <para>Typical Calculation: nSamplesPerSec * nBlockAlign</para>
            <para>Default = 176400</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFORMATEX.nBlockAlign">
            <summary>
            Block alignment, in bytes. The block alignment is the minimum atomic unit
            of data for the wFormatTag format type. If wFormatTag is WAVE_FORMAT_PCM,
            nBlockAlign should be equal to the product of nChannels and wBitsPerSample
            divided by 8 (bits per byte). For non-PCM formats, this member must be
            computed according to the manufacturer's specification of the format tag. 
            Playback and record software must process a multiple of nBlockAlign bytes
            of data at a time. Data written and read from a device must always start
            at the beginning of a block. For example, it is illegal to start playback
            of PCM data in the middle of a sample (that is, on a non-block-aligned boundary).
            <para>Typical Calculation: nChannels * (wBitsPerSample / 8)</para>
            <para>Default = 4</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFORMATEX.wBitsPerSample">
            <summary>
            Bits per sample for the wFormatTag format type. If wFormatTag is
            WAVE_FORMAT_PCM, then wBitsPerSample should be equal to 8, 16 or 32. For
            non-PCM formats, this member must be set according to the manufacturer's
            specification of the format tag. Some compression schemes cannot define
            a value for wBitsPerSample, so this member can be zero.
            <para>Default = 16</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFORMATEX.cbSize">
            <summary>
            Size, in bytes, of extra format information appended to the end of the WAVEFORMATEX structure. 
            This information can be used by non-PCM formats to store extra attributes for the wFormatTag. 
            If no extra information is required by the wFormatTag, this member must be set to zero. 
            For WAVE_FORMAT_PCM formats (and only WAVE_FORMAT_PCM formats), this member is ignored.
            <para>Default = 0</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.WAVEFORMATEX.#ctor">
            <summary>
            Default Constructor.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.WAVEFORMATEX.#ctor(Un4seen.Bass.WAVEFormatTag,System.Int16,System.Int32,System.Int16,System.Int16)">
            <summary>
            Creates an instance setting the members to certain values.
            </summary>
            <param name="format">Waveform-audio format type (see <see cref="T:Un4seen.Bass.WAVEFormatTag"/>).</param>
            <param name="channels">Number of channels in the waveform-audio data.</param>
            <param name="samplesPerSec">Sample rate, in samples per second (hertz), that each channel should be played or recorded.</param>
            <param name="bitsPerSample">Bits per sample for the wFormatTag format type (e.g. 8, 16 or 32).</param>
            <param name="exSize">Size, in bytes, of extra format information appended to the end of the WAVEFORMATEX structure.</param>
        </member>
        <member name="M:Un4seen.Bass.WAVEFORMATEX.ToString">
            <summary>
            Returns a description string for the instance members.
            </summary>
            <returns>Returns a description string for the instance members (wFormatTag, res, nSamplesPerSec, chans).</returns>
        </member>
        <member name="T:Un4seen.Bass.WAVEFORMATEXT">
            <summary>
            The WAVEFORMATEXT is a specialized and generic format structure. It contains the WAVEFORMATEX structure and define the format of any Media Foundation audio data. 
            Only format information common to all MF audio data formats are included in this structure. 
            For formats that require additional information, this structure has an additional byte[] keeping the additional information.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFORMATEXT.waveformatex">
            <summary>
            The <see cref="T:Un4seen.Bass.WAVEFORMATEX"/> structure that specifies the basic format.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.WAVEFORMATEXT.extension">
            <summary>
            Extra format information is appended to the end of the WAVEFORMATEX structure in this array. 
            This information can be used by non-PCM formats to store extra attributes for the wFormatTag. 
            If no extra information is required by the wFormatTag, this member should be set to zero. 
            For WAVE_FORMAT_PCM formats (and only WAVE_FORMAT_PCM formats), this member is ignored.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.WAVEFORMATEXT.#ctor(System.Int32)">
            <summary>
            Creates an instance of a generic audio codec format with a given total length.
            </summary>
            <param name="length">The total lenght of the format structure including the extension data.</param>
            <example>
            </example>
        </member>
        <member name="M:Un4seen.Bass.WAVEFORMATEXT.#ctor(System.IntPtr)">
            <summary>
            Creates an instance of a generic audio codec format from the given format buffer pointer.
            </summary>
            <param name="codec">A pointer to an audio codec format structure as e.g. returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/> using the <see cref="F:Un4seen.Bass.BASSTag.BASS_TAG_WAVEFORMAT"/> flag.</param>
        </member>
        <member name="M:Un4seen.Bass.WAVEFORMATEXT.ToString">
            <summary>
            Returns a description string for the instance members.
            </summary>
            <returns>Returns a description string for the instance members (wFormatTag, res, nSamplesPerSec, chans).</returns>
        </member>
        <member name="P:Un4seen.Bass.WAVEFORMATEXT.FormatLength">
            <summary>
            Returns the total length of this instance.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.STREAMPROC">
            <summary>
            User stream writing callback delegate (to be used with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/>).
            </summary>
            <param name="handle">The stream that needs writing.</param>
            <param name="buffer">The pointer to the buffer to write the sample data in. The sample data must be written in standard Windows PCM format - 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to 1.</param>
            <param name="length">The number of bytes to write.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/> was called.</param>
            <returns>The number of bytes written by the function, optionally using the BASS_STREAMPROC_END (<see cref="T:Un4seen.Bass.BASSStreamProc"/>) flag to signify that the end of the stream is reached.</returns>
            <remarks>
            <para>A stream writing function should obviously be as quick as possible, because other streams (and MOD musics) can't be updated until it's finished.</para>
            <para>It is better to return less data quickly, rather than spending a long time delivering the amount BASS requested.</para>
            <para>Although a STREAMPROC may return less data than BASS requests, be careful not to do so by too much, too often. If the buffer level gets too low, BASS will automatically stall playback of the stream, until the whole buffer has refilled.</para>
            <para><see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check the buffer level, and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> can be used to check if playback has stalled.</para>
            <para>A BASS_SYNC_STALL sync can also be set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to be triggered upon playback stalling or resuming.</para>
            <para>If you do return less than the requested amount of data, the number of bytes should still equate to a whole number of samples.</para>
            <para>Some functions can cause problems if called from within a stream (or DSP) function. Do not call these functions from within a stream callback:</para>
            <para><see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Free"/>, <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/> or any other stream creation functions.</para>
            <para>Also, do not call <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> with the same handle as received by the callback.</para>
            <para>When streaming multi-channel sample data, the channel order of each sample is as follows:</para>
            <para>3 channels: left-front, right-front, center.</para>
            <para>4 channels: left-front, right-front, left-rear/side, right-rear/side.</para>
            <para>6 channels(5.1): left-front, right-front, center, LFE, left-rear/side, right-rear/side.</para>
            <para>8 channels(7.1): left-front, right-front, center, LFE, left-rear/side, right-rear/side, left-rear center, right-rear center.</para>
            <para>
            It is clever to NOT alloc buffer data (e.g. a float[]) everytime within the callback method, since ALL callbacks should be really fast!
            And if you would do a 'float[] data = new float[]' every time here...the GarbageCollector would never really clean up that memory.
            Sideeffects might occure, due to the fact, that BASS will call this callback too fast and too often...
            However, this is not always the case, so in most examples it'll work just fine - but if you got problems - try moving any memory allocation things outside any callbacks.
            </para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
            <example>
            A callback function to stream a file, in 44100hz 16-bit stereo:
            <code lang="C#">
            private STREAMPROC _myStreamCreate; // make it global, so that the GC can not remove it
            private byte[] _data; // local data buffer
            ...
            _myStreamCreate = new STREAMPROC(MyFileProc);
            FileStream _fs = File.OpenRead("test.raw");
            int channel = Bass.BASS_StreamCreate(44100, 2, BASSFlag.BASS_DEFAULT, _myStreamCreate, IntPtr.Zero);
            Bass.BASS_ChannelPlay(channel, false);
            ...
            private int MyFileProc(int handle, IntPtr buffer, int length, IntPtr user)
            {
            	// implementing the callback for BASS_StreamCreate...
            	// here we need to deliver PCM sample data
            	// increase the data buffer as needed
            	if (_data == null || _data.Length &lt; length)
            		_data = new byte[length];
            	int bytesread = _fs.Read( _data, 0, length ); 
            	Marshal.Copy( _data, 0, buffer, bytesread );
            	if ( bytesread &lt; length )
            	{
            		bytesread |= (int)BASSStreamProc.BASS_STREAMPROC_END; // set indicator flag
            		_fs.Close();
            	}
            	return bytesread;
            }
            </code>
            <code lang="VB">
            Private _myStreamCreate As STREAMPROC  ' make it global, so that the GC can not remove it
            Private _data As Byte() = Nothing  ' our local buffer
            ...
            _myStreamCreate = New STREAMPROC(AddressOf MyFileProc)
            Dim fs As FileStream =  File.OpenRead("test.raw")
            Dim channel As Integer =  Bass.BASS_StreamCreate(44100, 2, BASSFlag.BASS_DEFAULT, _myStreamCreate, IntPtr.Zero) 
            Bass.BASS_ChannelPlay(channel, False)
            ...
            Private Function MyFileProc(ByVal handle As Integer, ByVal buffer As IntPtr, 
                                        ByVal length As Integer, ByVal user As IntPtr) As Integer
              ' implementing the callback for BASS_StreamCreate...
              ' here we need to deliver PCM sample data
              ' increase the data buffer as needed
              If _data = Nothing OrElse _data.Length &lt; length Then
                _data = New Byte(length) {}
              End If
              Dim bytesread As Integer = _fs.Read(_data, 0, length) 
              Marshal.Copy(_data, 0, buffer, bytesread)
              If bytesread &lt; length Then
                bytesread = bytesread Or CInt(BASSStreamProc.BASS_STREAMPROC_END) ' set indicator flag
                _fs.Close()
              EndIf
              Return bytesread
            End Function
            </code>
            If you're into C# you might also make use of native pointers in an unsafe code block:
            <code lang="C#">
            unsafe private int MyFileProcUnsafe(int handle, IntPtr buffer, int length, IntPtr user)
            {
            	// simply cast the given IntPtr to a native pointer to byte values
            	byte *data = (byte*)buffer;
            	// read the file into the data pointer directly
            	int bytesread = length;
            	for (int a=0; a &lt; length; a++)
            	{
            		int val = _fs.ReadByte();
            		if (val != -1)
            		{
            			data[a] = (byte)val;   // set the value
            		}
            		else
            		{
            			bytesread = a;
            			break;
            		}
            	}
            	// end of the file/stream?
            	if ( bytesread &lt; length )
            	{
            		bytesread |= (int)BASSStreamProc.BASS_STREAMPROC_END; // set indicator flag
            		_fs.Close();
            	}
            	return bytesread;
            }
            </code>
            However, even if we directly access memory here, this is not really faster in that case, since we read the file byte per byte and also in a way perform a copy (we just use a single int buffer called val).
            So in essence when you need to read from a file you should take care, that the file access and read operation is fast an additional Marshal.Copy wouldn't count much in terms of performance.
            The only advantage we get here is actually, that we use less memory.
            </example>
        </member>
        <member name="T:Un4seen.Bass.FILECLOSEPROC">
            <summary>
            User file stream close callback function (to be used with <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).
            </summary>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> was called.</param>
            <remarks>With a buffered file stream, this function is called as soon as reading reaches the end of the file. 
            If the stream is freed before then, this function could be called while its <see cref="T:Un4seen.Bass.FILEREADPROC"/> function is in progress. 
            If that happens, the <see cref="T:Un4seen.Bass.FILEREADPROC"/> function call should be immediately cancelled.
            </remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="T:Un4seen.Bass.FILELENPROC">
            <summary>
            User file stream length callback function (to be used with <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).
            </summary>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> was called.</param>
            <returns>The length of the file in bytes. 
            Returning 0 for a buffered file stream, makes BASS stream the file in blocks, and is equivalent to using the BASS_STREAM_BLOCK flag 
            in the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> call.</returns>
            <remarks>This function is called first thing, and is only used the once with buffered streams. 
            With unbuffered streams, it may be used again when testing for EOF (end of file), 
            allowing the file to grow in size.
            </remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="T:Un4seen.Bass.FILEREADPROC">
            <summary>
            User file stream read callback function (to be used with <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).
            </summary>
            <param name="buffer">Pointer to the buffer to put the data in.</param>
            <param name="length">Maximum number of bytes to read.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> was called.</param>
            <returns>The number of bytes read... -1 = end of file, 0 = end of file (buffered file stream only).</returns>
            <remarks>During creation of the stream, this function should try to return the amount of data requested. 
            After that, it can just return whatever is available up to the requested amount.
            <para>For an unbuffered file stream during playback, this function should be as quick as possible - 
            any delays will not only affect the decoding of the current stream, but also all other streams and MOD musics that are playing. 
            It is better to return less data (even none) rather than wait for more data. 
            A buffered file stream isn't affected by delays like this, as this function runs in its own thread then.</para>
            </remarks>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="T:Un4seen.Bass.FILESEEKPROC">
            <summary>
            User file stream seek callback function (to be used with <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>).
            </summary>
            <param name="offset">Position in bytes to seek to.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFileUser(Un4seen.Bass.BASSStreamSystem,Un4seen.Bass.BASSFlag,Un4seen.Bass.BASS_FILEPROCS,System.IntPtr)"/> was called.</param>
            <returns><see langword="true"/> if successful, else <see langword="false"/>.</returns>
            <example>See <see cref="T:Un4seen.Bass.BASS_FILEPROCS"/>.</example>
        </member>
        <member name="T:Un4seen.Bass.DSPPROC">
            <summary>
            User defined DSP callback function (to be used with <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/>).
            </summary>
            <param name="handle">The DSP handle (as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/>).</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The pointer to the buffer to apply the DSP to. The sample data is in standard Windows PCM format - 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to 1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of bytes to process.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/> was called.</param>
            <remarks>
            <para>A DSP function should obviously be as quick as possible... playing streams, MOD musics and other DSP functions can not be processed until it has finished.</para>
            <para>Some functions can cause problems if called from within a DSP (or stream) function. Do not call these functions from within a DSP callback:</para>
            <para><see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Free"/>, <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/> (or any other stream creation functions).</para>
            <para>Also, do not call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelRemoveDSP(System.Int32,System.Int32)"/> with the same DSP handle as received by the callback, or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_MusicFree(System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/> with the same channel handle as received by the callback.</para>
            <para>If the BASS_CONFIG_FLOATDSP config option is set, then DSP callback functions will always be passed 32-bit floating-point sample data, regardless of what the channels' actual sample format is.</para>
            <para>
            It is clever to NOT alloc buffer data (e.g. a float[]) everytime within the callback method, since ALL callbacks should be really fast!
            And if you would do a 'float[] data = new float[]' every time here...the GarbageCollector would never really clean up that memory.
            Sideeffects might occure, due to the fact, that BASS will call this callback too fast and too often...
            However, this is not always the case, so in most examples it'll work just fine - but if you got problems - try moving any memory allocation things outside any callbacks.
            </para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
            <example>
            You might use this code as a starting reference (it assumes 32-bit floating-point sample data):
            <code lang="C#">
            private DSPPROC _myDSPAddr; // make it global, so that the GC can not remove it
            private float[] _data; // local data buffer
            ...
            _myDSPAddr = new DSPPROC(MyDSPCallback);
            Bass.BASS_ChannelSetDSP(_stream, _myDSPAddr, IntPtr.Zero, 2);
            ...
            private void MyDSPCallback(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              if (length == 0 || buffer == IntPtr.Zero)
                return;
              // number of bytes in 32-bit floats, since length is in bytes
              int l4 = length/4;
              // increase the data buffer as needed
              if (_data == null || _data.Length &lt; l4)
                _data = new float[l4];
              // copy from managed to unmanaged memory
              Marshal.Copy(buffer, _data, 0, l4);
            	
              // ... do your processing here
                
              // copy back from unmanaged to managed memory
              Marshal.Copy(_data, 0, buffer, l4);
            }
            </code>
            <code lang="VB">
            Private _myDSPAddr As DSPPROC  ' make it global, so that the GC can not remove it
            Private _data As Single() = Nothing  ' our local buffer
            ...
            _myDSPAddr = New DSPPROC(AddressOf MyDSPCallback)
            Bass.BASS_ChannelSetDSP(_stream, _myDSPAddr, IntPtr.Zero, 2)
            ...
            Private Sub MyGain(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
              ' number of bytes in 32-bit floats, since length is in bytes
              Dim l4 As Integer = length / 4
              ' increase the data buffer as needed
              If _data Is Nothing OrElse _data.Length &lt; l4 Then
                _data = New Single(l4) {}
              End If
              ' copy from unmanaged to managed memory
              Marshal.Copy(buffer, _data, 0, l4)
              	
              // ... do your processing here
            
              ' copy back from unmanaged to managed memory
              Marshal.Copy(_data, 0, buffer, l4)
            End Sub
            </code>
            If you're using C# you might even use unsafe code blocks to directly access memory via pointers, like in C/C++:
            <para>Note: such application must be compiled using the /unsafe compiler option!</para>
            <code lang="C#">
            myDSPAddr = new DSPPROC(MyDSPGainUnsafe);
            Bass.BASS_ChannelSetDSP(_stream, myDSPAddr, IntPtr.Zero, 2);
            ...
            // the unsafe callback
            private DSPPROC myDSPAddr; // make it global, so that the Garbage Collector can not remove it
            private void MyDSPGainUnsafe(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              if (_gainAmplification == 1f || length == 0 || buffer == IntPtr.Zero)
                return;
              // length is in bytes, so the number of floats to process is:
              // length/4 : byte = 8-bit, float = 32-bit
              int l4 = length/4;
              unsafe
              {
                float *data = (float*)buffer;
                for (int a=0; a&lt;l4; a++)
                {
                  data[a] *= _gainAmplification;
                }
              }
            }
            </code>
            Using unsafe code is fast and efficient (especially in DSP routines), but is not type safe (e.g. no overflow handling, no type checking etc.) - so you just need to know what you are doing.
            </example>
        </member>
        <member name="T:Un4seen.Bass.DOWNLOADPROC">
            <summary>
            Internet stream download callback function (to be used with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/>).
            </summary>
            <param name="buffer">The pointer to the buffer containing the downloaded data... <see cref="F:System.IntPtr.Zero"/> = finished downloading.</param>
            <param name="length">The number of bytes in the buffer... 0 = HTTP or ICY tags.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>The callback will be called before the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> call returns (if it's successful), with the initial downloaded data. So any initialization (eg. creating the file if writing to disk) needs to be done either before the call, or in the callback function.</para>
            <para>When the BASS_STREAM_STATUS flag is specified in the <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateURL(System.String,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.DOWNLOADPROC,System.IntPtr)"/> call, HTTP and ICY tags may be passed to the callback during connection, before any stream data is received. The tags are given exactly as would be returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetTags(System.Int32,Un4seen.Bass.BASSTag)"/>. You can destinguish between HTTP and ICY tags by checking what the first string starts with ("HTTP" or "ICY").</para>
            <para>A download callback function could be used in conjunction with a BASS_SYNC_META sync set via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>, to save individual tracks to disk from a Shoutcast stream.</para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
            <example>
            Stream an MP3 file, and save a local copy:
            <code lang="C#">
            private FileStream _fs = null;
            private DOWNLOADPROC _myDownloadProc;
            private byte[] _data; // local data buffer
            ...
            _myDownloadProc = new DOWNLOADPROC(MyDownload);
            int stream = Bass.BASS_StreamCreateURL("http://www.asite.com/afile.mp3", 0, 
                              BASSFlag.BASS_DEFAULT, _myDownloadProc, IntPtr.Zero);
            ...
            private void MyDownload(IntPtr buffer, int length, IntPtr user)
            {
              if (_fs == null) 
              {
                // create the file
                _fs = File.OpenWrite( "output.mp3" );
              }
              if (buffer == IntPtr.Zero)
              {
                // finished downloading
                _fs.Flush();
                _fs.Close();
              }
              else
              {
                // increase the data buffer as needed
                if (_data == null || _data.Length &lt; length)
                  _data = new byte[length];
                // copy from managed to unmanaged memory
                Marshal.Copy(buffer, _data, 0, length);
                // write to file
                _fs.Write( _data, 0, length );
              }
            }
            </code>
            <code lang="VB">
            Private _fs As FileStream = Nothing
            Private _myDownloadProc As DOWNLOADPROC
            Private _data() As Byte ' local data buffer
            ...
            _myDownloadProc = New DOWNLOADPROC(AddressOf MyDownload)
            Dim stream As Integer = Bass.BASS_StreamCreateURL("http://www.asite.com/afile.mp3", 0, 
                                         BASSFlag.BASS_DEFAULT, _myDownloadProc, IntPtr.Zero)
            ...
            Private Sub MyDownload(buffer As IntPtr, length As Integer, user As IntPtr)
              If _fs Is Nothing Then
                ' create the file
                _fs = File.OpenWrite("output.mp3")
              End If
              If buffer = IntPtr.Zero Then
                ' finished downloading
                _fs.Flush()
                _fs.Close()
              Else
                ' increase the data buffer as needed
                If _data Is Nothing OrElse _data.Length &lt; length Then
                  _data = New Byte(length) {}
                End If
                ' copy from managed to unmanaged memory
                Marshal.Copy(buffer, _data, 0, length)
                ' write to file
                _fs.Write(_data, 0, length)
              End If
            End Sub
            </code>
            Note: If you are into C# the above example can also make use of usafe code blocks using native pointers to read the data from BASS and to write it to a file:
            <code lang="C#">
            // within your download callback method...
            // assuming you have created a: BinaryWriter bw = new BinaryWriter(_fs);
            unsafe
            {
              // simply cast the given IntPtr to a native pointer to short values
              // assuming you receive 16-bit sample data here
              short *data = (short*)buffer;
              for (int a = 0; a &lt; length/2; a++)
              {
                // write the received sample data to a local file
                bw.Write( data[a] );
              }
            }
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.SYNCPROC">
            <summary>
            User defined synchronizer callback function (see <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> for details).
            </summary>
            <param name="handle">The sync handle that has occured (as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/>).</param>
            <param name="channel">The channel that the sync occured on.</param>
            <param name="data">Additional data associated with the sync's occurance.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            <para>BASS creates a single thread dedicated to executing sync callback functions, so a callback function should be quick as other syncs cannot be processed until it has finished. Attribute slides (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelSlideAttribute(System.Int32,Un4seen.Bass.BASSAttribute,System.Single,System.Int32)"/>) are also performed by the sync thread, so are also affected if a sync callback takes a long time.</para>
            <para>"Mixtime" syncs (BASS_SYNC_MIXTIME) are not executed in the sync thread, but immediately in whichever thread triggers them. In most cases that will be an update thread, and so the same restrictions that apply to stream callbacks (<see cref="T:Un4seen.Bass.STREAMPROC"/>) also apply here.</para>
            <para><see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> can be used in a mixtime sync to implement custom looping, eg. set a BASS_SYNC_POS sync at the loop end position and seek to the loop start position in the callback.</para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
            <example>
            Do some processing until a MOD music reaches the 10th order
            <code lang="C#">
            private volatile bool _order10 = false; // the order 10 flag
            private SYNCPROC _mySyncProc;
            ...
            // set the one-time order 10 sync
            _mySyncProc = new SYNCPROC(MySync);
            Bass.BASS_ChannelSetSync(music, BASSSync.BASS_SYNC_MUSICPOS | BASSSync.BASS_SYNC_ONETIME, 
                 Utils.MakeLong64(10,0), _mySyncProc, IntPtr.Zero);
            while (!_order10) 
            {
              // order 10 has not arrived, so do some processing
              Thread.Sleep(0);
            }
            // order 10 has arrived!
            ...
            // the sync callback
            private void MySync(int syncHandle, int channel, int data, IntPtr user) 
            {
            	_order10 = true; // set the order 10 flag
            }
            </code>
            <code lang="VB">
            Private _order10 As Boolean = False ' the order 10 flag
            Private _mySyncProc As SYNCPROC
            ...
            ' set the one-time order 10 sync
            _mySyncProc = New SYNCPROC(AddressOf MySync)
            Bass.BASS_ChannelSetSync(music, BASSSync.BASS_SYNC_MUSICPOS Or BASSSync.BASS_SYNC_ONETIME, 
                 Utils.MakeLong64(10, 0), _mySyncProc, IntPtr.Zero)
            While Not _order10
              ' order 10 has not arrived, so do some processing
              Thread.Sleep(0)
            End While
            ' order 10 has arrived!
            ...
            ' the sync callback
            Private Sub MySync(syncHandle As Integer, channel As Integer, data As Integer, user As IntPtr)
              _order10 = True ' set the order 10 flag
            End Sub
            </code>
            Process metadata received from an internet stream:
            <code lang="C#">
            private SYNCPROC _mySync;
            ...
            int stream = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_DEFAULT, null, 0);
            // set a sync to get notified on stream title updates
            _mySync = new SYNCPROC(MetaSync);
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_META, 0, _mySync, IntPtr.Zero);
            Bass.BASS_ChannelPlay(stream, false);
            ...
            private void MetaSync(int handle, int channel, int data, IntPtr user)
            {
              // BASS_SYNC_META is triggered
              string[] tags = Bass.BASS_ChannelGetTagsMETA(channel);
              foreach (string tag in tags)
                Console.WriteLine(tag);
            }
            </code>
            <code lang="VB">
            Private _mySync As SYNCPROC
            ...
            Dim stream As Integer =  Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_DEFAULT, Nothing, 0) 
            ' set a sync to get notified on stream title updates
            _mySync = New SYNCPROC(AddressOf MetaSync)
            Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_META, 0, _mySync, IntPtr.Zero)
            Bass.BASS_ChannelPlay(stream, False)
            ...
            Private Sub MetaSync(ByVal handle As Integer, ByVal channel As Integer, 
                                 ByVal data As Integer, ByVal user As IntPtr)
              ' BASS_SYNC_META is triggered
              Dim tags() As String = Bass.BASS_ChannelGetTagsMETA(channel) 
              Dim tag As String
              For Each tag In tags
                Console.WriteLine(tag)
            End Sub
            </code>
            Perform a loop between a start and end position:
            <code lang="C#">
            private int _loopSync = 0;
            private SYNCPROC _loopSyncCallback;
            ...
            long loopStartPos = 1024;  // set to whatever you need
            long loopEndPos   = 20480; // set to whatever you need
            _loopSyncCallback = new SYNCPROC(LoopSync);
            _loopSync = Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_POS | BASSSync.BASS_SYNC_MIXTIME, 
                                                 loopEndPos, _loopSyncCallback, new IntPtr(loopStartPos));
            ...
            // to remove the loop call this
            Bass.Bass.BASS_ChannelRemoveSync(stream, _loopSync);
            ...
            // the sync callback
            private void LoopSync(int syncHandle, int channel, int data, IntPtr user) 
            {
                // move the position to the start (which is given in the user data)
                Bass.BASS_ChannelSetPosition(channel, user.ToInt64());
            }
            </code>
            <code lang="VB">
            Private _loopSync As Integer = 0 
            Private _loopSyncCallback As SYNCPROC 
            ...
            Dim loopStartPos As Long = 1024  ' set to whatever you need
            Dim loopEndPos As Long   = 20480 ' set to whatever you need
            _loopSyncCallback = New SYNCPROC(AddressOf LoopSync);
            _loopSync = Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_POS Or BASSSync.BASS_SYNC_MIXTIME, 
                                                 loopEndPos, _loopSyncCallback, New IntPtr(loopStartPos)) 
            ...
            ' to remove the loop call this
            Bass.Bass.BASS_ChannelRemoveSync(stream, _loopSync)
            ...
            ' the sync callback
            Private Sub LoopSync(ByVal handle As Integer, ByVal channel As Integer, 
                                 ByVal data As Integer, ByVal user As IntPtr)
                ' move the position to the start (which is given in the user data)
                Bass.BASS_ChannelSetPosition(channel, user.ToInt64())
            End Sub
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.RECORDPROC">
            <summary>
            User defined callback function to process recorded sample data.
            </summary>
            <param name="handle">The recording handle that the data is from.</param>
            <param name="buffer">The pointer to the buffer containing the recorded sample data. The sample data is in standard Windows PCM format, that is 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1.</param>
            <param name="length">The number of bytes in the buffer.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/> was called.</param>
            <returns>Return <see langword="false"/> to stop recording, and anything else to continue recording.</returns>
            <remarks>
            <see cref="M:Un4seen.Bass.Bass.BASS_RecordFree"/> should not be used to free the recording device within a recording callback function. Nor should <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/> be used to stop the recording; return <see langword="false"/> to do that instead.
            <para>
            It is clever to NOT alloc any buffer data (e.g. a byte[]) everytime within the callback method, since ALL callbacks should be really fast!
            And if you would do a 'byte[] data = new byte[]' every time here...the GarbageCollector would never really clean up that memory.
            Sideeffects might occure, due to the fact, that BASS will call this callback too fast and too often...
            </para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
            <example>
            <code lang="C#">
            private RECORDPROC _myRecProc; // make it global, so that the GC can not remove it
            private int _byteswritten = 0;
            private byte[] _recbuffer; // local recording buffer
            ...
            if ( Bass.BASS_RecordInit(-1) )
            {
              _myRecProc = new RECORDPROC(MyRecording);
              int recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero);
              ...
              // start recording
              Bass.BASS_ChannelPlay(recHandle, false);
            }
            ...
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              bool cont = true;
              if (length &gt; 0 &amp;&amp; buffer != IntPtr.Zero)
              {
                // increase the rec buffer as needed
                if (_recbuffer == null || _recbuffer.Length &lt; length)
                  _recbuffer = new byte[length];
                // copy from managed to unmanaged memory
                Marshal.Copy(buffer, _recbuffer, 0, length);
                _byteswritten += length;
                // write to file
                ...
                // stop recording after a certain amout (just to demo)
                if (_byteswritten &gt; 800000)
                  cont = false; // stop recording
              }
              return cont;
            }
            </code>
            <code lang="VB">
            Private _myRecProc As RECORDPROC ' make it global, so that the GC can not remove it
            Private _byteswritten As Integer = 0
            Private _recbuffer() As Byte ' local recording buffer
            ...
            If Bass.BASS_RecordInit(-1) Then
              _myRecProc = New RECORDPROC(AddressOf MyRecording)
              Dim recHandle As Integer = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero)
              ...
              ' start recording
              Bass.BASS_ChannelPlay(recHandle, False)
            End If
            ...
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              Dim cont As Boolean = True
              If length &gt; 0 AndAlso buffer &lt;&gt; IntPtr.Zero Then
                ' increase the rec buffer as needed
                If _recbuffer Is Nothing OrElse _recbuffer.Length &lt; length Then
                  _recbuffer = New Byte(length) {}
                End If
                ' copy from managed to unmanaged memory
                Marshal.Copy(buffer, _recbuffer, 0, length)
                _byteswritten += length
                ' write to file
                ...
                ' stop recording after a certain amout (just to demo)
                If _byteswritten &gt; 800000 Then
                  cont = False ' stop recording
                End If
              End If
              Return cont
            End Function
            </code>
            If you are into C# you might also use an unsafe codeblock with native pointer access 
            (which might be must faster than the above - depending on what you are doing with the data):
            <code lang="C#">
            private unsafe bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              bool cont = true;
              if (length &gt; 0 &amp;&amp; buffer != IntPtr.Zero)
              {
                // assuming 16-bit sample data here
                short *data = (short*)buffer;
                ...
            
                // stop recording after a certain amout (just to demo)
                if (_byteswritten &gt; 800000)
                  cont = false; // stop recording
              }
              return cont;
            }
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.IOSNOTIFYPROC">
            <summary>
            iOS notification callback function.
            </summary>
            <param name="status">The notification status, one of the following (see <see cref="T:Un4seen.Bass.BASSIOSNotify"/>):
            <para>BASS_IOSNOTIFY_INTERRUPT : interruption started.</para>
            <para>BASS_IOSNOTIFY_INTERRUPT_END : interruption ended.</para>
            </param>
            <remarks>
            The callback function receives notification of audio session interruptions which can use that instead of AudioSessionInitialize.
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.BPMCounter">
            <summary>
            Provides general methods to detect beats live in an audio signal and to calculate the resulting Beats Per Minute (BPM).
            <para>Requires: bass.dll - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>The BPMCounter class is an internal implementation of the BASS.NET API and does not require any additional extension or add-on to the BASS audio library, meaning only bass.dll is required.</para>
            <para>However, <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> must have been called before using any method within this class!</para>
            <para>NOTE: When using the BPMCounter class with an already existing decoding channel (created with the BASS_STREAM_DECODE flag) the data will be retrieved from that channel, meaning the data will be 'stolen'.
            So it is NOT recommended to use this class with any decoding streams.</para>
            <para>Internally the algo is based on human ear simulation - meaning an average energy history of 1 second is used, since this is what the human ear can keep - so the BPM results might change and vary more often as with systems scanning the whole file or bigger parts of it. 
            The advantage is therefore that this system might be used with live data and has a fast reaction time of about 1 second only - like our human ear.</para>
            <para>The typical use of this class is as followed:</para>
            <para>a) create an instance of this class (e.g. at the beginning of your application)</para>
            <para>b) use a timer callback (e.g. every 20ms or every 25ms) to process the audio signal (the timer frequency must be specified when creating the class instance).</para>
            <para>c) in the timer callback call <see cref="M:Un4seen.Bass.Misc.BPMCounter.ProcessAudio(System.Int32,System.Boolean)"/> to detect a beat.</para>
            <para>d) retrieve the <see cref="P:Un4seen.Bass.Misc.BPMCounter.BPM"/> propertiy to get the calculated Beats Per Minute value.</para>
            <para>You should call the <see cref="M:Un4seen.Bass.Misc.BPMCounter.Reset(System.Int32)"/> method whenever you play another stream or if the returned BPM looks completely wrong.</para>
            <para>There are also methods to calculate the BPM manually using a TAP click button. E.g. call <see cref="M:Un4seen.Bass.Misc.BPMCounter.TapBeat"/> on a mouse click event to tap (set) a beat manually and call <see cref="P:Un4seen.Bass.Misc.BPMCounter.TappedBPM"/> to retrieve the manually tapped BPM value.</para>
            <para>Beat detection is a very very complex task and it is almost impossible to implement it matching for any kind of audio signal. So please note, that it might NOT work with all tracks in the same way - with some tracks it might return really bad results.
            This implementation is a 'simple' one (not needing too much CPU power). It is based on instant energy calculation on 128 frequency bands and comparing them with it's average engery for that band.
            The variation of the energy of each frequency band is used as a dynamic sensitivity factor. The peak detector uses an attack time of 0ms and there is a dynamic release envelop for the release time - plus we have a Schmitt triggers and a rising edge detectors implemented for each frequency band.
            The low pass frequency has a fixed value of 350Hz (for detecting bass drums) and the mid range frequency is set to be between 1500Hz and 4000Hz (to detect e.g. snare drums). This to calculate an overall trigger value for all frequency bands.
            Finally there is a Schmitt trigger again to detect the final beat for each call to the audio signal processing.</para>
            <para>You might notice, that often more beats are detected as you would recognize them with your ear (when doing manual tapping). These are intermediate beats or simply lound noise in the signal (which the algo did not filter good enough).
            So the BPM calculation uses a time spotting approximation to determine when a beat is a good beat to count. 'No-good' beats are simply not counted. So it sometimes might take some time until the live BPM value reaches a good value!</para>
            <para>The default BPM value range is between 60 and 180 BPM. But this might be changed using the <see cref="P:Un4seen.Bass.Misc.BPMCounter.MinBPM"/> or <see cref="P:Un4seen.Bass.Misc.BPMCounter.MaxBPM"/> properties.</para>
            <para>Note: 1 BPM is worth about 5ms (at 120BMP) - or in other words: if your time intervall differs in 5ms the resulting BPM might have a difference of about 1 BPM.
            Therefor we use a BPM history buffer which we interleave and calculate the average to equalize this effect.</para>
            <para>The BPM results are not equally good for all music tracks and genres. However, beat detection and BPM calculation is mostly needed for DJ applications with music having mostly clear and distinct beats and for this kind of music the class produces very good results.
            Also keep in mind, that when working with highly compressed or equalized tracks (e.g. badly encoded MP3 tracks) the quality might also suffer - so for best results use good audio material.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BPMCounter.#ctor(System.Int32,System.Int32)">
            <summary>
            The contructor of the beat detection class.
            </summary>
            <param name="timerfreq">The frequency of your timer callback in milliseconds (how often you will call <see cref="M:Un4seen.Bass.Misc.BPMCounter.ProcessAudio(System.Int32,System.Boolean)"/>), e.g. 20ms.</param>
            <param name="samplerate">The samplerate of the audio signal to process. You might also change this with calling <see cref="M:Un4seen.Bass.Misc.BPMCounter.Reset(System.Int32)"/> at any time later.</param>
        </member>
        <member name="P:Un4seen.Bass.Misc.BPMCounter.BPMHistorySize">
            <summary>
            Gets or Sets the BPM history buffer size (Minimum=2, Maximum=50, Default=10).
            </summary>
            <remarks>The BPM history buffer is used to keep the last detected BPM values. The resulting <see cref="P:Un4seen.Bass.Misc.BPMCounter.BPM"/> final value is calculated as the average value of the history.
            <para>Setting a new BPM history buffer size value will also reset the last calculated BPM values. Setting the BPM history buffer size to an even number is a good idea.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BPMCounter.MinBPM">
            <summary>
            Gets or sets the minimum BPM value (default is 60, minimum is 30).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BPMCounter.MaxBPM">
            <summary>
            Gets or sets the maximum BPM value (default is 180, maximum is 250).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BPMCounter.BPM">
            <summary>
            Gets or sets the currently detected live BPM value (detected via <see cref="M:Un4seen.Bass.Misc.BPMCounter.ProcessAudio(System.Int32,System.Boolean)"/>).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BPMCounter.TappedBPM">
            <summary>
            Gets or sets the manually tapped BPM value (detected via <see cref="M:Un4seen.Bass.Misc.BPMCounter.TapBeat"/>).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.BPMCounter.TapBeat">
            <summary>
            Call this to set (tap) a beat manually (e.g. on a mouse click event).
            The resulting (tapped) BPM value is available at <see cref="P:Un4seen.Bass.Misc.BPMCounter.TappedBPM"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.BPMCounter.Reset(System.Int32)">
            <summary>
            Call this to reset all internal buffers and/or to change the current samplerate of the audio signal to be processed.
            </summary>
            <param name="samplerate">The new samplerate (specify -1 to leave the current one).</param>
            <remarks>You should at best call this method every time you play a new track.
            But you might also call this method if the calculated BPM is wrong and you wanted to give it a fresh try.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BPMCounter.SetSamperate(System.Int32)">
            <summary>
            Call this method to change the current samplerate of the audio signal to be processed.
            </summary>
            <param name="samplerate">The new samplerate which should be used when processing audio sample.</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.BPMCounter.ProcessAudio(System.Int32,System.Boolean)">
            <summary>
            Processes the audio data (gets instant FFT samples) and calculates the live BPM. 
            </summary>
            <param name="channel">The channel who's audio signal should be processed to detect a beat.</param>
            <param name="bpmBeatsOnly">Set this to <see langword="true"/>, if you want the method to return only the counted BPM beats. If set to <see langword="false"/> each detected beat will be returned.</param>
            <returns><see langword="true"/>, if a beat was detected or <see langword="false"/>, if no beat was detected.</returns>
            <remarks>This is the main method doing the beat detection and live BPM calculation. Call this method in your timer callback as frequently as possibly (e.g. every 20ms is a good value, but every 50ms should also be okay).
            <para>Note: it is important, that you call this method in fixed time intervalls! The more often you call this method (the smaller your timer intervall is) the more exact will be the resulting BPM value.
            You must also call this method in the same interval as specified when you created the class instance.</para>
            <para>Since beat detection is very complex this method might return incorrect values when using it with audio signals containing a lot of noise.</para>
            <para>The method internally uses some history buffers, which needs first to be filled. So it will take around 1 second (or around 50 calls at 20ms) before you receive first results!
            Also note, that the internal buffer is flushed at certain intervals, so give the method some time to result newer and even 'better' values, especially, if the audio signal starts with different beats at the track beginning or has intermediate parts with no or different beats.</para>
            <para>You might also use this method to detect a given beat (e.g. to perform automatic mixing) and so to determine a good mixer start point (cue point).</para>
            <para>Note: This method might return 'intermediate' detected beats - so the detected beats might not always reflect your listening experiance like when using manual tapped beats. So with very slow jams (e.g. at 70 or 80bpm) the resulting BPM might sometimes be twice at high.</para>
            <para>The method itself takes less than 1ms to perform it's task. Internally the algo is based on human ear simulation - meaning an average energy history of 1 second is used, since this is what the human ear can keep - so the BPM results might change and vary more often as with systems scanning the whole file or bigger parts of it. 
            The advantage is therefore that this system might be used with live data and has a fast reaction time of about 1 second only - like our human ear.</para>
            <para>Note: 1 BPM is worth about 5ms (at 120BMP) - or in other words: if your time intervall differs in 5ms the resulting BPM might have a difference of about 1 BPM.
            Therefor we use a BPM history buffer which we interleave and calculate the average to equalize this effect.</para>
            </remarks>
            <example>
            <code lang="C#">
            private int _stream;
            // create a BPMCounter instance, the timer will be fired every 20ms
            private BPMCounter _bpm = new BPMCounter(20, 44100);
            ...
            // create a stream
            _stream = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_DEFAULT);
            // get the samplerate of that stream
            BASS_CHANNELINFO info = new BASS_CHANNELINFO();
            Bass.BASS_ChannelGetInfo(_stream, info);
            // and start playing the and also start the BPM counter
            if (_stream != 0 &amp;&amp; Bass.BASS_ChannelPlay(_stream, false) )
            {
              //playing...
              _bpm.Reset(info.freq);
              // start our bpm timer callback
              this.timerBPM.Start();
            }
            
            private void timerBPM_Tick(object sender, System.EventArgs e)
            {
              if ( _stream == 0 || Bass.BASS_ChannelIsActive(_stream) != BASSActive.BASS_ACTIVE_PLAYING)
              {
                this.timerBPM.Stop();
                return;
              }
              bool beat = _bpm.ProcessAudio(_stream, true);
              if (beat)
              {
                // display the live calculated BPM value
                this.labelBPM.Text = _bpm.BPM.ToString( "#00.0" );
              }
            }
            </code>
            <code lang="VB">
            Private _stream As Integer
            ' create a BPMCounter instance, the timer will be fired every 20ms
            Private _bpm As New BPMCounter(20, 44100)
            ...
            ' create a stream
            _stream = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_DEFAULT)
            ' get the samplerate of that stream
            Dim info As New BASS_CHANNELINFO()
            Bass.BASS_ChannelGetInfo(_stream, info)
            ' and start playing the and also start the BPM counter
            If _stream &lt;&gt; 0 AndAlso Bass.BASS_ChannelPlay(_stream, False) Then
              'playing...
              _bpm.Reset(info.freq)
              ' start our bpm timer callback
              Me.timerBPM.Start()
            End If
            
            Private Sub timerBPM_Tick(sender As Object, e As System.EventArgs)
              If _stream = 0 OrElse Bass.BASS_ChannelIsActive(_stream) &lt;&gt; BASSActive.BASS_ACTIVE_PLAYING Then
                Me.timerBPM.Stop()
                Return
              End If
              Dim beat As Boolean = _bpm.ProcessAudio(_stream, True)
              If beat Then
                ' display the live calculated BPM value
                Me.labelBPM.Text = _bpm.BPM.ToString("#00.0")
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.Misc.HiPerfTimer">
            <summary>
            Provides a Win32 high performance counter.
            </summary>
            <remarks>
            This class is very simple to use. Just create an instance of <see cref="T:Un4seen.Bass.Misc.HiPerfTimer"/>, call <see cref="M:Un4seen.Bass.Misc.HiPerfTimer.Start"/> to start timing and call <see cref="M:Un4seen.Bass.Misc.HiPerfTimer.Stop"/> to stop timing. 
            To retrieve the elapsed time, just call the <see cref="P:Un4seen.Bass.Misc.HiPerfTimer.Duration"/> method and you will get the elapsed time in seconds.
            </remarks>
            <example>
            <code lang="C#">
            // create a new HiPerfTimer object
            HiPerfTimer pt = new HiPerfTimer();
            pt.Start();                             // start the timer
            // the code to be timed
            Console.WriteLine("Test");
            pt.Stop();                              // stop the timer
            // print the duration of the timed code
            Console.WriteLine("Duration: {0} sec", pt.Duration);
            </code>
            <code lang="VB">
            ' create a new HiPerfTimer object
            Dim pt As New HiPerfTimer()
            pt.Start() ' start the timer
            Console.WriteLine("Test") ' the code to be timed
            pt.Stop() ' stop the timer
            ' print the duration of the timed code
            Console.WriteLine("Duration: {0} sec", pt.Duration)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.HiPerfTimer.#ctor">
            <summary>
            Default constructor to create a high performance counter.
            </summary>
            <exception cref="T:System.ComponentModel.Win32Exception">The HiPerfTimer is not supported on this platform.</exception>
        </member>
        <member name="M:Un4seen.Bass.Misc.HiPerfTimer.Start">
            <summary>
            Start the timer.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.HiPerfTimer.Stop">
            <summary>
            Stop the timer.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.HiPerfTimer.Duration">
            <summary>
            Returns the duration of the timer (in seconds).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.BroadCast">
            <summary>
            Enables streaming of audio content to the internet.
            </summary>
            <remarks>
            <para>To setup broadcast streaming you first need to create an instance of a class, which is derived from the <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> class (e.g. <see cref="T:Un4seen.Bass.Misc.SHOUTcast"/> or <see cref="T:Un4seen.Bass.Misc.ICEcast"/>).
            These classes will contain all necessary configuration data (e.g. server address an port, username and password, station description etc., as well as an <see cref="T:Un4seen.Bass.Misc.IBaseEncoder"/> instance, which defines the target broadcasting encoder format).</para>
            <para>The BroadCast class support manual streaming (e.g. in your own <see cref="T:Un4seen.Bass.DSPPROC"/> or <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/>) as well as
            automatic streaming. Automatic streaming is implemented internally also via a user DSP.</para>
            <para>If you want to broadcast to multiple outputs (multiple servers) you need to create an instance for each output seperately.</para>
            </remarks>
            <example>
            The following example uses the generic Encoder-Framework with the generic StreamingServer-Framework 
            to implement streaming of any recording data (here uing LAME MP3 encoding to a SHOUTcast server):
            <code lang="C#">
            private int _recHandle;
            private BroadCast _broadCast;
            ...
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, null, 0);
            ...
            // create an encoder instance (e.g. for MP3 use EncoderLAME):
            EncoderLAME lame = new EncoderLAME(_recHandle);
            lame.InputFile = null;	//STDIN
            lame.OutputFile = null;	//STDOUT
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_56;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono;
            lame.LAME_TargetSampleRate = (int)EncoderLAME.SAMPLERATE.Hz_22050;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            
            // create a StreamingServer instance (e.g. SHOUTcast) using the encoder:
            SHOUTcast shoutcast = new SHOUTcast(lame);
            shoutcast.ServerAddress = "localhost";
            shoutcast.ServerPort = 8000;
            shoutcast.Password = "changeme";
            shoutcast.PublicFlag = true;
            
            // use the BroadCast class to control streaming:
            _broadCast = new BroadCast(shoutcast);
            _broadCast.AutoReconnect = true;
            _broadCast.Notification += new BroadCastEventHandler(OnBroadCast_Notification);
            _broadCast.AutoConnect();
            
            private void OnBroadCast_Notification(object sender, BroadCastEventArgs e)
            {
              // Note: this method might be called from another thread (non UI thread)!
              if (_broadCast == null)
                return;
              if (_broadCast.IsConnected)
              {
                // we are connected...
              }
              else
              {
                // we are not connected...
              }
            }
            </code>
            <code lang="VB">
            Private _recHandle As Integer
            Private _broadCast As BroadCast
            ...
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, Nothing, 0)
            ...
            ' create an encoder instance (e.g. for MP3 use EncoderLAME):
            Dim lame As New EncoderLAME(_recHandle)
            lame.InputFile = Nothing 'STDIN
            lame.OutputFile = Nothing 'STDOUT
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_56)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono
            lame.LAME_TargetSampleRate = CInt(EncoderLAME.SAMPLERATE.Hz_22050)
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            
            ' create a StreamingServer instance (e.g. SHOUTcast) using the encoder:
            Dim shoutcast As New SHOUTcast(lame)
            shoutcast.ServerAddress = "localhost"
            shoutcast.ServerPort = 8000
            shoutcast.Password = "changeme"
            shoutcast.PublicFlag = True
            
            ' use the BroadCast class to control streaming:
            _broadCast = New BroadCast(shoutcast)
            _broadCast.AutoReconnect = True
            AddHandler _broadCast.Notification, AddressOf OnBroadCast_Notification
            _broadCast.AutoConnect()
            
            Private Sub OnBroadCast_Notification(sender As Object, e As BroadCastEventArgs)
              ' Note: this method might be called from another thread (non UI thread)!
              If _broadCast Is Nothing Then
                Return
              End If
              If _broadCast.IsConnected Then
                ' we are connected...
              Else
                ' we are not connected...
              End If 
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.#ctor">
            <summary>
            Default constructor not allowed.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.#ctor(Un4seen.Bass.Misc.IStreamingServer)">
            <summary>
            Creates an instance of the broadcasting class using the specified streaming server.
            </summary>
            <param name="server">Instance of a streaming server class to use (containing the configuration and parameter data).</param>
            <remarks>In order to create a <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> instance use one of the implementations (e.g. <see cref="T:Un4seen.Bass.Misc.SHOUTcast"/> or <see cref="T:Un4seen.Bass.Misc.ICEcast"/>).</remarks>
        </member>
        <member name="E:Un4seen.Bass.Misc.BroadCast.Notification">
            <summary>
            Event handler used to notify that the BroadCast status has changed or that a BroadCast event has occurred.
            </summary>
            <remarks>It is a good idea to subscribe to this event handler before calling <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/> or <see cref="M:Un4seen.Bass.Misc.BroadCast.AutoConnect"/>.
            <para>The properties <see cref="P:Un4seen.Bass.Misc.BroadCast.NotificationSuppressDataSend"/> and <see cref="P:Un4seen.Bass.Misc.BroadCast.NotificationSuppressIsAlive"/> might be used to suppress sending certain events.</para>
            <para>The <see cref="T:Un4seen.Bass.Misc.BroadCastEventArgs"/> contains a <see cref="T:Un4seen.Bass.Misc.BroadCastEventType"/> which allows you to react to all possible scenarios and to log all these events.</para>
            <para>Note: This implementation ensures, that the event will be executed in the main thread the subscriber executes in!
            So when subscribing to this event from UI thread, the specified event delegate will also be called in that UI thread.</para>
            <para>When using a server whose UseBASS property is set to <see langword="true"/> (which is the default) the 'DataSend' notification will not be raised.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.Server">
            <summary>
            Returns the streaming server interface which is used with this instance.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.IsConnected">
            <summary>
            Connected to the server? (<see langword="true"/>=connected).
            </summary>
            <remarks>Sending encoded data to the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/> via <see cref="M:Un4seen.Bass.Misc.BroadCast.SendData(System.IntPtr,System.Int32)"/> should only be performed, if connected to the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/> 
            and the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/> has the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> flag set to <see langword="false"/>!</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.IsStarted">
            <summary>
            Is the server started? (<see langword="true"/>=started).
            </summary>
            <remarks>This property might also return <see langword="true"/> if the status is not connected in case you set <see cref="P:Un4seen.Bass.Misc.BroadCast.AutoReconnect"/> to true.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.Status">
            <summary>
            Gets the current broadcast status.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.AutomaticMode">
            <summary>
            Gets if the automatic mode was used (<see langword="true"/>, if <see cref="M:Un4seen.Bass.Misc.BroadCast.AutoConnect"/> was called, else <see langword="false"/> meaning <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/> was used instead).
            </summary>
            <remarks>When the automatic mode is used, the following is handled directly by this class and does not need to be handled manually:
            <para>Setup of an internal encoder callback procedure and sending of the encoded data to the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/> (either internally or via <see cref="M:Un4seen.Bass.Misc.BroadCast.SendData(System.IntPtr,System.Int32)"/>).
            So the only task you need to handle is title updates manually when in automatic mode.</para>
            <para>Please note, that some methods should NOT be used, if in automatic mode: <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/>, <see cref="M:Un4seen.Bass.Misc.BroadCast.StartEncoder(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>, <see cref="M:Un4seen.Bass.Misc.BroadCast.StopEncoder"/> and <see cref="M:Un4seen.Bass.Misc.BroadCast.SendData(System.IntPtr,System.Int32)"/>!</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.AutoReconnect">
            <summary>
            Gets or Sets if the broadcast connection should automatically be reconnected in case of a connection or encoder error (default=<see langword="false"/>).
            </summary>
            <remarks>The auto connect feature can be used for both <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/> and <see cref="M:Un4seen.Bass.Misc.BroadCast.AutoConnect"/>.
            <para>When AutoReconnect was set to <see langword="true"/>, the following will be checked automatically:</para>
            <para>1. Is the encoder still active? - if not, restart encoder, if in <see cref="P:Un4seen.Bass.Misc.BroadCast.AutomaticMode"/>.</para>
            <para>2. Are we still connected to the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/>? - if not, reconnect to the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/>.</para>
            <para>This means, that if you are NOT in <see cref="P:Un4seen.Bass.Misc.BroadCast.AutomaticMode"/>, you need to restart your <see cref="P:Un4seen.Bass.Misc.StreamingServer.Encoder"/> manually.
            You can do so by subscribing to the <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification"/> event handler and react on the <see cref="F:Un4seen.Bass.Misc.BroadCastEventType.EncoderRestartRequired"/> event and then call <see cref="M:Un4seen.Bass.Misc.BroadCast.StartEncoder(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/> again.</para>
            <para>Please note, that the encoder will automatically be stopped, if a reconnect to the server was not successful!</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.ReconnectTimeout">
            <summary>
            Gets or Sets the reconnect timeout in seconds (default is 5sec.).
            </summary>
            <remarks>The auto connect feature can be used for both <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/> and <see cref="M:Un4seen.Bass.Misc.BroadCast.AutoConnect"/>.
            <para>The timeout period must be between 1 and 86400 seconds.</para>
            <para>Changing the reconnect timeout takes immediate effect.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.NotificationSuppressDataSend">
            <summary>
            Gets or Sets, if the <see cref="F:Un4seen.Bass.Misc.BroadCastEventType.DataSend"/> event will be raised when subscribed to the <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification"/> event handler (default is <see langword="false"/>).
            </summary>
            <remarks>Note: If the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/> has the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> flag set to <see langword="true"/> this property will have no effect.
            A <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/> with <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> will be unable to to report the number of bytes send to the server.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.NotificationSuppressIsAlive">
            <summary>
            Gets or Sets, if the <see cref="F:Un4seen.Bass.Misc.BroadCastEventType.IsAlive"/> event will be raised when subscribed to the <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification"/> event handler and <see cref="P:Un4seen.Bass.Misc.BroadCast.AutoReconnect"/> is enabled (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.TotalBytesSend">
            <summary>
            Returns the total number of bytes send to the server during a broadcast.
            </summary>
            <remarks>
            If the value reaches the maximum (Int64.MaxValue) it will be wrapped around and reset to 0 (zero).
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCast.TotalConnectionTime">
            <summary>
            Returns the total online connection time (for how long the broadcast is already running since it was connected).
            </summary>
            <remarks>This value is only correct, if <see cref="P:Un4seen.Bass.Misc.BroadCast.IsConnected"/> is <see langword="true"/> resp. the broadcast <see cref="P:Un4seen.Bass.Misc.BroadCast.Status"/> is CONNECTED.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.AutoConnect">
            <summary>
            Connects automatically to a broadcast server (performs a <see cref="M:Un4seen.Bass.Misc.StreamingServer.Connect"/> and <see cref="M:Un4seen.Bass.Misc.StreamingServer.Login"/>).
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>
            <para>If the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/> has set the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> flag to <see langword="true"/>, the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/> will handle any communication via <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastInit(System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Int32,Un4seen.Bass.AddOn.Enc.BASSEncodeCast)"/>.</para>
            <para>If the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/> has set the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> flag to <see langword="false"/>, the following will be handled:</para>
            <para>Prior to the <see cref="M:Un4seen.Bass.Misc.StreamingServer.Connect"/> an internal encoder callback will be created.</para>
            <para>The internal encoder callback is created using <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.
            This internal callback will already handle the <see cref="M:Un4seen.Bass.Misc.BroadCast.SendData(System.IntPtr,System.Int32)"/>, <see cref="M:Un4seen.Bass.Misc.BroadCast.StartEncoder(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/> and <see cref="M:Un4seen.Bass.Misc.BroadCast.StopEncoder"/> automatically for you.</para>
            <para>If already connected, this method will first <see cref="M:Un4seen.Bass.Misc.BroadCast.Disconnect"/> from the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/>, which might result in stopping the underlying <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/>.</para>
            <para>If the channel handle (as defined in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle"/>) is already playing, it will be shortly paused during the setup and resumed when done.</para>
            <para>Please note, that some methods should NOT be used, if in automatic mode: <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/>, <see cref="M:Un4seen.Bass.Misc.BroadCast.StartEncoder(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>, <see cref="M:Un4seen.Bass.Misc.BroadCast.StopEncoder"/> and <see cref="M:Un4seen.Bass.Misc.BroadCast.SendData(System.IntPtr,System.Int32)"/>!</para>
            <para>Note: If you have set the <see cref="P:Un4seen.Bass.Misc.BroadCast.AutoReconnect"/> property to <see langword="true"/> this call will automatically try to reconnect even if this method returns <see langword="false"/>!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.Connect">
            <summary>
            Connects manually to a broadcast server (performs a <see cref="M:Un4seen.Bass.Misc.StreamingServer.Connect"/> and <see cref="M:Un4seen.Bass.Misc.StreamingServer.Login"/>).
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>The automatic reconnect settings (<see cref="P:Un4seen.Bass.Misc.BroadCast.AutoReconnect"/> and <see cref="P:Un4seen.Bass.Misc.BroadCast.ReconnectTimeout"/>) will also work with a manual connection.
            But, you must create and handle your own <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback and call <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/> manually!
            <para>If already connected, this method will first <see cref="M:Un4seen.Bass.Misc.BroadCast.Disconnect"/> from the <see cref="P:Un4seen.Bass.Misc.BroadCast.Server"/>, which might result in stopping the underlying <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/>.</para>
            <para>If the channel handle (as defined in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle"/>) is already playing, it will be shortly paused during the setup and resumed when done.</para>
            <para>Note: If you have set the <see cref="P:Un4seen.Bass.Misc.BroadCast.AutoReconnect"/> property to <see langword="true"/> this call will automatically try to reconnect even if this method returns <see langword="false"/>!</para>
            </remarks>
            <example>
            This example demonstrates manual broadcasting:
            <code lang="C#">
            private BroadCast _broadCast;
            private ENCODEPROC _myEncProc;
            ...
            // create your encoder (using a recording handle)
            EncoderLAME lame = new EncoderLAME(_recHandle);
            
            // create an streaming server instance
            SHOUTcast shoutcast = new SHOUTcast(lame);
            
            // create the broadcast instance
            _broadCast = new BroadCast(shoutcast);
            _broadCast.AutoReconnect = true;
            _broadCast.Notification += new BroadCastEventHandler(OnBroadCast_Notification);
            
            // create your encoder callback
            _myEncProc = new ENCODEPROC(MyEncodingCallback);
            // start the encoder (paused)
            _broadCast.StartEncoder(_myEncProc, IntPtr.Zero, true);
            // now connect to start your broadcast
            _broadCast.Connect();
            // and really start the encoder
            _broadCast.Server.Encoder.Pause(false);
            ...
            
            // your broadcast encoder callback implementation
            private void MyEncodingCallback(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              // here we receive the encoded data back (manual mode)
              if ( _broadCast.IsConnected )
              {
                _broadCast.SendData(buffer, length);
              }
            }
            
            private void OnBroadCast_Notification(object sender, BroadCastEventArgs e)
            {
              if (e.EventType == BroadCastEventType.EncoderRestartRequired)
                _broadCast.StartEncoder(_myEncProc, 0);
            	
              if (!_broadCast.IsConnected)
              {
                // connection lost
              }
            }
            </code>
            <code lang="VB">
            Private _broadCast As BroadCast
            Private _myEncProc As ENCODEPROC
            ...
            ' create your encoder (using a recording handle)
            Dim lame As New EncoderLAME(_recHandle)
            
            ' create an streaming server instance
            Dim shoutcast As New SHOUTcast(lame)
            
            ' create the broadcast instance
            _broadCast = New BroadCast(shoutcast)
            _broadCast.AutoReconnect = True
            AddHandler _broadCast.Notification, AddressOf OnBroadCast_Notification
            
            ' create your encoder callback
            _myEncProc = New ENCODEPROC(AddressOf MyEncodingCallback)
            ' start the encoder (paused)
            _broadCast.StartEncoder(_myEncProc, IntPtr.Zero, True)
            ' now connect to start your broadcast
            _broadCast.Connect()
            ' and really start the encoder
            _broadCast.Server.Encoder.Pause(False)
            ...
            
            ' your broadcast encoder callback implementation
            Private Sub MyEncodingCallback(handle As Integer, channel As Integer, 
                                           buffer As IntPtr, length As Integer, user As IntPtr)
              ' here we receive the encoded data back (manual mode)
              If _broadCast.IsConnected Then
                _broadCast.SendData(buffer, length)
              End If
            End Sub
            
            Private Sub OnBroadCast_Notification(sender As Object, e As BroadCastEventArgs)
              If e.EventType = BroadCastEventType.EncoderRestartRequired Then
                _broadCast.StartEncoder(_myEncProc, 0)
              End If 
            
              If Not _broadCast.IsConnected Then
                ' connection lost
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.Disconnect">
            <summary>
            Disconnects from the broadcast server calling <see cref="M:Un4seen.Bass.Misc.StreamingServer.Disconnect"/> (also stops the encoder using <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/>).
            </summary>
            <returns><see langword="true"/> on success (not connected), else <see langword="false"/> (connection status unknown, see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>This method disconnects no matter if you started broadcasting in the automatic mode (via <see cref="M:Un4seen.Bass.Misc.BroadCast.AutoConnect"/>) or manually (via <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/>).
            <para>Note: If you stop or free the underlying stream channel you must also call this method in order to disconnect from the server.</para>
            <para>Caution: Disconnecting will in any case also stop the underlying server encoder in use (<see cref="M:Un4seen.Bass.Misc.BroadCast.StopEncoder"/> will be called!).
            So if you started broadcasting in the manual mode (via <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/>) you need to manually start your encoder again.
            If you have enabled the <see cref="P:Un4seen.Bass.Misc.BroadCast.AutoReconnect"/> feature a <see cref="F:Un4seen.Bass.Misc.BroadCastEventType.EncoderRestartRequired"/> event <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification"/> will be raised.</para>
            <para>If this method returns <see langword="false"/>, check the <see cref="P:Un4seen.Bass.Misc.BroadCast.Status"/>, it might be the case, that you are still connected (e.g. if the encoder could not be stopped)!</para>
            <para>Once disconnected successfully, the <see cref="M:Un4seen.Bass.Misc.BroadCast.AutoConnect"/> feature will also be disabled (no further connect retries will be made). 
            You need to start broadcasting again via <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/> or <see cref="M:Un4seen.Bass.Misc.BroadCast.AutoConnect"/> in order to restart.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.StartEncoder(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            Starts the underlying encoder (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.Encoder"/>).
            </summary>
            <param name="proc">Optional callback function to receive the encoded data. 
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.BaseEncoder.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Return <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>
            <para>Do NOT call this method, if you are in <see cref="P:Un4seen.Bass.Misc.BroadCast.AutomaticMode"/>, since the encoder will be started automatically in this case.</para>
            <para>If the encoder was already started, this method anyhow returns <see langword="true"/> - however no <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification"/> event will be raised in this case.</para>
            <para>If you <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/> manually, your <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> must call <see cref="M:Un4seen.Bass.Misc.BroadCast.SendData(System.IntPtr,System.Int32)"/> manually as well, see the example below.</para>
            </remarks>
            <example>
            This example demonstrates a user defined ENCODEPROC:
            <code lang="C#">
            private BroadCast _broadCast;
            private ENCODEPROC _myEncProc;
            ...
            // create your encoder (using a recording handle)
            EncoderLAME lame = new EncoderLAME(_recHandle);
            
            // create an streaming server instance
            SHOUTcast shoutcast = new SHOUTcast(lame);
            
            // create the broadcast instance
            _broadCast = new BroadCast(shoutcast);
            _broadCast.AutoReconnect = true;
            _broadCast.Notification += new BroadCastEventHandler(OnBroadCast_Notification);
            
            // create your encoder callback
            _myEncProc = new ENCODEPROC(MyEncodingCallback);
            // start the encoder (paused)
            _broadCast.StartEncoder(_myEncProc, IntPtr.Zero, true);
            // now connect to start your broadcast
            _broadCast.Connect();
            // and really start the encoder
            _broadCast.Server.Encoder.Pause(false);
            ...
            
            // your broadcast encoder callback implementation
            private void MyEncodingCallback(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            {
              // here we receive the encoded data back (manual mode)
              if ( _broadCast.IsConnected )
              {
                _broadCast.SendData(buffer, length);
              }
            }
            
            private void OnBroadCast_Notification(object sender, BroadCastEventArgs e)
            {
              if (e.EventType == BroadCastEventType.EncoderRestartRequired)
                _broadCast.StartEncoder(_myEncProc, 0);
            	
              if (!_broadCast.IsConnected)
              {
                // connection lost
              }
            }
            </code>
            <code lang="VB">
            Private _broadCast As BroadCast
            Private _myEncProc As ENCODEPROC
            ...
            ' create your encoder (using a recording handle)
            Dim lame As New EncoderLAME(_recHandle)
            
            ' create an streaming server instance
            Dim shoutcast As New SHOUTcast(lame)
            
            ' create the broadcast instance
            _broadCast = New BroadCast(shoutcast)
            _broadCast.AutoReconnect = True
            AddHandler _broadCast.Notification, AddressOf OnBroadCast_Notification
            
            ' create your encoder callback
            _myEncProc = New ENCODEPROC(AddressOf MyEncodingCallback)
            ' start the encoder (paused)
            _broadCast.StartEncoder(_myEncProc, IntPtr.Zero, True)
            ' now connect to start your broadcast
            _broadCast.Connect()
            ' and really start the encoder
            _broadCast.Server.Encoder.Pause(False)
            ...
            
            ' your broadcast encoder callback implementation
            Private Sub MyEncodingCallback(handle As Integer, channel As Integer, 
                                           buffer As IntPtr, length As Integer, user As IntPtr)
              ' here we receive the encoded data back (manual mode)
              If _broadCast.IsConnected Then
                _broadCast.SendData(buffer, length)
              End If
            End Sub
            
            Private Sub OnBroadCast_Notification(sender As Object, e As BroadCastEventArgs)
              If e.EventType = BroadCastEventType.EncoderRestartRequired Then
                _broadCast.StartEncoder(_myEncProc, 0)
              End If 
            
              If Not _broadCast.IsConnected Then
                ' connection lost
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.StopEncoder">
            <summary>
            Stops the <see cref="P:Un4seen.Bass.Misc.StreamingServer.Encoder"/>
            </summary>
            <returns><see langword="true"/>, if the encoder was stopped successfully, else <see langword="false"/> is returned (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>Please note that, if <see langword="false"/> is returned, the <see cref="P:Un4seen.Bass.Misc.StreamingServer.Encoder"/> will still be active.
            <para>If you are handling broadcasting manually (by using <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/>), it is a good idea to stop the encoder whenever you are not connected anymore.
            You might check the status of the broadcast connection by asking for the <see cref="P:Un4seen.Bass.Misc.BroadCast.Status"/> or by subscribing to the <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification"/> event handler.</para>
            <para>If the encoder was already stopped, this method returns <see langword="true"/> - however no <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification"/> event will be raised in this case.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.SendData(System.IntPtr,System.Int32)">
            <summary>
            Sends encoded sample data manually to the broadcast server (e.g. the data as received in an own <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/>).
            </summary>
            <param name="buffer">The pointer to the encoded buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <param name="length">The length of the buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>If an error occures the connection will be closed automatically (using <see cref="M:Un4seen.Bass.Misc.StreamingServer.Disconnect"/>).
            In this case the <see cref="P:Un4seen.Bass.Misc.BroadCast.AutoReconnect"/> feature (if enabled) will try a reconnect after <see cref="P:Un4seen.Bass.Misc.BroadCast.ReconnectTimeout"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.UpdateTitle(System.String,System.String)">
            <summary>
            Updates the title of the playing song on a broadcast server.
            </summary>
            <param name="song">The new song title to set (if <see langword="null"/> or empty <see langword="false"/> will be returned).</param>
            <param name="url">The optional song url to go along with the title (only for SHOUTcast - else <see langword="null"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>This method can be used for both the manual and the automatic connection mode.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.UpdateTitle(Un4seen.Bass.AddOn.Tags.TAG_INFO,System.String)">
            <summary>
            Updates the title of the playing song on a broadcast server.
            </summary>
            <param name="tag">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance to use to set the new song title (if <see langword="null"/> or empty <see langword="false"/> will be returned).</param>
            <param name="url">The optional song url to go along with the title (only for SHOUTcast - else <see langword="null"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>This method can be used for both the manual and the automatic connection mode.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.GetListeners(System.String)">
            <summary>
            Returns the number of listeners currently connected.
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The current number of listeners (or -1 if not available).</returns>
            <remarks>Some <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> implementations might not be able to retrieve the current listener count, in which case -1 would be returned.
            However, the following servers should be supported: SHOUTcast, ICEcast, WMAcast (if not using a publishing point).
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCast.GetStats(System.String)">
            <summary>
            Returns the XML stats of the server.
            </summary>
            <param name="password">An optional password to use (should be set to <see langword="null"/> to use the default publish password).</param>
            <returns>The string representing the XML formatted statistics (or <see langword="null"/> on error/not available).</returns>
            <remarks>Some <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> implementations might not be able to retrieve an XML statistic, in which case <see langword="null"/> would be returned.
            However, the following servers should be supported: SHOUTcast, ICEcast, WMAcast.
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.BroadCast.BROADCASTSTATUS">
            <summary>
            List of all possible broadcast status.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCast.BROADCASTSTATUS.NotConnected">
            <summary>
            Not connected.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCast.BROADCASTSTATUS.Connected">
            <summary>
            Connected to the broadcast server.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCast.BROADCASTSTATUS.Unknown">
            <summary>
            Connection status is unknown.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.BroadCastEventHandler">
            <summary>
            Definition of the <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification" /> event handler.
            </summary>
            <param name="sender">Set to the <see cref="T:Un4seen.Bass.Misc.BroadCast"/> object instance that raised the event.</param>
            <param name="e">An instance of the <see cref="T:Un4seen.Bass.Misc.BroadCastEventArgs"/> event args containing the event details.</param>
            <remarks>
            This definition complies with the .NET Framework's standard for event handlers.
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.BroadCastEventType">
            <summary>
            Types of event that has occurred with the <see cref="T:Un4seen.Bass.Misc.BroadCast"/> class.
            </summary>
            <remarks>
            A variable of this type is passed inside the <see cref="T:Un4seen.Bass.Misc.BroadCastEventArgs"/> object 
            for the <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification" /> event.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.Connected">
            <summary>
            A connection to the server was successfully established.
            <para>Object data: DateTime (start of connection).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.Disconnected">
            <summary>
            The server was disconnected (either by user request or due to a connection error).
            <para>Object data: DateTime (time of disconnect).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.DisconnectError">
            <summary>
            An error occurred during the disconnect (the server might still be connected).
            <para>Object data: DateTime (time of disconnect).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.ConnectionLost">
            <summary>
            The connection was lost (can only be discovered at <see cref="M:Un4seen.Bass.Misc.BroadCast.SendData(System.IntPtr,System.Int32)"/>).
            <para>Object data: DateTime (time of lost connection).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.ConnectionError">
            <summary>
            A connection to the server could not be established (will only be raised at <see cref="M:Un4seen.Bass.Misc.BroadCast.Connect"/> or <see cref="M:Un4seen.Bass.Misc.BroadCast.AutoConnect"/>).
            <para>Object data: DateTime (time of lost connection).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.ReconnectTry">
            <summary>
            A reconnect will be tried (after the <see cref="P:Un4seen.Bass.Misc.BroadCast.ReconnectTimeout"/>).
            <para>Object data: DateTime (time of reconnect try).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.UnsuccessfulReconnectTry">
            <summary>
            A reconnect was unsuccessfully tried.
            <para>Object data: DateTime (time of unsuccessful reconnect try).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.EncoderStarted">
            <summary>
            The encoder was started successfully (will only be raised in <see cref="P:Un4seen.Bass.Misc.BroadCast.AutomaticMode"/>).
            <para>Object data: <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/> (the encoder instance which needs to be restarted).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.EncoderStartError">
            <summary>
            The encoder could not be started  (will only be raised in <see cref="P:Un4seen.Bass.Misc.BroadCast.AutomaticMode"/>).
            <para>Object data: <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/> (the encoder instance which needs to be restarted).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.EncoderStopped">
            <summary>
            The encoder was stopped (will only be raised in <see cref="P:Un4seen.Bass.Misc.BroadCast.AutomaticMode"/>).
            <para>Object data: <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/> (the encoder instance which needs to be restarted).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.EncoderStopError">
            <summary>
            The encoder could not be stopped (will only be raised during <see cref="M:Un4seen.Bass.Misc.BroadCast.Disconnect"/> - the disconnect might fail and might still be connected).
            <para>Object data: <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/> (the encoder instance which needs to be restarted).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.EncoderRestartRequired">
            <summary>
            The underlying encoder is not active and needs to be started again.
            <para>Object data: <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/> (the encoder instance which needs to be restarted).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.DataSend">
            <summary>
            All data was send to the server successfully (will only be raised when <see cref="P:Un4seen.Bass.Misc.BroadCast.NotificationSuppressDataSend"/> is <see langword="false"/> and <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="false"/>).
            <para>Object data: long (number of bytes send).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.LessDataSend">
            <summary>
            Data was send to the server, but not all data was send (will only be raised when <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="false"/>).
            <para>Object data: int (number of bytes not send).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.IsAlive">
            <summary>
            The broadcast connection is alive and streaming is active (will only be raised when <see cref="P:Un4seen.Bass.Misc.BroadCast.AutoReconnect"/> is <see langword="true"/> and <see cref="P:Un4seen.Bass.Misc.BroadCast.NotificationSuppressIsAlive"/> is <see langword="false"/> and <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="false"/>).
            <para>Object data: DateTime (time of is alive signal).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.TitleUpdated">
            <summary>
            The song title was updated.
            <para>Object data: string (song title).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.TitleUpdateError">
            <summary>
            The song title was not updated.
            <para>Object data: string (song title).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BroadCastEventType.Reconnected">
            <summary>
            A reconnect was successfull.
            <para>Object data: DateTime (time of reconnect).</para>
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.BroadCastEventArgs">
            <summary>
            EventArgs class to be passed as the second parameter of a <see cref="E:Un4seen.Bass.Misc.BroadCast.Notification" /> event handler.
            </summary>
            <remarks>
            This class provides all the information relevant to an event which might occur to a <see cref="T:Un4seen.Bass.Misc.BroadCast"/> class.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BroadCastEventArgs.#ctor(Un4seen.Bass.Misc.BroadCastEventType,System.Object)">
            <summary>
            Initializes a new instance of the BroadCastEventArgs class by initializing all of its properties.
            </summary>
            <param name="pEventType">The type of event which occurred (see <see cref="T:Un4seen.Bass.Misc.BroadCastEventType"/>).</param>
            <param name="pData">Some data which should be passed along with the notification event.</param>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCastEventArgs.EventType">
            <summary>
            Gets the type of event which occurred.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCastEventArgs.Data">
            <summary>
            Gets the object data which was passed along with the event.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BroadCastEventArgs.DateTime">
            <summary>
            Gets the date and time when the event occurred.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.IStreamingServer">
            <summary>
            Defines a generalized streaming server class interface that a <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> class must implement.
            </summary>
            <remarks>This interface is for example used in the constructor of a <see cref="T:Un4seen.Bass.Misc.BroadCast"/> instance to specify which server should be used.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IStreamingServer.UseBASS">
            <summary>
            Gets if native BASS should be used to connect and stream to the server.
            </summary>
            <remarks>
            <para>If set to <see langword="true"/> (see constructor) native BASSenc will handle all TCP socket and cast communication.
            This should be the more secure and preferred option, however in this mode it is not possible to use the <see cref="M:Un4seen.Bass.Misc.IStreamingServer.SendData(System.IntPtr,System.Int32)"/> method manually!</para>
            <para>If set to <see langword="false"/> an internal .Net TCP socket connection will be used and manual feed of encoded sample data via <see cref="M:Un4seen.Bass.Misc.IStreamingServer.SendData(System.IntPtr,System.Int32)"/> is possible.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IStreamingServer.IsConnected">
            <summary>
            Returns <see langword="true"/>, if connected to a streaming server - else <see langword="false"/>.
            </summary>
            <remarks>Normally it is sufficient to return <see langword="true"/> once a <see cref="M:Un4seen.Bass.Misc.IStreamingServer.Connect"/> was successful.
            However, if the server implementation also requires a <see cref="M:Un4seen.Bass.Misc.IStreamingServer.Login"/> this method should only return <see langword="true"/>, if also the <see cref="M:Un4seen.Bass.Misc.IStreamingServer.Login"/> was successful.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IStreamingServer.Encoder">
            <summary>
            Returns the encoder interface which is used with this instance.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.IStreamingServer.LastError">
            <summary>
            Gets or Sets the last streaming error.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.IStreamingServer.LastErrorMessage">
            <summary>
            Gets or Sets the last streaming error message.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.IStreamingServer.SongTitle">
            <summary>
            Gets or Sets the current/last song title.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.IStreamingServer.SongUrl">
            <summary>
            Gets or Sets the current/last song url.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.IStreamingServer.ForceUTF8TitleUpdates">
            <summary>
            Gets or Sets if title updates (via <see cref="M:Un4seen.Bass.Misc.IStreamingServer.UpdateTitle(System.String,System.String)"/>) should in any case use UTF-8 (default is <see langword="false"/>).
            </summary>
            <remarks>
            Depending on the streaming server and stream format being used title updates might be performed using Windows-1252, Latin1 or UTF-8 encoding by default.
            When setting this property to <see langword="true"/> you can force title updates to be performed using UTF-8 encoding.
            <para>Note: Only set this property to <see langword="true"/> if you are sure, that the streaming server supports title updates in UTF-8!</para>
            <para>The default behaviour (when this property is set to <see langword="false"/>) is as followed:
            <list type="table">
            <listheader><term>Streaming Server</term><description>Title Updates in</description></listheader>
            <item><term>SHOUTcast</term><description>Windows-1252 codepage (Latin1)</description></item>
            <item><term>ICEcast</term><description><para>OGG streams: UTF-8</para><para>non-OGG streams: ISO-8859-1 (Latin1)</para></description></item>
            <item><term>WMAcast</term><description>UTF-8</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IStreamingServer.LocalNetworkCardIPAddress">
            <summary>
            Gets or Sets a local IP address to use for cast server connections (<see langword="null"/>=any, default):
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.IStreamingServer.Connect">
            <summary>
            Connects to a streaming server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>A server connect should only be successfull, if the underlying encoder was started.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.IStreamingServer.Disconnect">
            <summary>
            Disconnects to a streaming server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastErrorMessage"/> for details).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.IStreamingServer.Login">
            <summary>
            Performs a login and/or init of the streaming server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>When the login was successfully made, you should set the <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastError"/> to <see cref="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Ok"/> and the <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastErrorMessage"/> to String.Empty.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.IStreamingServer.SendData(System.IntPtr,System.Int32)">
            <summary>
            Sends encoded sample data (manually) to the streaming server (e.g. the data as received in an own <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/>).
            </summary>
            <param name="buffer">The pointer to the encoded buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <param name="length">The length of the buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <returns>The number of bytes send to the server (or -1, if no bytes could be send (see <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>If an error occures the connection should be closed automatically (using <see cref="M:Un4seen.Bass.Misc.IStreamingServer.Disconnect"/>).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.IStreamingServer.UpdateTitle(System.String,System.String)">
            <summary>
            Updates the title song and/or url of the streaming server.
            </summary>
            <param name="song">The title of the song which should be updated.</param>
            <param name="url">The url which should be updated along with the title (or <see langword="null"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastErrorMessage"/> for details).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.IStreamingServer.UpdateTitle(Un4seen.Bass.AddOn.Tags.TAG_INFO,System.String)">
            <summary>
            Updates the song title and/or url of the streaming server.
            </summary>
            <param name="tag">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance to use to update the song.</param>
            <param name="url">The url which should be updated along with the title (or <see langword="null"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.IStreamingServer.LastErrorMessage"/> for details).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.IStreamingServer.GetListeners(System.String)">
            <summary>
            Returns the number of listeners currently connected.
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The current number of listeners (or -1 if not available).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.IStreamingServer.GetStats(System.String)">
            <summary>
            Returns the XML stats of the server.
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The string representing the XML formatted statistics (or <see langword="null"/> on error/not available).</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.StreamingServer">
            <summary>
            Base class for all streaming server classes (e.g. <see cref="T:Un4seen.Bass.Misc.SHOUTcast"/> or <see cref="T:Un4seen.Bass.Misc.ICEcast"/>).
            </summary>
            <remarks>This base class is not intended for direct use, but defines all abstract properties and methods which needs to be implemented by an actual streaming server class.
            A derived class must implement: <see cref="P:Un4seen.Bass.Misc.StreamingServer.IsConnected"/>, <see cref="M:Un4seen.Bass.Misc.StreamingServer.Connect"/>, <see cref="M:Un4seen.Bass.Misc.StreamingServer.Disconnect"/>, <see cref="M:Un4seen.Bass.Misc.StreamingServer.Login"/>, <see cref="M:Un4seen.Bass.Misc.StreamingServer.SendData(System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.Bass.Misc.StreamingServer.UpdateTitle(System.String,System.String)"/>.
            <para>The properties <see cref="P:Un4seen.Bass.Misc.StreamingServer.Encoder"/>, <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> and <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> have been already implemented.</para>
            <para>You might use this base class to derive your own streaming server implementations.</para>
            <para>If an instance of a derived class is being disposed, an already created connection to a streaming server will automatically be closed (using <see cref="M:Un4seen.Bass.Misc.StreamingServer.Disconnect"/>) and an <see cref="P:Un4seen.Bass.Misc.StreamingServer.Encoder"/> will be stopped, if active.</para>
            <para></para>
            </remarks>
            <example>
            This example shows a basic implementation of an own streaming server class:
            <code lang="C#">
            public class MyOwnServer : StreamingServer
            {
            	// Constructor
            	public MyOwnServer(IBaseEncoder encoder, bool useBASS) : base(encoder, useBASS)
            	{
            	  // validity check
            	  if (encoder.EncoderType != BASSChannelType.BASS_CTYPE_STREAM_MP3 &amp;&amp;
            	      encoder.EncoderType != BASSChannelType.BASS_CTYPE_STREAM_AAC)
            	    throw new Exception( "Invalid EncoderType (only MP3 and AAC is supported)!" );
            	}
            	
            	private Socket _socket = null;
            	private bool _loggedIn = false;
            	private byte[] _data = null;
            	private object _lock = false;
            	public string ServerAddress = "localhost";
            	public int ServerPort = 8000;
            	
            	public override bool IsConnected
            	{
            	  get
            	  {
            	    if (_socket != null)
            	      return _socket.Connected &amp;&amp; _loggedIn;
            	    else
            	      return false;
            	  }
            	}
            	
            	public override bool Connect()
            	{
            	  // check the encoder
            	  if (!Encoder.IsActive)
            	  {
            	    LastError = STREAMINGERROR.Error_EncoderError;
            	    LastErrorMessage = "Encoder not active!";
            	    return false;
            	  }
            	  // close any connections, if still open
            	  if (_socket != null &amp;&amp; _socket.Connected)
            	  {
            	    _socket.Close();
            	    _socket = null;
            	  }
            	  // create a connection at port+1
            	  _socket = CreateSocket( ServerAddress, ServerPort+1 );
            	  return (_socket != null &amp;&amp; _socket.Connected);
            	}
            	
            	public override bool Disconnect()
            	{
            	  bool ok = false;
            	  try
            	  {
            	    _socket.Close();
            	  }
            	  catch { }
            	  finally
            	  {
            	    if (_socket != null &amp;&amp; _socket.Connected) 
            	    {
            	      LastError = STREAMINGERROR.Error_Disconnect;
            	      LastErrorMessage = "Winsock error: " + 
                        Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error());
            	    }
            	    else
            	    {
            	      ok = true;
            	      _socket = null;
            	      _loggedIn = false;
            	    }
            	  }
            	  return ok;
            	}
            	
            	public override bool Login()
            	{
            	  if (_socket == null)
            	  {
            	    LastError = STREAMINGERROR.Error_NotConnected;
            	    LastErrorMessage = "Not connected to server.";
            	    return false;
            	  }
            	  bool ok = false;
            	  if ( MyLogin() )
            	  {
            	    if ( MyInit() )
            	    {
            	      ok = true;
            	      _loggedIn = true;
            	      LastError = STREAMINGERROR.Ok;
            	      LastErrorMessage = String.Empty;
            	    }
            	    else
            	    {
            	      LastError = STREAMINGERROR.Error_Login;
            	      LastErrorMessage = "Server could not be initialized.";
            	    }
            	  }
            	  else
            	  {
            	    LastError = STREAMINGERROR.Error_Login;
            	    LastErrorMessage = "Invalid username or password.";
            	  }
            	  return ok;
            	}
            	
            	public override int SendData(IntPtr buffer, int length)
            	{
            	  if (buffer == IntPtr.Zero || length == 0)
            	    return 0;
            	  int sendData = -1;
            	  try
            	  {
            	    lock (_lock)
            	    {
            	      // dynamic buffer allocation
            	      if (_data == null || _data.Length &lt; length)
            	        _data = new byte[length];
            	      Marshal.Copy(buffer, _data, 0, length);
            	      sendData = _socket.Send( _data, 0, length, SocketFlags.None );
            	      if (sendData &lt; 0)
            	      {
            	        LastError = STREAMINGERROR.Error_SendingData;
            	        LastErrorMessage = String.Format( "{0} bytes not send.", length);
            	        Disconnect();
            	      }
            	      else if (sendData != length)
            	      {
            	        LastError = STREAMINGERROR.Warning_LessDataSend;
            	        LastErrorMessage = String.Format( "{0} of {1} bytes send.", sendData, length);
            	      }
            	    }
            	  }
            	  catch (Exception e)
            	  { 
            	    LastError = STREAMINGERROR.Error_SendingData;
            	    LastErrorMessage = e.Message;
            	    sendData = -1;
            	    Disconnect();
            	  }
            	  return sendData;
            	}
            	
            	public override bool UpdateTitle(string song, string url)
            	{
            	  SongTitle = song;
            	  return MyUpdateTitle(song);
            	}
            	
            	private Socket CreateSocket(string serveraddress, int port)
            	{
            	  Socket socket = null;
            	  IPHostEntry hostEntry = null;
            	  try
            	  {
            	    // Get host related information
            	    hostEntry = Dns.GetHostEntry(serveraddress);
            	    // Loop through the AddressList to obtain the supported AddressFamily.
            	    foreach(IPAddress address in hostEntry.AddressList)
            	    {
            	      try
            	      {
            	        IPEndPoint ipe = new IPEndPoint(address, port);
            	        Socket tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            	        tempSocket.Connect(ipe);
            	        if (tempSocket.Connected)
            	        {
            	          socket = tempSocket;
            	          break;
            	        }
            	        else
            	        {
            	          continue;
            	        }
            	      }
            	      catch (Exception e)
            	      { 
            	        LastError = STREAMINGERROR.Error_CreatingConnection;
            	        LastErrorMessage = e.Message;
            	        socket = null; 
            	      }
            	    }
            	  }
            	  catch (Exception e)
            	  { 
            	    LastError = STREAMINGERROR.Error_ResolvingServerAddress;
            	    LastErrorMessage = e.Message;
            	    socket = null;
            	  }
            	  return socket;
            	}
            	
            	private bool MyLogin() 
            	{
            	  if (_socket == null)
            	    return false;
            	  // e.g. send password here using the "_socket"
            	  ...
            	}
            	
            	private bool MyInit() 
            	{
            	  if (_socket == null)
            	    return false;
            	  // e.g. send some init data to the server here using the "_socket"
            	  ...
            	}
            	
            	private bool MyUpdateTitle(string song)
            	{
            	  bool ok = false;
            	  Socket socket = null;
            	  try
            	  {
            	    socket = CreateSocket( ServerAddress, ServerPort );
            	    if (socket != null)
            	    {
            	      // send the song title using the created "socket"
            	      ...
            	      ok = true;
            	    }
            	  }
            	  catch { }
            	  finally
            	  {
            	    // disconnect
            	    if (socket != null)
            	    {
            	      socket.Close();
            	      socket = null;
            	    }
            	  }
            	  return ok;
            	}
            }
            </code>
            <code lang="VB">
            Public Class MyOwnServer Inherits StreamingServer
            
                ' Constructor
                Public Sub New(encoder As IBaseEncoder, useBASS As Boolean) MyBase.New(encoder, useBASS)
                  ' validity check
                  If encoder.EncoderType &lt;&gt; BASSChannelType.BASS_CTYPE_STREAM_MP3 AndAlso 
                     encoder.EncoderType &lt;&gt; BASSChannelType.BASS_CTYPE_STREAM_AAC Then
                     Throw New Exception("Invalid EncoderType (only MP3 and AAC is supported)!")
                  End If
                End Sub
            
                Private _socket As Socket = Nothing
                Private _loggedIn As Boolean = False
                Private _data As Byte() = Nothing
                Private _lock As Object = False
                Public ServerAddress As String = "localhost"
                Public ServerPort As Integer = 8000
            
                Public Overrides ReadOnly Property IsConnected() As Boolean
                  Get
                    If Not (_socket Is Nothing) Then
                      Return _socket.Connected AndAlso _loggedIn
                    Else
                      Return False
                    End If
                  End Get
                End Property
            
                Public Overrides Function Connect() As Boolean
                  ' check the encoder
                  If Not Encoder.IsActive Then
                    LastError = STREAMINGERROR.Error_EncoderError
                    LastErrorMessage = "Encoder not active!"
                    Return False
                  End If
                  ' close any connections, if still open
                  If Not (_socket Is Nothing) AndAlso _socket.Connected Then
                    _socket.Close()
                    _socket = Nothing
                  End If
                  ' create a connection at port+1
                  _socket = CreateSocket(ServerAddress, ServerPort + 1)
                  Return Not (_socket Is Nothing) AndAlso _socket.Connected
                End Function
            
                Public Overrides Function Disconnect() As Boolean
                  Dim ok As Boolean = False
                  Try
                    _socket.Close()
                  Catch
                  Finally
                    If Not (_socket Is Nothing) AndAlso _socket.Connected Then
                      LastError = STREAMINGERROR.Error_Disconnect
                      LastErrorMessage = "Winsock error: " + 
                                         Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error())
                    Else
                      ok = True
                      _socket = Nothing
                      _loggedIn = False
                    End If
                  End Try
                  Return ok
                End Function
            
                Public Overrides Function Login() As Boolean
                  If _socket Is Nothing Then
                    LastError = STREAMINGERROR.Error_NotConnected
                    LastErrorMessage = "Not connected to server."
                    Return False
                  End If
                  Dim ok As Boolean = False
                  If MyLogin() Then
                    If MyInit() Then
                      ok = True
                      _loggedIn = True
                      LastError = STREAMINGERROR.Ok
                      LastErrorMessage = [String].Empty
                    Else
                      LastError = STREAMINGERROR.Error_Login
                      LastErrorMessage = "Server could not be initialized."
                    End If
                  Else
                    LastError = STREAMINGERROR.Error_Login
                    LastErrorMessage = "Invalid username or password."
                  End If
                  Return ok
                End Function
            
                Public Overrides Function SendData(buffer As IntPtr, length As Integer) As Integer
                  If buffer = IntPtr.Zero OrElse length = 0 Then
                    Return 0
                  End If
                  Dim sendData As Integer = -1
                  Try
                    SyncLock _lock
                    ' dynamic buffer allocation
                    If _data Is Nothing OrElse _data.Length &lt; length Then
                      _data = New Byte(length) {}
                    End If
                    Marshal.Copy(buffer, _data, 0, length)
                    sendData = _socket.Send(_data, 0, length, SocketFlags.None)
                    If sendData &lt; 0 Then
                      LastError = STREAMINGERROR.Error_SendingData
                      LastErrorMessage = [String].Format("{0} bytes not send.", length)
                      Disconnect()
                    Else
                      If sendData &lt;&gt; length Then
                        LastError = STREAMINGERROR.Warning_LessDataSend
                        LastErrorMessage = [String].Format("{0} of {1} bytes send.", sendData, length)
                      End If
                    End If
                  End SyncLock
                  Catch e As Exception
                    LastError = STREAMINGERROR.Error_SendingData
                    LastErrorMessage = e.Message
                    sendData = -1
                    Disconnect()
                  End Try
                  Return sendData
                End Function
            
                Public Overrides Function UpdateTitle(song As String) As Boolean
                  SongTitle = song
                  Return MyUpdateTitle(song)
                End Function
            
                Private Function CreateSocket(serveraddress As String, port As Integer) As Socket
                  Dim socket As Socket = Nothing
                  Dim hostEntry As IPHostEntry = Nothing
                  Try
                    ' Get host related information
                    hostEntry = Dns.GetHostEntry(serveraddress)
                    ' Loop through the AddressList to obtain the supported AddressFamily.
                    Dim address As IPAddress
                    For Each address In hostEntry.AddressList
                      Try
                        Dim ipe As New IPEndPoint(address, port)
                        Dim tempSocket As New Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
                        tempSocket.Connect(ipe)
                        If tempSocket.Connected Then
                          socket = tempSocket
                          Exit ForEach
                        Else
                          GoTo ContinueForEach1
                        End If
                      Catch e As Exception
                        LastError = STREAMINGERROR.Error_CreatingConnection
                        LastErrorMessage = e.Message
                        socket = Nothing
                      End Try
                      ContinueForEach1:
                    Next address
                  Catch e As Exception
                    LastError = STREAMINGERROR.Error_ResolvingServerAddress
                    LastErrorMessage = e.Message
                    socket = Nothing
                  End Try
                  Return socket
                End Function
            
                Private Function MyLogin() As Boolean
                  If _socket Is Nothing Then
                    Return False
                  End If 
                  ' e.g. send password here using the "_socket"
                  ...
                End Function
            
                Private Function MyInit() As Boolean
                  If _socket Is Nothing Then
                    Return False
                  End If 
                  ' e.g. send some init data to the server here using the "_socket"
                  ...
                End Function
            
                Private Function MyUpdateTitle(song As String) As Boolean
                  Dim ok As Boolean = False
                  Dim socket As Socket = Nothing
                  Try
                    socket = CreateSocket(ServerAddress, ServerPort)
                    If Not (socket Is Nothing) Then
                      ' send the song title using the created "socket"
                      ...
                      ok = True
                    End If
                  Catch
                  Finally
                    ' disconnect
                    If Not (socket Is Nothing) Then
                      socket.Close()
                      socket = Nothing
                    End If
                  End Try
                  Return ok
                End Function
            
            End Class
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.#ctor(Un4seen.Bass.Misc.IBaseEncoder)">
            <summary>
            Default constructor, creating an instance for a streaming server implementation (using BASSenc as the default processor).
            </summary>
            <param name="encoder">The encoder interface which should be used with this streaming server.</param>
            <remarks>This overload will set the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> property to <see langword="true"/>.</remarks>
            <exception cref="T:System.ArgumentNullException">No <paramref name="encoder"/> specified.</exception>
            <exception cref="T:System.ArgumentException">The <paramref name="encoder"/> could not be found. Make sure the encoder (.exe) is present.</exception>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.#ctor(Un4seen.Bass.Misc.IBaseEncoder,System.Boolean)">
            <summary>
            Default constructor, creating an instance for a streaming server implementation.
            </summary>
            <param name="encoder">The encoder interface which should be used with this streaming server.</param>
            <param name="useBASS"><see langword="true"/>, if BASSenc should be used to handle all cast server handling. <see langword="false"/>, if the internal implementation should be used.</param>
            <exception cref="T:System.ArgumentNullException">No <paramref name="encoder"/> specified.</exception>
            <exception cref="T:System.ArgumentException">The <paramref name="encoder"/> could not be found. Make sure the encoder (.exe) is present.</exception>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.Dispose">
            <summary>
            Implement IDisposable.
            </summary>
            <remarks>Do not make this method virtual. A derived class should not be able to override this method.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.Finalize">
            <summary>
            Finalization code.
            </summary>
            <remarks>This destructor will run only if the Dispose method does not get called.
            It gives your base class the opportunity to finalize. Do not provide destructors in types derived from this class.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.GetIPfromHost(System.String)">
            <summary>
            Resolved a given host name (DNS or IP) to its possible IP addesses.
            </summary>
            <param name="hostname">The host name to resolve.</param>
            <returns>A list of IP addresses that are associated with a host - or <see langword="null"/> on error.</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.StreamingServer.UseBASS">
            <summary>
            Gets if native BASSenc should be used to connect and stream to the server (as specified in the constructor).
            </summary>
            <remarks>
            <para>If set to <see langword="true"/> native BASSenc will handle all TCP socket and cast communication.
            This should be the more secure and preferred option, however in this mode it is not possible to use the <see cref="M:Un4seen.Bass.Misc.StreamingServer.SendData(System.IntPtr,System.Int32)"/> method manually!</para>
            <para>If set to <see langword="false"/> an internal .Net TCP socket connection will be used and manual feed of encoded sample data via <see cref="M:Un4seen.Bass.Misc.StreamingServer.SendData(System.IntPtr,System.Int32)"/> is possible.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.StreamingServer.SongTitle">
            <summary>
            The current/last song title.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.StreamingServer.SongUrl">
            <summary>
            The current/last song url.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.StreamingServer.ForceUTF8TitleUpdates">
            <summary>
            Gets or Sets if title updates (via <see cref="M:Un4seen.Bass.Misc.StreamingServer.UpdateTitle(System.String,System.String)"/>) should in any case use UTF-8 (default is <see langword="false"/>).
            </summary>
            <remarks>
            Depending on the streaming server and stream format being used title updates might be performed using Windows-1252, Latin1 or UTF-8 encoding by default.
            When setting this property to <see langword="true"/> you can force title updates to be performed using UTF-8 encoding.
            <para>Note: Only set this property to <see langword="true"/> if you are sure, that the streaming server supports title updates in UTF-8!</para>
            <para>The default behaviour (when this property is set to <see langword="false"/>) is as followed:
            <list type="table">
            <listheader><term>Streaming Server</term><description>Title Updates in</description></listheader>
            <item><term>SHOUTcast</term><description>Windows-1252 codepage (Latin1)</description></item>
            <item><term>ICEcast</term><description><para>OGG streams: UTF-8</para><para>non-OGG streams: ISO-8859-1 (Latin1)</para></description></item>
            <item><term>WMAcast</term><description>UTF-8</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.StreamingServer.LocalNetworkCardIPAddress">
            <summary>
            Gets or Sets a local IP address to use for cast server connections (<see langword="null"/>=any, default):
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.StreamingServer.IsConnected">
            <summary>
            Returns <see langword="true"/>, if connected to a boadcast server - else <see langword="false"/>.
            </summary>
            <remarks>Normally it is sufficient to return <see langword="true"/> once a <see cref="M:Un4seen.Bass.Misc.StreamingServer.Connect"/> was successful.
            However, if the server implementation also requires a <see cref="M:Un4seen.Bass.Misc.StreamingServer.Login"/> this method should only return <see langword="true"/>, if also the <see cref="M:Un4seen.Bass.Misc.StreamingServer.Login"/> was successful.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.StreamingServer.Encoder">
            <summary>
            Returns the encoder interface which is used with this instance.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.StreamingServer.LastError">
            <summary>
            Gets or Sets the last streaming error.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage">
            <summary>
            Gets or Sets the last streaming error message.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.Connect">
            <summary>
            Connects to a streaming server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.Disconnect">
            <summary>
            Disconnects from a streaming server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>A server connect should only be successfull, if the underlying encoder was started.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.Login">
            <summary>
            Performs a login to and/or initializes the streaming server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>If a server doesn't not need to handle a particular login or initialization, you might simply return <see langword="true"/> in the implementation.
            However, when the login was successfully made, you should set the <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> to <see cref="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Ok"/> and the <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> to String.Empty.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.SendData(System.IntPtr,System.Int32)">
            <summary>
            Sends encoded sample data (manually) to the streaming server (e.g. the data as received in an own <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/>).
            </summary>
            <param name="buffer">The pointer to the encoded buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <param name="length">The length of the buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <returns>The number of bytes send to the server (or -1, if no bytes could be send (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>If an error occures the connection will be closed automatically (using <see cref="M:Un4seen.Bass.Misc.StreamingServer.Disconnect"/>).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.UpdateTitle(System.String,System.String)">
            <summary>
            Updates the song title of the streaming server.
            </summary>
            <param name="song">The song title to use.</param>
            <param name="url">The url which should be updated along with the title (or <see langword="null"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.UpdateTitle(Un4seen.Bass.AddOn.Tags.TAG_INFO,System.String)">
            <summary>
            Updates the song title of the streaming server.
            </summary>
            <param name="tag">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance to use to update the song title.</param>
            <param name="url">The url which should be updated along with the title (or <see langword="null"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.GetListeners(System.String)">
            <summary>
            Returns the number of listeners currently connected.
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The current number of listeners (or -1 if not available).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.StreamingServer.GetStats(System.String)">
            <summary>
            Returns the XML stats of the server.
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The string representing the XML formatted statistics (or <see langword="null"/> on error/not available).</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR">
            <summary>
            List of all possible streaming errors.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Ok">
            <summary>
            All OK.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Error_ResolvingServerAddress">
            <summary>
            The server address could not be resolved (DNS error).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Error_CreatingConnection">
            <summary>
            A TCP socket connection to the server could not be established (TCP error).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Error_SendingData">
            <summary>
            The data could not be send to the server (TCP error).
            <para>The server will automatically be disconnected.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Error_EncoderError">
            <summary>
            The encoder could not be started or is inactive.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Error_Login">
            <summary>
            Access was denied (check username and password).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Error_Disconnect">
            <summary>
            An error occurred during a disconnect (disconnect failed, still connected).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Error_NotConnected">
            <summary>
            A connection to the server was not established.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Warning_LessDataSend">
            <summary>
            Not all data could not be send to the server (less data send).
            <para>The server will automatically be disconnected.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.StreamingServer.STREAMINGERROR.Unknown">
            <summary>
            An unknown error occurred.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.SHOUTcast">
            <summary>
            SHOUTcast streaming parameter class.
            To be used when creating an instance of the <see cref="T:Un4seen.Bass.Misc.BroadCast"/> class.
            </summary>
            <remarks>An instance of the class will providing all necessary setup and configuration data in order to connect to a SHOUTcast v1 or v2 server.
            <para>For more information about the SHOUTcast streaming parameters take a look to the <a href="http://www.shoutcast.com">www.shoutcast.com</a> documentation.</para>
            <para>Note: in order to use the SHOUTcast v2 protocol the <see cref="F:Un4seen.Bass.Misc.SHOUTcast.SID"/> property must be set!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.#ctor(Un4seen.Bass.Misc.IBaseEncoder)">
            <summary>
            Creates an instance for a SHOUTcast configuration parameter setting.
            </summary>
            <param name="encoder">The output encoder instance to be used.</param>
            <remarks>An instance of this class is needed in order to create a <see cref="T:Un4seen.Bass.Misc.BroadCast"/> instance.
            <para>Please note, that you need an appropriate encoder for SHOUTcast streaming. For MP3 streaming we recommend using the latest stable version of LAME (see <see cref="T:Un4seen.Bass.Misc.EncoderLAME"/>).</para>
            <para>When streaming in AACplus format an external encoder is needed as well, which accepts pcm data from STDIN and is able to send it's encoded data to STDOUT.
            As of today the only 'free' AACplus encoders comes with Winamp - you might use the 'enc_aacPlus.exe' (see <see cref="T:Un4seen.Bass.Misc.EncoderWinampAACplus"/>) or 'fhgaacenc.exe' (see <see cref="T:Un4seen.Bass.Misc.EncoderFHGAACplus"/>) with it.</para>
            <para>Also take care of all neccessary patent and license issues when streaming or broadcasting!</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> property to decide, whether you want to use the BASS build-in streaming support (default) or if you want to use the BASS.NET internal implementation.
            The major difference is, that the BASS.NET implementation allows you to use <see cref="M:Un4seen.Bass.Misc.SHOUTcast.SendData(System.IntPtr,System.Int32)"/> manually.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid EncoderType (only MP3 and AAC is supported)!</exception>
            <example>
            Creates a SHOUTcast configuration instance.
            <code lang="C#">
            // create an encoder instance
            EncoderLAME lame = new EncoderLAME(_recHandle);
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_56;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono;
            lame.LAME_TargetSampleRate = (int)EncoderLAME.SAMPLERATE.Hz_22050;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            
            // now create the SHOUTcast instance using LAME
            SHOUTcast shoutcast = new SHOUTcast(lame);
            shoutcast.ServerAddress = "http://serveraddress.com";
            shoutcast.ServerPort = 8000;
            shoutcast.Password = "password";
            ...
            </code>
            <code lang="VB">
            ' create an encoder instance
            Dim lame As New EncoderLAME(_recHandle)
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_56)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono
            lame.LAME_TargetSampleRate = CInt(EncoderLAME.SAMPLERATE.Hz_22050)
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            
            ' now create the SHOUTcast instance using LAME
            Dim shoutcast As New SHOUTcast(lame)
            shoutcast.ServerAddress = "http://serveraddress.com"
            shoutcast.ServerPort = 8000
            shoutcast.Password = "password"
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.#ctor(Un4seen.Bass.Misc.IBaseEncoder,System.Boolean)">
            <summary>
            Creates an instance for a SHOUTcast configuration parameter setting.
            </summary>
            <param name="encoder">The output encoder instance to be used.</param>
            <param name="useBASS"><see langword="true"/>, if BASSenc should be used to handle all cast server handling. <see langword="false"/>, if the internal implementation should be used.</param>
            <remarks>An instance of this class is needed in order to create a <see cref="T:Un4seen.Bass.Misc.BroadCast"/> instance.
            <para>Please note, that you need an appropriate encoder for SHOUTcast streaming. For MP3 streaming we recommend using the latest stable version of LAME (see <see cref="T:Un4seen.Bass.Misc.EncoderLAME"/>).</para>
            <para>When streaming in AACplus format an external encoder is needed as well, which accepts pcm data from STDIN and is able to send it's encoded data to STDOUT.
            As of today the only 'free' AACplus encoders comes with Winamp - you might use the 'enc_aacPlus.exe' (see <see cref="T:Un4seen.Bass.Misc.EncoderWinampAACplus"/>) or 'fhgaacenc.exe' (see <see cref="T:Un4seen.Bass.Misc.EncoderFHGAACplus"/>) with it.</para>
            <para>Also take care of all neccessary patent and license issues when streaming or broadcasting!</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> property to decide, whether you want to use the BASS build-in streaming support (default) or if you want to use the BASS.NET internal implementation.
            The major difference is, that the BASS.NET implementation allows you to use <see cref="M:Un4seen.Bass.Misc.SHOUTcast.SendData(System.IntPtr,System.Int32)"/> manually.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid EncoderType (only MP3 and AAC is supported)!</exception>
            <example>
            Creates a SHOUTcast configuration instance.
            <code lang="C#">
            // create an encoder instance
            EncoderLAME lame = new EncoderLAME(_recHandle);
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_56;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono;
            lame.LAME_TargetSampleRate = (int)EncoderLAME.SAMPLERATE.Hz_22050;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            
            // now create the SHOUTcast instance using LAME
            SHOUTcast shoutcast = new SHOUTcast(lame, true);
            shoutcast.ServerAddress = "http://serveraddress.com";
            shoutcast.ServerPort = 8000;
            shoutcast.Password = "password";
            ...
            </code>
            <code lang="VB">
            ' create an encoder instance
            Dim lame As New EncoderLAME(_recHandle)
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_56)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono
            lame.LAME_TargetSampleRate = CInt(EncoderLAME.SAMPLERATE.Hz_22050)
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            
            ' now create the SHOUTcast instance using LAME
            Dim shoutcast As New SHOUTcast(lame, True)
            shoutcast.ServerAddress = "http://serveraddress.com"
            shoutcast.ServerPort = 8000
            shoutcast.Password = "password"
            ...
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.ServerAddress">
            <summary>
            SHOUTcast server address (of the form 192.168.1.100 or shoutcast-server.domain.com).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.ServerPort">
            <summary>
            SHOUTcast server TCP port (usually 8000).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.SID">
            <summary>
            SHOUTcast v2 SID.
            </summary>
            <remarks>This property determines if the SHOUTcast v1 or v2 protocol is used!
            If this property is set (not an empty string) the SHOUTcast v2 protocol is used - else the SHOUTcast v1 protocol is used!
            By default this property is empty (and the SHOUTcast v1 protocol is used).
            <para>Note:
            The SHOUTcast v2 protocol can ONLY be used, if the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> property is set to <see langword="true"/> -
            else this property is ignored and the SHOUTcast v1 protocol is used!</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.SHOUTcast.UseSHOUTcastv2">
            <summary>
            Gets or sets, if the SHOUTcast v2 protocol should be used?
            </summary>
            <remarks>The SHOUTcast v2 protocol is used, if the <see cref="F:Un4seen.Bass.Misc.SHOUTcast.SID"/> property is set (not empty) and the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> property is set to <see langword="true"/>!
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.v2SendSongTitleOnly">
            <summary>
            Should SHOUTcast v2 metadata updates only use the <see cref="P:Un4seen.Bass.Misc.StreamingServer.SongTitle"/> value?
            </summary>
            <remarks>Only applies to the SHOUTcast v2 protocol.
            Only used with the <see cref="M:Un4seen.Bass.Misc.SHOUTcast.UpdateTitle(System.String,System.String)"/> overload taking a <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> parameter.
            <para>If this property is set to <see langword="true"/> only the 'TIT2' metadata tag is send to the server using the current <see cref="P:Un4seen.Bass.Misc.StreamingServer.SongTitle"/> value.
            Else (default) the full <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> members are evaluated and the <see cref="P:Un4seen.Bass.Misc.StreamingServer.SongTitle"/> value is ignorred.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.v2SendArtwork">
            <summary>
            Should in-stream artwork be send to a SHOUTcast v2 server?
            </summary>
            <remarks>Only applies to the SHOUTcast v2 protocol. Only images up to 511KB will be send. 
            Only used with the <see cref="M:Un4seen.Bass.Misc.SHOUTcast.UpdateTitle(System.String,System.String)"/> overload taking a <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> parameter.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.v2StreamArtwork">
            <summary>
            Fully qualified path and file name of an alternative artwork picture.
            </summary>
            <remarks>
            <para>Allows you to specify an alternative stream/brand artwork to use, if the playling file doesn't contain one.</para>
            <para>Only applies to the SHOUTcast v2 protocol and the <see cref="F:Un4seen.Bass.Misc.SHOUTcast.v2SendArtwork"/> property is set to <see langword="true"/>.
            Only images up to 511KB will be send. 
            Only used with the <see cref="M:Un4seen.Bass.Misc.SHOUTcast.UpdateTitle(System.String,System.String)"/> overload taking a <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> parameter.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.v2StationArtwork">
            <summary>
            Fully qualified path and file name of the station logo picture.
            </summary>
            <remarks>
            <para>Allows you to specify a station logo picture to use.</para>
            <para>Only applies to the SHOUTcast v2 protocol and the <see cref="F:Un4seen.Bass.Misc.SHOUTcast.v2SendArtwork"/> property is set to <see langword="true"/>.
            Only images up to 511KB will be send.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.v2SongTitleNext">
            <summary>
            The next song title ('artist - title') to report within the SHOUTcast v2 metadata.
            </summary>
            <remarks>
            <para>Allows you to specify an 'extension'-'soon' block within the v2 metadata. If empty no 'soon' block (next, upcomming song title) will be reported. Must be specified before a call to <see cref="M:Un4seen.Bass.Misc.SHOUTcast.UpdateTitle(System.String,System.String)"/>.</para>
            <para>Only applies to the SHOUTcast v2 protocol.</para>
            <para>Note: This property will be cleared after each <see cref="M:Un4seen.Bass.Misc.SHOUTcast.UpdateTitle(System.String,System.String)"/> call and needs to be set again prior to it.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.Username">
            <summary>
            SHOUTcast server broadcast user name (the "source" username which should be used).
            </summary>
            <remarks>If empty (default), the default "source" username is used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.Password">
            <summary>
            SHOUTcast server broadcast password (the "Password" config item on the server's config file).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.SHOUTcast.AdminUsername">
            <summary>
            SHOUTcast server admin user name (the "admin" username which should be used for certain actions).
            </summary>
            <remarks>If empty (default), the "admin" username is used.
            <para>This property is evaluated in the following methods: <see cref="M:Un4seen.Bass.Misc.SHOUTcast.UpdateTitle(System.String,System.String)"/>, <see cref="M:Un4seen.Bass.Misc.SHOUTcast.GetListeners(System.String)"/> and <see cref="M:Un4seen.Bass.Misc.SHOUTcast.GetStats(System.String)"/>.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.SHOUTcast.AdminPassword">
            <summary>
            SHOUTcast server admin password (the "AdminPassword" config item on the server's config file).
            </summary>
            <remarks>If empty (default), the <see cref="F:Un4seen.Bass.Misc.SHOUTcast.Password"/> is used.
            <para>This property is evaluated in the following methods: <see cref="M:Un4seen.Bass.Misc.SHOUTcast.UpdateTitle(System.String,System.String)"/>, <see cref="M:Un4seen.Bass.Misc.SHOUTcast.GetListeners(System.String)"/> and <see cref="M:Un4seen.Bass.Misc.SHOUTcast.GetStats(System.String)"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.StationName">
            <summary>
            A brief description of your station or of what content you'll be broadcasting (usually 10-20 words).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.Genre">
            <summary>
            A genre list of the variety of content you're providing (usually 1-3 words like Rock, 80s, etc.)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.PublicFlag">
            <summary>
            <see langword="true"/>, if you want your broadcast to be listed in the public directory of SHOUTcast broadcasts (default).
            Else <see langword="false"/>, which means private.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.UseSSL">
            <summary>
            Use SSL/TLS encryption.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.Url">
            <summary>
            A URL of a website that contains information about your broadcast.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.Irc">
            <summary>
            A channel on Efnet IRC for your listeners to interact with (don't worry if you don't understand this).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.Icq">
            <summary>
            If you have one, your ICQ number for listeners to interact with you through. (www.icq.com)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.SHOUTcast.Aim">
            <summary>
            Your AOL Instant Messenger (AIM) name for listeners to interact with you. (aim.aol.com)
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.SHOUTcast.IsConnected">
            <summary>
            Returns <see langword="true"/>, if connected and logged into the SHOUTcast server - else <see langword="false"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.Connect">
            <summary>
            Establishes a TCP socket connection to the SHOUTcast server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>A server connect will only be successfull, if the underlying <see cref="T:System.Text.Encoder"/> was started and is active.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.Disconnect">
            <summary>
            Disconnects from a SHOUTcast server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>Disconnecting from the server will also STOP the underlying encoder by calling the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> method.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.Login">
            <summary>
            Performs a login and initializes the SHOUTcast server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>If <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="true"/>, nothing will happen here and <see langword="true"/> is returned in any case.
            So this method is only effective, if <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="false"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.SendData(System.IntPtr,System.Int32)">
            <summary>
            Sends encoded sample data to the SHOUTcast server (e.g. the data as received in an own <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/>).
            </summary>
            <param name="buffer">The pointer to the encoded buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <param name="length">The length of the buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <returns>The number of bytes send to the server (or -1, if no bytes could be send (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>NOTE: Only possible, if <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="false"/>.
            <para>If an error occures the connection will be closed automatically (using <see cref="M:Un4seen.Bass.Misc.SHOUTcast.Disconnect"/>).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.UpdateTitle(System.String,System.String)">
            <summary>
            Updates the song title of the streaming server.
            </summary>
            <param name="song">The new song title to use.</param>
            <param name="url">The url which should be updated along with the title (or <see langword="null"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>When <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="true"/>, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSetTitle(System.Int32,System.String,System.String)"/> will be used internally -
            else an internal implementation will be used.
            <para>Calling this method also sets the <see cref="P:Un4seen.Bass.Misc.StreamingServer.SongTitle"/> property accordingly.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.UpdateTitle(Un4seen.Bass.AddOn.Tags.TAG_INFO,System.String)">
            <summary>
            Updates the song title of the streaming server.
            </summary>
            <param name="tag">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance to use to set the new song title.</param>
            <param name="url">The url which should be updated along with the title (or <see langword="null"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>When <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="true"/>, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSetTitle(System.Int32,System.String,System.String)"/> will be used internally -
            else an internal implementation will be used.
            <para>Calling this method does NOT sets the <see cref="P:Un4seen.Bass.Misc.StreamingServer.SongTitle"/> property - but will use it in case of <see cref="P:Un4seen.Bass.Misc.SHOUTcast.UseSHOUTcastv2"/>=<see langword="true"/> as the TIT2 metadata value (see <see cref="F:Un4seen.Bass.Misc.SHOUTcast.v2SendSongTitleOnly"/>)!
            If the <see cref="P:Un4seen.Bass.Misc.StreamingServer.SongTitle"/> property is <see langword="null"/> or empty the <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> data will be used instead.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.UpdateStationArtwork(System.String)">
            <summary>
            Updates the station logo picture of the streaming server.
            </summary>
            <param name="stationArtwork">The fully qualified path and file name of the station logo picture to use.</param>
            <remarks>The <see cref="F:Un4seen.Bass.Misc.SHOUTcast.v2StationArtwork"/> property will be updated accordingly and the new station logo will be send to the SHOUTcastv2 server (if connected).
            <para>Only applies to the SHOUTcast v2 protocol and the <see cref="F:Un4seen.Bass.Misc.SHOUTcast.v2SendArtwork"/> property must be set to <see langword="true"/>.
            Only images up to 511KB will be send.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.GetListeners(System.String)">
            <summary>
            Returns the number of listeners currently connected.
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The current number of listeners (or -1 if not available).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.SHOUTcast.GetStats(System.String)">
            <summary>
            Returns the XML stats of the server.
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The string representing the XML formatted statistics (or <see langword="null"/> on error/not available).</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.ICEcast">
            <summary>
            ICEcast streaming parameter class.
            To be used when creating an instance of the <see cref="T:Un4seen.Bass.Misc.BroadCast"/> class.
            </summary>
            <remarks>An instance of the class will providing all necessary setup and configuration data in order to connect to an ICEcast server.
            <para>For more information about the ICEcast streaming parameters take a look to the <a href="http://www.icecast.org">www.icecast.org</a> documentation.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.#ctor(Un4seen.Bass.Misc.IBaseEncoder)">
            <summary>
            Creates an instance for an ICEcast configuration parameter setting.
            </summary>
            <param name="encoder">The output encoder instance to be used.</param>
            <remarks>An instance of this class is needed in order to create a <see cref="T:Un4seen.Bass.Misc.BroadCast"/> instance.
            <para>Please note, that you need an appropriate encoder for ICEcast streaming. For MP3 streaming we recommend using the latest stable version of LAME (see <see cref="T:Un4seen.Bass.Misc.EncoderLAME"/>). For OGG streaming we recommend using the latest stable version of oggenc2 (see <see cref="T:Un4seen.Bass.Misc.EncoderOGG"/>).</para>
            <para>When streaming in AACplus format an external encoder is needed as well, which accepts pcm data from STDIN and is able to send it's encoded data to STDOUT.
            As of today the only 'free' AACplus encoders comes with Winamp - you might use the 'enc_aacPlus.exe' (see <see cref="T:Un4seen.Bass.Misc.EncoderWinampAACplus"/>) or 'fhgaacenc.exe' (see <see cref="T:Un4seen.Bass.Misc.EncoderFHGAACplus"/>) with it.</para>
            <para>Also take care of all neccessary patent and license issues when streaming or broadcasting!</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> property to decide, whether you want to use the BASS build-in streaming support (default) or if you want to use the BASS.NET internal implementation.
            The major difference is, that the BASS.NET implementation allows you to use <see cref="M:Un4seen.Bass.Misc.ICEcast.SendData(System.IntPtr,System.Int32)"/> manually.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid EncoderType (only OGG, MP3, AAC or FLAC_OGG is supported)!</exception>
            <example>
            Creates an ICEcast configuration instance.
            <code lang="C#">
            // create an encoder instance
            EncoderLAME lame = new EncoderLAME(_recHandle);
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_56;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono;
            lame.LAME_TargetSampleRate = (int)EncoderLAME.SAMPLERATE.Hz_22050;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            
            // now create the ICEcast instance using LAME
            ICEcast icecast = new ICEcast(lame);
            icecast.ServerAddress = "http://serveraddress.com";
            icecast.ServerPort = 8000;
            icecast.Password = "password";
            icecast.Mountpoint = "/mystream";
            ...
            </code>
            <code lang="VB">
            ' create an encoder instance
            Dim lame As New EncoderLAME(_recHandle)
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_56)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono
            lame.LAME_TargetSampleRate = CInt(EncoderLAME.SAMPLERATE.Hz_22050)
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            
            ' now create the ICEcast instance using LAME
            Dim icecast As New ICEcast(lame)
            icecast.ServerAddress = "http://serveraddress.com"
            icecast.ServerPort = 8000
            icecast.Password = "password"
            icecast.Mountpoint = "/mystream"
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.#ctor(Un4seen.Bass.Misc.IBaseEncoder,System.Boolean)">
            <summary>
            Creates an instance for an ICEcast configuration parameter setting.
            </summary>
            <param name="encoder">The output encoder instance to be used.</param>
            <param name="useBASS"><see langword="true"/>, if BASSenc should be used to handle all cast server handling. <see langword="false"/>, if the internal implementation should be used.</param>
            <remarks>An instance of this class is needed in order to create a <see cref="T:Un4seen.Bass.Misc.BroadCast"/> instance.
            <para>Please note, that you need an appropriate encoder for ICEcast streaming. For MP3 streaming we recommend using the latest stable version of LAME (see <see cref="T:Un4seen.Bass.Misc.EncoderLAME"/>). For OGG streaming we recommend using the latest stable version of oggenc2 (see <see cref="T:Un4seen.Bass.Misc.EncoderOGG"/>).</para>
            <para>When streaming in AACplus format an external encoder is needed as well, which accepts pcm data from STDIN and is able to send it's encoded data to STDOUT.
            As of today the only 'free' AACplus encoders comes with Winamp - you might use the 'enc_aacPlus.exe' (see <see cref="T:Un4seen.Bass.Misc.EncoderWinampAACplus"/>) or 'fhgaacenc.exe' (see <see cref="T:Un4seen.Bass.Misc.EncoderFHGAACplus"/>) with it.</para>
            <para>Also take care of all neccessary patent and license issues when streaming or broadcasting!</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> property to decide, whether you want to use the BASS build-in streaming support (default) or if you want to use the BASS.NET internal implementation.
            The major difference is, that the BASS.NET implementation allows you to use <see cref="M:Un4seen.Bass.Misc.ICEcast.SendData(System.IntPtr,System.Int32)"/> manually.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid EncoderType (only OGG, MP3 and AAC is supported)!</exception>
            <example>
            Creates an ICEcast configuration instance.
            <code lang="C#">
            // create an encoder instance
            EncoderLAME lame = new EncoderLAME(_recHandle);
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_56;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono;
            lame.LAME_TargetSampleRate = (int)EncoderLAME.SAMPLERATE.Hz_22050;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            
            // now create the ICEcast instance using LAME
            ICEcast icecast = new ICEcast(lame, true);
            icecast.ServerAddress = "http://serveraddress.com";
            icecast.ServerPort = 8000;
            icecast.Password = "password";
            icecast.Mountpoint = "/mystream";
            ...
            </code>
            <code lang="VB">
            ' create an encoder instance
            Dim lame As New EncoderLAME(_recHandle)
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_56)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Mono
            lame.LAME_TargetSampleRate = CInt(EncoderLAME.SAMPLERATE.Hz_22050)
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            
            ' now create the ICEcast instance using LAME
            Dim icecast As New ICEcast(lame, True)
            icecast.ServerAddress = "http://serveraddress.com"
            icecast.ServerPort = 8000
            icecast.Password = "password"
            icecast.Mountpoint = "/mystream"
            ...
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.ServerAddress">
            <summary>
            ICEcast server address (hostname, in the form 192.168.1.100 or icecast-server.domain.com).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.ServerPort">
            <summary>
            ICEcast server TCP port (usually 8000).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.MountPoint">
            <summary>
            The ICEcast mountpoint you want to use.
            </summary>
            <remarks>All Ogg Vorbis streams should have mountpoints that end in .ogg (i.e. "/mystream.ogg"). 
            This is due to the lazy way most media players infer the type of stream. 
            MP3 streams usually do not contain an extension (e.g. "/mystream"). 
            Mount points also should not contain any spaces or odd characters (again due to the lazy way many of the media players are coded) and MUST start with a slash ('/')!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.Username">
            <summary>
            ICEcast server user name (the "source" username which should be used).
            </summary>
            <remarks>If empty (default), the default "source" username is used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.Password">
            <summary>
            ICEcast server broadcast password (the "source-password" config item on the server's config file).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.ICEcast.AdminUsername">
            <summary>
            ICEcast server admin user name (the "admin-user" which should be used for certain actions).
            </summary>
            <remarks>If empty (default), the <see cref="F:Un4seen.Bass.Misc.ICEcast.Username"/> is used (and if that is empty too, the "admin" username is used).
            <para>This property is evaluated in the following methods: <see cref="M:Un4seen.Bass.Misc.ICEcast.UpdateTitle(System.String,System.String)"/>, <see cref="M:Un4seen.Bass.Misc.ICEcast.GetListeners(System.String)"/> and <see cref="M:Un4seen.Bass.Misc.ICEcast.GetStats(System.String)"/>.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.ICEcast.AdminPassword">
            <summary>
            ICEcast server admin password (the "admin-password" which should be used for certain actions).
            </summary>
            <remarks>If empty (default), the <see cref="F:Un4seen.Bass.Misc.ICEcast.Password"/> is used.
            <para>This property is evaluated in the following methods: <see cref="M:Un4seen.Bass.Misc.ICEcast.UpdateTitle(System.String,System.String)"/>, <see cref="M:Un4seen.Bass.Misc.ICEcast.GetListeners(System.String)"/> and <see cref="M:Un4seen.Bass.Misc.ICEcast.GetStats(System.String)"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.StreamName">
            <summary>
            The name of your stream or station (usually 1-5 words).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.StreamDescription">
            <summary>
            A description of your stream or station or of what content you'll be broadcasting (usually 10-20 words).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.StreamUrl">
            <summary>
            A URL of a website that contains information about your broadcast.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.StreamGenre">
            <summary>
            A genre list of the variety of content you're providing (usually 1-3 words like Rock, 80s, etc.)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.PublicFlag">
            <summary>
            <see langword="true"/>, if you want your broadcast to be listed in the public directory of ICEcast broadcasts (default).
            Else <see langword="false"/>, which means private.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.UsePUT">
            <summary>
            Use the PUT method when connecting to an Icecast server (should be used with ICEcast v2.4 or above), else the SOURCE method is used. This flag is applied automatically when the UseSSL property is specified.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.UseSSL">
            <summary>
            Use SSL/TLS encryption.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.Quality">
            <summary>
            The bitrate quality name (e.g. "Quality").
            </summary>
            <remarks>Set to <see langword="null"/> (default), if you want to use the effective bitrate (in kbps) of the encoder instead.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.UpdateMetaDataUsingAdminInterface">
            <summary>
            Update the metadata (song title changes) by using the admin interface (e.g. supported for MP3 or AAC streams).
            </summary>
            <remarks>Set to <see langword="false"/> to not apply metadata changes via the admin interface at all (e.g. for ICEcast server using FLAC or OGG).
            Some servers like e.g. Rocket Streaming Audio Server also support that interface for other formats, like FLAC or OGG.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.ICEcast.UpdateMetaDataUsingNewBitstreams">
            <summary>
            Update the metadata (song title changes) by using a new bitstream for each change (e.g. ICEcast requires this for FLAC or OGG).
            </summary>
            <remarks>If streaming servers have issues with multiple bitstreams, set this to <see langword="false"/>.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.ICEcast.IsConnected">
            <summary>
            Returns <see langword="true"/>, if connected and logged into the ICEcast server - else <see langword="false"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.Connect">
            <summary>
            Establishes a TCP socket connection to the ICEcast server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>A server connect will only be successfull, if the underlying <see cref="T:System.Text.Encoder"/> was started and is active.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.Disconnect">
            <summary>
            Disconnects from an ICEcast server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>Disconnecting from the server will also STOP the underlying encoder by calling the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> method.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.Login">
            <summary>
            Performs a login and initializes the ICEcast server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>If <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="true"/>, nothing will happen here and <see langword="true"/> is returned in any case.
            So this method is only effective, if <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="false"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.SendData(System.IntPtr,System.Int32)">
            <summary>
            Sends encoded sample data to the ICEcast server (e.g. the data as received in an own <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/>).
            </summary>
            <param name="buffer">The pointer to the encoded buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <param name="length">The length of the buffer data (as given by to <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODEPROC"/> callback).</param>
            <returns>The number of bytes send to the server (or -1, if no bytes could be send (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>NOTE: Only possible, if <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="false"/>.
            <para>If an error occures the connection will be closed automatically (using <see cref="M:Un4seen.Bass.Misc.ICEcast.Disconnect"/>).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.UpdateTitle(System.String,System.String)">
            <summary>
            Updates the song title of the streaming server.
            </summary>
            <param name="song">The new song title to use.</param>
            <param name="url"><see langword="null"/> - not supported for ICEcast.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>When <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> is set to <see langword="true"/>, <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_CastSetTitle(System.Int32,System.String,System.String)"/> will be used internally -
            else an internal implementation will be used.
            <para>See the <see cref="F:Un4seen.Bass.Misc.ICEcast.UpdateMetaDataUsingAdminInterface"/> and <see cref="F:Un4seen.Bass.Misc.ICEcast.UpdateMetaDataUsingNewBitstreams"/> for details.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.UpdateTitle(Un4seen.Bass.AddOn.Tags.TAG_INFO,System.String)">
            <summary>
            Special handling for ICEcast and special encoders (Flac, Ogg, ...) who need new bitstream's.
            </summary>
            <param name="tag">The <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance to use to update the song title.</param>
            <param name="url">The url which should be updated along with the title (or <see langword="null"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>
            <para>See the <see cref="F:Un4seen.Bass.Misc.ICEcast.UpdateMetaDataUsingAdminInterface"/> and <see cref="F:Un4seen.Bass.Misc.ICEcast.UpdateMetaDataUsingNewBitstreams"/> for details.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.UpdateArtistTitle(System.String,System.String)">
            <summary>
            Updates the artist and title of the streaming server.
            </summary>
            <param name="artist">The new artist name to use.</param>
            <param name="title">The new title name to use.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>An internal implementation will be used to set the artist and title.
            <para>See the <see cref="F:Un4seen.Bass.Misc.ICEcast.UpdateMetaDataUsingAdminInterface"/> and <see cref="F:Un4seen.Bass.Misc.ICEcast.UpdateMetaDataUsingNewBitstreams"/> for details.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.GetListeners(System.String)">
            <summary>
            Returns the number of listeners currently connected.
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The current number of listeners (or -1 if not available).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.ICEcast.GetStats(System.String)">
            <summary>
            Returns the XML stats of the server.
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The string representing the XML formatted statistics (or <see langword="null"/> on error/not available).</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.WMAcast">
            <summary>
            Windows Media Streaming (WMAcast) streaming parameter class.
            To be used when creating an instance of the <see cref="T:Un4seen.Bass.Misc.BroadCast"/> class.
            </summary>
            <remarks>An instance of the class will providing all necessary setup and configuration data in order to connect to an Windows Media server or directly stream to the network (acting like a server).
            <para>The <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> property will in this implementation in any case return <see langword="true"/> (since BASSwma is used internally).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WMAcast.#ctor(Un4seen.Bass.Misc.IBaseEncoder)">
            <summary>
            Creates an instance for an WMAcast configuration parameter setting.
            </summary>
            <param name="encoder">The output encoder instance to be used (must be of type <see cref="T:Un4seen.Bass.Misc.EncoderWMA"/>).</param>
            <remarks>An instance of this class is needed in order to create a <see cref="T:Un4seen.Bass.Misc.BroadCast"/> instance.
            <para>Also take care of all neccessary patent and license issues when streaming or broadcasting!</para>
            <para>The <see cref="P:Un4seen.Bass.Misc.StreamingServer.UseBASS"/> property will in this implementation in any case be set to <see langword="true"/> (since BASSwma is used internally).</para>
            <para>Also the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseNetwork"/> flag will always be forced and set to <see langword="true"/>, as well as the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> will in any case be set to <see langword="null"/> as well.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid EncoderType (only OGG, MP3 and AAC is supported)!</exception>
            <exception cref="T:System.ArgumentNullException">Invalid Encoder used, encoder must be of type EncoderWMA!</exception>
            <example>
            Creates an WMAcast configuration instance.
            <code lang="C#">
            // create an encoder instance
            EncoderWMA wma = new EncoderWMA(_recHandle);
            wma.WMA_Bitrate = (int)EncoderWMA.BITRATE.kbps_64;
            wma.WMA_UseNetwork = true;
            
            // now create the WMAcast instance
            WMAcast wmacast = new WMAcast(wma);
            wmacast.ServerPort = 8080;
            ...
            wma.Start(null, IntPtr.Zero, true); // start paused
            wma.Connect();
            wma.Pause(false); // start encoding
            Bass.BASS_ChannelPlay(_recHandle, false);
            ...
            </code>
            <code lang="VB">
            ' create an encoder instance
            Dim wma As New EncoderWMA(_recHandle)
            wma.WMA_Bitrate = CInt(EncoderWMA.BITRATE.kbps_64)
            wma.WMA_UseNetwork = True
            
            ' now create the WMAcast instance
            Dim wmacast As New WMAcast(wma)
            wmacast.ServerPort = 8080
            ...
            wma.Start(Nothing, IntPtr.Zero, True) ' start paused
            wma.Connect()
            wma.Pause(False) ' start encoding
            Bass.BASS_ChannelPlay(_recHandle, False)
            ...
            </code>
            </example>
        </member>
        <member name="F:Un4seen.Bass.Misc.WMAcast.StreamAuthor">
            <summary>
            An optional author of the stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WMAcast.StreamPublisher">
            <summary>
            An optional publisher of the stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WMAcast.StreamGenre">
            <summary>
            An optional genre of the stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WMAcast.StreamCopyright">
            <summary>
            A optional copyright notice for the stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WMAcast.StreamDescription">
            <summary>
            A optional description for the stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WMAcast.StreamRating">
            <summary>
            A optional rating information for the stream.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WMAcast.StreamUrl">
            <summary>
            A URL of a website that contains information about your broadcast.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WMAcast.UsePublish">
            <summary>
            Enables WMA encoding to a publishing point on a Windows Media server (default is <see langword="false"/>, meaning direct network).
            </summary>
            <remarks>The default mode is active network streaming, meaning this server can directly be used by clients to connect.
            <para>Also note, that if streaming to a Windows Media server you must set the properties: <see cref="P:Un4seen.Bass.Misc.WMAcast.PublishUrl"/>, <see cref="P:Un4seen.Bass.Misc.WMAcast.PublishUsername"/> and <see cref="P:Un4seen.Bass.Misc.WMAcast.PublishPassword"/>.</para>
            <para>If you set the <see cref="P:Un4seen.Bass.Misc.WMAcast.UsePublish"/> property to <see langword="false"/> (default), encoding will directly be done to the network (pull mode): <see cref="P:Un4seen.Bass.Misc.WMAcast.NetworkClients"/> users might connect directly to the specified <see cref="P:Un4seen.Bass.Misc.WMAcast.NetworkPort"/>.</para>
            <para>Set the <see cref="P:Un4seen.Bass.Misc.WMAcast.UsePublish"/> property to <see langword="true"/>, in order to enable encoding to a publishing point on a Windows Media server (push mode).</para>
            <para>Note: Directly changes the underlying <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> member.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WMAcast.NetworkPort">
            <summary>
            The network port number for clients to conenct to (only used, if <see cref="P:Un4seen.Bass.Misc.WMAcast.UsePublish"/> is set to <see langword="false"/>) - default is 8080.
            </summary>
            <remarks>
            <para>Note: Directly changes the underlying <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkPort"/> member.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WMAcast.NetworkClients">
            <summary>
            The maximum number of clients (up to 50) that can be connected (only used, if <see cref="P:Un4seen.Bass.Misc.WMAcast.UsePublish"/> is set to <see langword="false"/>) - default is 1.
            </summary>
            <remarks>
            <para>Note: Directly changes the underlying <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkClients"/> member.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WMAcast.PublishUrl">
            <summary>
            URL of the publishing point on the Windows Media server (only used, if <see cref="P:Un4seen.Bass.Misc.WMAcast.UsePublish"/> is set to <see langword="true"/>).
            </summary>
            <remarks>
            <para>Note: Directly changes the underlying <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishUrl"/> member.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WMAcast.PublishUsername">
            <summary>
            Username to use in connecting to the server (only used, if <see cref="P:Un4seen.Bass.Misc.WMAcast.UsePublish"/> is set to <see langword="true"/>).
            </summary>
            <remarks>If either this or <see cref="P:Un4seen.Bass.Misc.WMAcast.PublishPassword"/> is <see langword="null"/>, then no username/password is sent to the server.
            <para>Note: Directly changes the underlying <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishUsername"/> member.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WMAcast.PublishPassword">
            <summary>
            Password to use in connecting to the server (only used, if <see cref="P:Un4seen.Bass.Misc.WMAcast.UsePublish"/> is set to <see langword="true"/>).
            </summary>
            <remarks>If either this or <see cref="P:Un4seen.Bass.Misc.WMAcast.PublishUsername"/> is <see langword="null"/>, then no username/password is sent to the server.
            <para>Note: Directly changes the underlying <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishPassword"/> member.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WMAcast.IsConnected">
            <summary>
            Returns <see langword="true"/>, if connected and logged into the WMAcast server - else <see langword="false"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WMAcast.Connect">
            <summary>
            Establishes a connection to the WMAcast server (network or publishing point).
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>A server connect will only be successfull, if the underlying <see cref="T:System.Text.Encoder"/> was started and is active.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WMAcast.Disconnect">
            <summary>
            Disconnects from an WMAcast server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WMAcast.Login">
            <summary>
            Performs a login and initializes the WMAcast server.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WMAcast.SendData(System.IntPtr,System.Int32)">
            <summary>
            Sends sample data to the underlying WMA encoder.
            </summary>
            <param name="buffer">The pointer to the buffer data.</param>
            <param name="length">The length of the buffer data.</param>
            <returns>The number of bytes send to the server (or -1, if no bytes could be send (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>
            <para>IMPORTANT NOTE: This implementation always return <paramref name="length"/>!
            As the underlying <see cref="T:Un4seen.Bass.Misc.EncoderWMA"/> automatically sends data to the encoder there is NO need to call this method at all!
            This because the <see cref="T:Un4seen.Bass.Misc.EncoderWMA"/> will already set up an automatic DSP system whichs feeds the encoder with sample data and already sends the data to the server automatically.</para>
            <para>If you want to get notified about any errors when sending data to the encoder you might use the <see cref="P:Un4seen.Bass.Misc.EncoderWMA.WMA_Notify"/> property.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WMAcast.UpdateTitle(System.String,System.String)">
            <summary>
            Updates the song title of the streaming server.
            </summary>
            <param name="song">The new song title to use.</param>
            <param name="url"><see langword="null"/> - not supported for WMAcast.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastError"/> or <see cref="P:Un4seen.Bass.Misc.StreamingServer.LastErrorMessage"/> for details).</returns>
            <remarks>Updatig the song title on a Windows Media server does effectivly not work. Use the initial <see cref="P:Un4seen.Bass.Misc.StreamingServer.SongTitle"/> instead.
            This method sends the "CAPTION" script command to the encoder. The global <see cref="P:Un4seen.Bass.Misc.StreamingServer.SongTitle"/> is not updated by this call!
            <para>This is a text string that is displayed in the captions area of Windows Media Player. 
            This supports standard HTML formatting, so the text can be formatted as you wish.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WMAcast.GetListeners(System.String)">
            <summary>
            Returns the number of listeners currently connected (only if <see cref="P:Un4seen.Bass.Misc.WMAcast.UsePublish"/> is set to <see langword="false"/>).
            </summary>
            <param name="password">The optional admin password to use (<see langword="null"/>=use default).</param>
            <returns>The current number of listeners (or -1 if not available).</returns>
            <remarks>The optional password is actually not used in this implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WMAcast.GetStats(System.String)">
            <summary>
            Returns the XML stats of the server.
            </summary>
            <param name="password">An optional password to use (should be set to <see langword="null"/> to use the default publish password).</param>
            <returns>The string representing the XML formatted statistics (or <see langword="null"/> on error/not available).</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.IBaseEncoder">
            <summary>
            Defines a generalized encoder class interface that a <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/> class must implement.
            </summary>
            <remarks>This interface is for example used in the constructor of a streaming server parameter class (e.g. <see cref="T:Un4seen.Bass.Misc.SHOUTcast"/> or <see cref="T:Un4seen.Bass.Misc.ICEcast"/>) 
            to specify which encoder settings should be used.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.ChannelHandle">
            <summary>
            This property should get or sets the channel handle which will be used to create the broadcast encoder class.
            </summary>
            <remarks>Only set this member to a new channel, if the encoder is not active (otherwise the channel will not be changed)!</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.ChannelBitwidth">
            <summary>
            This property should return the actual bitwidth of the sample data BASS is using with the channel (e.g. 8, 16, 32).
            </summary>
            <remarks>BASS supports 8/16/32-bit sample data, so if a WAV file, for example, uses another sample resolution, it'll have to be converted by BASS.
            This bitwidth represents the bitwidth which is used by BASS (e.g. in a DSP callback delegate) and does not represent the original bitwidth of the stream.
            The bitwidth used by BASS is determined how the underlying channel handle was created (e.g. using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> with the <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_8BITS"/> or <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_FLOAT"/> flag)
            and if the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_FLOATDSP"/> option has been set.
            If non of the above was used, by default 16 bits per sample are used.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.ChannelSampleRate">
            <summary>
            This property should return the actual sample rate in Hz of the sample data BASS is using with the channel (e.g. 44100).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.ChannelNumChans">
            <summary>
            This property should return the actual number of channles of the sample data BASS is using with the channel (e.g. 1=mono, 2=stereo, etc.).
            </summary>
            <remarks>BASS supports multi-channel sample data, so make sure the actual encoder implementation supports multi-channel too.
            If the encoder does not support multi-channel make sure that you are using non-multi-channel hanles only.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderType">
            <summary>
            This property should return a value indicating which type of content the broadcast encoder implements.
            </summary>
            <remarks>For example: If the implementation of the broadcast encoder implements an MP3 encoder, you should return BASS_CTYPE_STREAM_MP3.
            For a complete list see <see cref="T:Un4seen.Bass.BASSChannelType"/>.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.DefaultOutputExtension">
            <summary>
            This property should return the default extension of an output file for this encoder (e.g. ".mp3" or ".ogg" etc.).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.SupportsSTDOUT">
            <summary>
            This property should return <see langword="true"/>, if the base encoder implementation (resp. the underlying command-line tool being used) support STDOUT for output of the encoded data - else <see langword="false"/> must be returned.
            </summary>
            <remarks>In order to support broadcast streaming with an encoder command-line tool,
            the encoded data needs to be received back by a callback function, so the encoder needs to be told to output to STDOUT (instead of a file).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle">
            <summary>
            This property should get and set a HENCODE encoder handle as returned by the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> method if the the encoder has been started (see <see cref="M:Un4seen.Bass.Misc.IBaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>) or 0 (zero), if the encoder has not been started or was stopped (see <see cref="M:Un4seen.Bass.Misc.IBaseEncoder.Stop"/>).
            </summary>
            <remarks>Take note of the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.IsActive"/> member, which might need to use the the encoder handle in order to retrieve the encoder state.
            <para>If the encoder is not started or not started successfully (see <see cref="M:Un4seen.Bass.Misc.IBaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>) or is stopped this property must return 0 (zero)!</para>
            <para>If the encoder is started and is active this property must return the valid HENCODE handle (non-zero)!</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.IsActive">
            <summary>
            This property should return <see langword="true"/>, if the encoder has been started (see <see cref="M:Un4seen.Bass.Misc.IBaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>) and is active - else <see langword="false"/> must be returned.
            </summary>
            <remarks>An implementation should first get the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/>.
            If the encoder handle is valid (non-zero) the implementation might use the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_IsActive(System.Int32)"/> method in order to check it's state.
            If the state is not BASS_ACTIVE_STOPPED this property should return <see langword="true"/>.
            In all other cases this property should return <see langword="false"/> (not started, paused, stopped etc.)</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.IsPaused">
            <summary>
            This property should return <see langword="true"/>, only if the encoder has been paused (see <see cref="M:Un4seen.Bass.Misc.IBaseEncoder.Pause(System.Boolean)"/>) - else <see langword="false"/> must be returned.
            </summary>
            <remarks>An implementation should first get the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/>.
            If the encoder handle is valid (non-zero) the implementation might use the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_IsActive(System.Int32)"/> method in order to check it's state.
            Only if the state is BASS_ACTIVE_PAUSED this property should return <see langword="true"/>.
            In all other cases this property should return <see langword="false"/> (not started, active, playing etc.)</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderCommandLine">
            <summary>
            This property should return an encoder command-line string, 
            which might be used with the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> method in order to create and start the encoder.
            </summary>
            <remarks>Make sure, that the encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.OutputFile"/> members correctly.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderDirectory">
            <summary>
            This property should get and set the encoder's base directory.
            It might be used in the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderCommandLine"/> implementation to return a fully qualified encoder command-line.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderExists">
            <summary>
            This property should return <see langword="true"/>, if the encoder exists and is available - else <see langword="false"/> should be returned.
            </summary>
            <remarks>When using a command-line encoder this method might check, if the executable file exists in the specified <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderDirectory"/>.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.InputFile">
            <summary>
            Specifies the input file name to be processed by the encoder (null = STDIN).
            </summary>
            <remarks>This member should be used when implementing the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderCommandLine"/> property.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.Force16Bit">
            <summary>
            Gets or Sets if a encoding in 16-bit sample data should be forced (default is <see langword="false"/>).
            </summary>
            <remarks>This member should be used when implementing the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderCommandLine"/> property.
            <para>When you want to encode a floating-point channel, but the encoder does not support 32-bit floating-point sample data, then you can use this flags to have the sample data converted to 16 bit integer data before it's passed on to the encoder.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.NoLimit">
            <summary>
            Gets or Sets if encoding should use the CAST_NOLIMIT flag (which is only needed, if the encoder is used for streaming).
            </summary>
            <remarks>With this option you might disable the rate limiting during casting (as it'll be limited by the playback rate anyway if the source channel is being played).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.UseAsyncQueue">
            <summary>
            Gets or Sets if encoding should use an async queue (i.e. the BASS_ENCODE_QUEUE flag).
            </summary>
            <remarks>
            With this option you might enable queueing of sample data and feeding it to the encoder asynchronously in another thread,
            so that any update thread isn't delayed by the encoding.
            <para>This might be usefull when encoding a playback stream or a recording stream which is feeding playback.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.OutputFile">
            <summary>
            Specifies the output file name to be processed by the encoder (null = STDOUT).
            </summary>
            <remarks>This member should be used when implementing the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderCommandLine"/> property.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.EffectiveBitrate">
            <summary>
            Specifies the target effective bitrate of the encoder output (in kbps, e.g. 128 kbps).
            </summary>
            <remarks>This member must return a valid bitrate, if you are using the encoder in a <see cref="T:Un4seen.Bass.Misc.BroadCast"/> implementation.
            If you are encoding in VBR or ABR this member must also return a valid bitrate (e.g. approximated). 
            You might use one of the <see cref="T:Un4seen.Bass.Misc.BaseEncoder.BITRATE"/> constants in order to set a valid effective bitrate.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.IBaseEncoder.TAGs">
            <summary>
            Gets or Sets the <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> structure associated with the encoder.
            </summary>
            <remarks>By default this member is <see langword="null"/> - meaning no Tag info is used with the encoder.
            <para>If you set this property to a valid <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance before you call <see cref="M:Un4seen.Bass.Misc.IBaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>, this will be used (when supported by the encoder) to automatically write the respective tag info to the output.
            Meaning the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderCommandLine"/> will be modified accordingly.</para>
            <para>The TAGs will only be used, if you have specified an <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.OutputFile"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.IBaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method must implement the actual start of the encoder. 
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must return a valid HENCODE handle.
            </summary>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. 
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.IBaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Should return <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> must be returned.</returns>
            <remarks>An imlementation of this method should internally call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> accordingly using the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must return a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must return 0 (zero).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.IBaseEncoder.Stop">
            <summary>
            This method must implement the actual stop of the encoder. 
            After the encoder was stopped successfully the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must return 0 (zero).
            </summary>
            <returns>Should return <see langword="true"/>, if the encoder was successfully stopped - else <see langword="false"/> must be returned and an <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must stay as before.</returns>
            <remarks>An imlementation of this method should internally call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> accordingly using the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/>.
            After the encoder was stopped successfully the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must return 0 (zero). 
            If the encoder was not stopped and is still active or simply paused <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must return a valid HENCODE (non-zero).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.IBaseEncoder.Pause(System.Boolean)">
            <summary>
            This method must implement the actual pauseing of the encoder. 
            After the encoder was paused successfully the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must still return a valid HENCODE handle (non-zero).
            </summary>
            <param name="paused">Pause the encoder (<see langword="true"/>) or unpause (<see langword="false"/>).</param>
            <returns>Should return <see langword="true"/>, if the encoder was successfully paused - else <see langword="false"/> must be returned and an <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must stay as before.</returns>
            <remarks>An imlementation of this method should internally call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)"/> accordingly using the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/>.
            After the encoder was paused successfully the <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must still return a valid HENCODE handle (non-zero).
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.IBaseEncoder.EncoderHandle"/> must return 0 (zero).</remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.BaseEncoder">
            <summary>
            Base class for all encoder implementation classes (e.g. <see cref="T:Un4seen.Bass.Misc.EncoderLAME"/>, <see cref="T:Un4seen.Bass.Misc.EncoderWMA"/> or <see cref="T:Un4seen.Bass.Misc.EncoderOGG"/>).
            </summary>
            <remarks>This base class is not intended for direct use, but defines all abstract properties and methods which needs to be implemented by an actual broadcast encoder class.
            <para>Internally, the sending of sample data to the encoder is implemented via a DSP callback on the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle"/>. That means when you play the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle"/> (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the encoder at the same time. 
            It also means that if the <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)">BASS_CONFIG_FLOATDSP</see> option is enabled, the sample data will be 32-bit floating-point.</para>
            <para>A derived class must implement: <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderType"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.SupportsSTDOUT"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderCommandLine"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EffectiveBitrate"/> and <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/>.</para>
            <para>The properties <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelBitwidth"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelSampleRate"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelNumChans"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.IsActive"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.IsPaused"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/>
            as well as the methods <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> and <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> have been already implemented.</para>
            <para>You might use this base class to derive your own Encoder implementations.
            In this case a derived class must only implement the following members: <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderCommandLine"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderType"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.SupportsSTDOUT"/>.</para>
            <para>If an instance of a derived class is being disposed, an already assigned Encoder will automatically be stopped.</para>
            <para>How to use an encoder implementation:
            <list type="table">
            <listheader><term>Scenario:</term><description>How-To:</description></listheader>
            <item><term>"Recording" To "Streaming":</term>
            <description>Create a recording handle with <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/>.
            <para>Set <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> to <see langword="null"/> (STDIN, STDOUT).</para>
            <para>Use the encoder instance to create a <see cref="T:Un4seen.Bass.Misc.StreamingServer"/>, which is then used by the <see cref="T:Un4seen.Bass.Misc.BroadCast"/> class.</para>
            </description></item>
            <item><term>"Recording" To "File":</term>
            <description>Create a recording handle with <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/>.
            <para>Set <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> to <see langword="null"/> and the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> to a file name (STDIN, file).</para>
            <para>Call <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/> to start encoding and <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> to stop the live recording encoding.</para>
            <code lang="C#">
            EncoderNeroAAC n = new EncoderNeroAAC(_recHandle);
            n.InputFile = null;
            n.OutputFile = "test.m4a";
            n.NERO_Bitrate = 48;
            n.Start(null, IntPtr.Zero, false);
            // your recording will be encoded until you call...
            n.Stop();
            </code>
            <code lang="VB">
            Dim n As New EncoderNeroAAC(_recHandle)
            n.InputFile = Nothing
            n.OutputFile = "test.m4a"
            n.NERO_Bitrate = 48
            n.Start(Nothing, IntPtr.Zero, False)
            ' your recording will be encoded until you call...
            n.Stop()
            </code>
            </description></item>
            <item><term>"Stream" To "Streaming":</term>
            <description>Create a stream handle e.g. with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> (either normal or decoding).
            <para>Set <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> to <see langword="null"/> and the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> to a file name (STDIN, file).</para>
            <para>Use the encoder instance to create a <see cref="T:Un4seen.Bass.Misc.StreamingServer"/>, which is then used by the <see cref="T:Un4seen.Bass.Misc.BroadCast"/> class.</para>
            <para>Call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> resp. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if using a decoding stream) to play resp. decode the stream and actually feed the encoder and therewith the broadcasting server.</para>
            <para>Hint: You might use <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/> to create a continues mixer output stream channel for streaming.</para>
            </description></item>
            <item><term>"Stream" To "File":</term>
            <description>Create a stream handle e.g. with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> (either normal or decoding).
            <para>Set <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> to <see langword="null"/> and the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> to a file name (STDIN, file).</para>
            <para>Call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/> resp. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if using a decoding stream) to play resp. decode the stream and actually feed the encoder.</para>
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.wav", 0, 0, BASSFlag.BASS_STREAM_DECODE);
            EncoderLAME l = new EncoderLAME(stream);
            l.InputFile = null;	//STDIN
            l.OutputFile = "test.mp3";
            l.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_64;
            l.LAME_Mode = EncoderLAME.LAMEMode.Default;
            l.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            l.Start(null, IntPtr.Zero, false);
            // decode the stream (if not using a decoding channel, simply call "Bass.BASS_ChannelPlay" here)
            byte[] encBuffer = new byte[65536]; // our dummy encoder buffer
            while (Bass.BASS_ChannelIsActive(stream) == BASSActive.BASS_ACTIVE_PLAYING)
            {
            	// getting sample data will automatically feed the encoder
            	int len = Bass.BASS_ChannelGetData(_stream, encBuffer, encBuffer.Length);
            }
            l.Stop();  // finish
            Bass.BASS_StreamFree(stream);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.wav", 0, 0, BASSFlag.BASS_STREAM_DECODE)
            Dim l As New EncoderLAME(stream)
            l.InputFile = Nothing 'STDIN
            l.OutputFile = "test.mp3"
            l.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_64)
            l.LAME_Mode = EncoderLAME.LAMEMode.Default
            l.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            l.Start(Nothing, IntPtr.Zero, False)
            ' decode the stream (if not using a decoding channel, simply call "Bass.BASS_ChannelPlay" here)
            Dim encBuffer(65536) As Byte ' our dummy encoder buffer
            While Bass.BASS_ChannelIsActive(stream) = BASSActive.BASS_ACTIVE_PLAYING
              ' getting sample data will automatically feed the encoder
              Dim len As Integer = Bass.BASS_ChannelGetData(_stream, encBuffer, encBuffer.Length)
            End While
            l.Stop() ' finish
            Bass.BASS_StreamFree(stream)
            </code>
            </description></item>
            <item><term>"File" To "Streaming":</term>
            <description>Create a stream handle e.g. with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> (either normal or decoding).
            Just like the above example. And use the stream handle to create the encoder instance.
            <para>Set <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> to <see langword="null"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> to <see langword="null"/> (STDIN, STDOUT).</para>
            <para>Use the encoder instance to create a <see cref="T:Un4seen.Bass.Misc.StreamingServer"/>, which is then used by the <see cref="T:Un4seen.Bass.Misc.BroadCast"/> class.</para>
            </description></item>
            <item><term>"File" To "File":</term>
            <description>No stream handle is actually needed.
            <para>Set <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> to a file name (file, file).</para>
            <para>Call <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/> to start encoding and <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> to stop encoding.</para>
            <para>Or simply use the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/> method instead.</para>
            <code lang="C#">
            EncoderOGG o = new EncoderOGG(0);
            o.InputFile = "test.wav";
            o.OutputFile = "test.ogg";
            o.OGG_UseQualityMode = true;
            o.OGG_Quality = 4;
            BaseEncoder.EncodeFile(o, null, true, false, true);
            </code>
            <code lang="VB">
            Dim o As New EncoderOGG(0)
            o.InputFile = "test.wav"
            o.OutputFile = "test.ogg"
            o.OGG_UseQualityMode = True
            o.OGG_Quality = 4
            BaseEncoder.EncodeFile(o, Nothing, True, False, True)
            </code>
            </description></item>
            </list>
            </para>
            </remarks>
            <example>
            This example shows a basic implementation of an own Encoder class:
            <code lang="C#">
            public class MyOwnEncoder : BaseEncoder
            {
            	// Constructor
            	public MyOwnEncoder(int channel) : base(channel)
            	{
            	}
            	
            	public override string ToString()
            	{
            	  return "My Encoder (BASS_CTYPE_STREAM_MP3)";
            	}
            	
            	public override string DefaultOutputExtension
            	{
            	  get { return ".mp3"; }
            	}
            	
            	public override BASSChannelType EncoderType
            	{
            	  get { return BASSChannelType.BASS_CTYPE_STREAM_MP3; }
            	}
            	
            	public override bool SupportsSTDOUT
            	{
            	  get { return true; }
            	}
            	
            	public override string EncoderCommandLine
            	{
            	  get { return BuildEncoderCommandLine(); }
            	}
            
            	public override int EffectiveBitrate
            	{
            	  get { return My_Bitrate; }	
            	}
            	
            	public override bool Start(ENCODEPROC proc, IntPtr user, bool paused)
            	{
            	  if (EncoderHandle != 0 || (proc != null &amp;&amp; !SupportsSTDOUT))
            	    return false;
            	  // start the encoder
                  BASSEncode flag = BASSEncode.BASS_ENCODE_NOHEAD;
                  if (Force16Bit)
                    flag |= BASSEncode.BASS_ENCODE_FP_16BIT;
                  if (paused)
                    flag |= BASSEncode.BASS_ENCODE_PAUSE;
            	  EncoderHandle = BassEnc.BASS_Encode_Start(ChannelHandle, EncoderCommandLine, 
            	                                            flag, proc, user);
            	  if (EncoderHandle == 0)
            	    return false;
            	  else
            	    return true;
            	}
            	
            	// local members for setting individual parameters
            	public int My_Bitrate = 128; 
            	
            	// just an example here!
            	private string BuildEncoderCommandLine()
            	{
            	  CultureInfo enCI = new CultureInfo("en-US", false);
            	  StringBuilder sb = new StringBuilder();
            	  // the file name and path
            	  sb.Append( Path.Combine( EncoderDirectory, "myencoder.exe" ) );
            	  // raw input?
            	  if (InputFile == null) // STDIN: add the raw pcm header data
            	    sb.Append( String.Format( enCI, " -r -x -s {0:##0.0##} --bitwidth {1}", 
                               ChannelSampleRate/1000f, ChannelBitwidth > 16 ? 16 : ChannelBitwidth ) );
            	  // ...more options here...
            	  sb.Append( String.Format( enCI, " -b {0} -h", My_Bitrate ) );
            	  // STDIN or filename
            	  if (InputFile != null)
            	    sb.Append( " \""+InputFile+"\"" );
            	  else
            	    sb.Append( " -" );
            	  // STDOUT or filename
            	  if (OutputFile != null)
            	    sb.Append( " \""+OutputFile+"\"" );
            	  else
            	    sb.Append( " -" );
            	  return sb.ToString();	
            	}
            }
            </code>
            <code lang="VB">
            Public Class MyOwnEncoder Inherits BaseEncoder
            
                ' Constructor
                Public Sub New(channel As Integer) MyBase.New(channel)
                End Sub
            
                Public Overrides Function ToString() As String
                  Return "My Encoder (BASS_CTYPE_STREAM_MP3)"
                End Function
            
                Public Overrides ReadOnly Property DefaultOutputExtension() As String
                  Get
                    Return ".mp3"
                  End Get
                End Property 
            
                Public Overrides ReadOnly Property EncoderType() As BASSChannelType
                  Get
                    Return BASSChannelType.BASS_CTYPE_STREAM_MP3
                  End Get
                End Property
            
                Public Overrides ReadOnly Property SupportsSTDOUT() As Boolean
                  Get
                    Return True
                  End Get
                End Property 
            
                Public Overrides ReadOnly Property EncoderCommandLine() As String
                  Get
                    Return BuildEncoderCommandLine()
                  End Get
                End Property 
            
                Public Overrides ReadOnly Property EffectiveBitrate() As Integer
                  Get
                    Return My_Bitrate
                  End Get
                End Property
            
                Public Overrides Function Start(proc As ENCODEPROC, user As IntPtr, paused As Boolean) As Boolean
                  If EncoderHandle &lt;&gt; 0 OrElse (Not (proc Is Nothing) AndAlso Not SupportsSTDOUT) Then
                    Return False
                  End If 
                  ' start the encoder
                  Dim flag As BASSEncode = BASSEncode.BASS_ENCODE_NOHEAD
                  If Force16Bit Then
                    flag = flag Or BASSEncode.BASS_ENCODE_FP_16BIT
                  End If
                  If paused Then
                    flag = flag Or BASSEncode.BASS_ENCODE_PAUSE
                  End If
                  EncoderHandle = BassEnc.BASS_Encode_Start(ChannelHandle, EncoderCommandLine, 
                                                            flag, proc, user)
                  End If
                  If EncoderHandle = 0 Then
                    Return False
                  Else
                    Return True
                  End If
                End Function
            
                ' local members for setting individual parameters
                Public My_Bitrate As Integer = 128
            
                ' just an example here!
                Private Function BuildEncoderCommandLine() As String
                  Dim enCI As New CultureInfo("en-US", False)
                  Dim sb As New StringBuilder()
                  ' the file name and path
                  sb.Append(Path.Combine(EncoderDirectory, "myencoder.exe"))
                  ' raw input?
                  If InputFile Is Nothing Then ' STDIN: add the raw pcm header data
                    sb.Append([String].Format(enCI, " -r -x -s {0:##0.0##} --bitwidth {1}", 
                              ChannelSampleRate / 1000F,(If ChannelBitwidth > 16 Then 16 Else ChannelBitwidth))) 'ToDo: Unsupported feature: conditional (?) operator.
                  End If ' ...more options here...
                  sb.Append([String].Format(enCI, " -b {0} -h", My_Bitrate))
                  ' STDIN or filename
                  If Not (InputFile Is Nothing) Then
                    sb.Append((" """ + InputFile + """"))
                  Else
                    sb.Append(" -")
                  End If ' STDOUT or filename
                  If Not (OutputFile Is Nothing) Then
                    sb.Append((" """ + OutputFile + """"))
                  Else
                    sb.Append(" -")
                  End If
                  Return sb.ToString()
                End Function
            
            End Class
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.#ctor(System.Int32)">
            <summary>
            Default constructor, which already evaluates the channel handle and evaluates the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelBitwidth"/>.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>If you pass 0 (zero) as a channel handle, all members are initialized with some default values.
            You can change the channel handle by assigning a new value to the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle"/> property.
            A channel handle can only be changed, if the encoder is not active (see <see cref="P:Un4seen.Bass.Misc.BaseEncoder.IsActive"/>).
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.Dispose">
            <summary>
            Implement IDisposable.
            </summary>
            <remarks>Do not make this method virtual. A derived class should not be able to override this method.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.Finalize">
            <summary>
            Finalization code.
            </summary>
            <remarks>This destructor will run only if the Dispose method does not get called.
            It gives your base class the opportunity to finalize. Do not provide destructors in types derived from this class.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.IsStreaming">
            <summary>
            Is this instance used for streaming? When set to true, some internal encoder options might be set.
            Default is false.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle">
            <summary>
            Gets or Sets the channel handle which is used to create the broadcast encoder class.
            </summary>
            <remarks>This allows you to move the encoder to another channel on the fly.
            <para>The new channel must have the same sample format (rate, channels, resolution) as the old channel, as that is what the encoder is expecting!</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.ChannelInfo">
            <summary>
            Returns the general channel info.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.ChannelBitwidth">
            <summary>
            This property returns the actual bitwidth of the sample data of the channel (e.g. 8, 16, 32).
            </summary>
            <remarks>BASS supports 8/16/32-bit sample data, so if a WAV file, for example, uses another sample resolution, it'll have to be converted by BASS.
            This bitwidth represents the bitwidth which is used by BASS (e.g. in a DSP callback delegate) and does not represent the original bitwidth of the stream.
            The bitwidth used by BASS is determined how the underlying channel handle was created (e.g. using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> with the <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_8BITS"/> or <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_FLOAT"/> flag)
            and if the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_FLOATDSP"/> option has been set.
            If non of the above was used, by default 16 bits per sample are used.
            <para>However this bitwidth is the bitwidth in use when sending sample data to an encoder.
            If for example the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_FLOATDSP"/> or the <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_FLOAT"/> option have been used,
            the encoder would receive 32-bit float samples. If the derived encoder implementation does not support floating-point sample data, 
            the encoder implementation should use one of the <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncode"/> flags: BASS_ENCODE_FP_8BIT, BASS_ENCODE_FP_16BIT, BASS_ENCODE_FP_24BIT, BASS_ENCODE_FP_32BIT.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.ChannelSampleRate">
            <summary>
            This property returns the actual sample rate in Hz of the sample data BASS is using with the channel (e.g. 44100).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.ChannelNumChans">
            <summary>
            This property returns the actual number of channles of the sample data BASS is using with the channel (e.g. 1=mono, 2=stereo, etc.).
            </summary>
            <remarks>BASS supports multi-channel sample data, so make sure the actual encoder implementation supports multi-channel too.
            If the encoder does not support multi-channel make sure that you are using non-multi-channel hanles only.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.SupportsSTDOUT">
            <summary>
            This property should return <see langword="true"/>, if the base encoder implementation (resp. the underlying command-line tool being used) support STDOUT for output of the encoded data - else <see langword="false"/> must be returned.
            </summary>
            <remarks>In order to support broadcast streaming with an encoder command-line tool,
            the encoded data needs to be received back by a callback function, so the encoder needs to be told to output to STDOUT (instead of a file).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.EncoderType">
            <summary>
            This property should return a value indicating which type of content the broadcast encoder implements.
            </summary>
            <remarks>For example: If the implementation of the broadcast encoder implements an MP3 encoder, you should return BASS_CTYPE_STREAM_MP3.
            For a complete list see <see cref="T:Un4seen.Bass.BASSChannelType"/>.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.DefaultOutputExtension">
            <summary>
            This property should return the default extension of an output file for this encoder (e.g. ".mp3" or ".ogg" etc.).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle">
            <summary>
            Gets or sets the current HENCODE encoder handle.
            </summary>
            <remarks>The encoder handle will be set to a valid HENCODE handle, when the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/> method was successfully called.
            The encoder hande will be set to 0 (zero) when <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> is called.
            <para>It is not advised to modify the encoder handle except in the actual implementation of the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/> method.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.IsActive">
            <summary>
            Gets a value indicating if the encoder has been started (see <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>) and is active - else <see langword="false"/> will be returned.
            </summary>
            <remarks>This implementation first gets the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/>.
            If the encoder handle is valid (non-zero) the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_IsActive(System.Int32)"/> method is used to check the state.
            If the state is not BASS_ACTIVE_STOPPED <see langword="true"/> is returned.
            In all other cases <see langword="false"/> is returned (not started, paused, stopped etc.)</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.IsPaused">
            <summary>
            Gets a value indicating if the encoder has been paused (see <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/>) - else <see langword="false"/> must be returned.
            </summary>
            <remarks>This implementation first gets the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/>.
            If the encoder handle is valid (non-zero) the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_IsActive(System.Int32)"/> method is used to check the state.
            Only if the state is BASS_ACTIVE_PAUSED this property returns <see langword="true"/>.
            In all other cases <see langword="false"/> is returned (not started, active, playing etc.)</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory">
            <summary>
            Gets or Sets the encoder's base directory.
            </summary>
            <remarks>This property might be used in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderCommandLine"/> implementation to return a fully qualified path to the encoder executable within the command-line.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.EncoderCommandLine">
            <summary>
            This property should return an encoder command-line string, 
            which might be used with the <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> method in order to create and start the encoder.
            </summary>
            <remarks>Make sure, that the encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members correctly.
            Derived classes might also intruduce additional members which will have a direct impact of the command-line string.
            Therefore the actual implementation of this property should always generate the command-line dynamically when this property is accessed.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.EncoderExists">
            <summary>
            This property should return <see langword="true"/>, if the encoder exists and is available - else <see langword="false"/> should be returned.
            </summary>
            <remarks>When using a command-line encoder this method might check, if the executable file exists in the specified <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/>.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.InputFile">
            <summary>
            Gets or Sets the input file name to be processed by the encoder (null = STDIN, default).
            </summary>
            <remarks>This member should be used when implementing the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderCommandLine"/> property.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.Force16Bit">
            <summary>
            Gets or Sets if a encoding in 16-bit sample data should be forced (default is <see langword="false"/>).
            </summary>
            <remarks>This member should be used when implementing the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderCommandLine"/> property.
            <para>When you want to encode a floating-point channel, but the encoder does not support 32-bit floating-point sample data, then you can use this flags to have the sample data converted to 16 bit integer data before it's passed on to the encoder.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.NoLimit">
            <summary>
            Gets or Sets if encoding should use the CAST_NOLIMIT flag (which is only needed, if the encoder is used for streaming).
            </summary>
            <remarks>With this option you might disable the rate limiting during casting (as it'll be limited by the playback rate anyway if the source channel is being played).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.UseAsyncQueue">
            <summary>
            Gets or Sets if encoding should use an async queue (i.e. the BASS_ENCODE_QUEUE flag).
            </summary>
            <remarks>
            With this option you might enable queueing of sample data and feeding it to the encoder asynchronously in another thread,
            so that any update thread isn't delayed by the encoding.
            <para>This might be usefull when encoding a playback stream or a recording stream which is feeding playback.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile">
            <summary>
            Gets or Sets the output file name to be processed by the encoder (null = STDOUT, default).
            </summary>
            <remarks>This member should be used when implementing the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderCommandLine"/> property.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.EffectiveBitrate">
            <summary>
            This property should return the target effective bitrate of the encoder output (in kbps, e.g. 128 kbps).
            </summary>
            <remarks>This member must return a valid bitrate (in kbps), if you are using the encoder in a <see cref="T:Un4seen.Bass.Misc.BroadCast"/> implementation (i.e. the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.SupportsSTDOUT"/> is set to <see langword="true"/>).
            If an encoder implementation will never be used for broadcast streaming (or the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.SupportsSTDOUT"/> is set to <see langword="false"/>) this property will not be used and mihgt not be overridden therefore.
            <para>If you are encoding in VBR or ABR this member must also return a valid bitrate (e.g. an approximated average). 
            You might use one of the <see cref="T:Un4seen.Bass.Misc.BaseEncoder.BITRATE"/> constants in order to set a valid effective bitrate.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseEncoder.TAGs">
            <summary>
            Gets or Sets the <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> structure associated with the encoder.
            </summary>
            <remarks>By default this member is <see langword="null"/> - meaning no Tag info is used with the encoder.
            <para>If you set this property to a valid <see cref="T:Un4seen.Bass.AddOn.Tags.TAG_INFO"/> instance before you call <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>, this will be used (when supported by the encoder) to automatically write the respective tag info to the output.
            Meaning the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderCommandLine"/> will be modified accordingly.</para>
            <para>The TAGs will only be used, if you have specified an <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method must implement the actual start of the encoder. 
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> must return a valid HENCODE handle.
            </summary>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. 
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.BaseEncoder.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Should return <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> must be returned.</returns>
            <remarks>An imlementation of this method should internally call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> accordingly using the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> must return a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> must return 0 (zero).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.Stop">
            <summary>
            Stops the encoder immediately (if started).
            </summary>
            <returns>Returns <see langword="true"/>, if the encoder was successfully stopped - else <see langword="false"/> is returned.</returns>
            <remarks>Internally <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Stop(System.Int32)"/> is called using the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/>.
            After the encoder was stopped successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> is set to 0 (zero). 
            If the encoder was not stopped the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> is left unchanged.
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.Stop(System.Boolean)">
            <summary>
            Stops the encoder (if started).
            </summary>
            <param name="queue"><see langword="true"/> to tell BASSenc to wait for the async queue to be processed (the function will still return immediately but the encoder won't be freed yet).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully stopped - else <see langword="false"/> is returned.</returns>
            <remarks>This overload is only in effect, if <see cref="P:Un4seen.Bass.Misc.BaseEncoder.UseAsyncQueue"/> is set (to <see langword="true"/>).
            Internally <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StopEx(System.Int32,System.Boolean)"/> is called using the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/>.
            After the encoder was stopped successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> is set to 0 (zero). 
            If the encoder was not stopped the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> is left unchanged.
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)">
            <summary>
            Pauses or resumes an encoder. 
            </summary>
            <param name="paused"><see langword="true"/> = pause the encoder, <see langword="false"/> = resume the encoder.</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully paused/resumed - else <see langword="false"/> must be returned and an <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> must stay as before.</returns>
            <remarks>
            After the encoder was paused/resumed successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> must still return a valid HENCODE handle (non-zero).
            <para>The default imlementation of this method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_SetPaused(System.Int32,System.Boolean)"/> accordingly using the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/>.
            So normally there is no need to override this method.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.BaseEncoder.BITRATE">
            <summary>
            List of supported encoding bitrates (kbps).
            </summary>
            <remarks>Not all bitrates are supported for all sample frequencies. See the following table for an overview:
            <list type="table">
            <item><term>MPEG-1 layer III sample frequencies (kHz):  32  44.1  48</term>
            <description>bitrates (kbps): 32 40 48 56 64 80 96 112 128 160 192 224 256 320</description></item>
            <item><term>MPEG-2 layer III sample frequencies (kHz):  16  22.05  24</term>
            <description>bitrates (kbps):  8 16 24 32 40 48 56 64 80 96 112 128 144 160</description></item>
            <item><term>MPEG-2.5 layer III sample frequencies (kHz):   8  11.025  12</term>
            <description>bitrates (kbps):  8 16 24 32 40 48 56 64 80 96 112 128 144 160</description></item>
            <item><term>AACplus sample frequencies (kHz):  32  44.1  48</term>
            <description>bitrates (kbps): 16 20 24 28 32 40 48 56 64 80 96 112 128
            <para>aacPlusHigh additional bitrates (kbps): 160 192 224 256 320</para></description></item>
            <item><term>OGG sample frequencies (kHz):   all from 8  to 96</term>
            <description>bitrates (kbps): 8 16 24 32 40 48 56 64 80 96 112 128 144 160 192 224 256 320</description></item>
            <item><term>WMA sample frequencies (kHz):  8  11.025  16  22  32  44.1  48</term>
            <description>bitrates (kbps): 6 8 10 12 16 20 22 32 40 48 64 80 96 128 160 192 256 320</description></item>
            </list>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_6">
            <summary>
            6kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_8">
            <summary>
            8kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_10">
            <summary>
            10kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_12">
            <summary>
            12kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_16">
            <summary>
            16kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_20">
            <summary>
            20kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_22">
            <summary>
            22kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_24">
            <summary>
            24kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_32">
            <summary>
            32kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_40">
            <summary>
            40kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_48">
            <summary>
            48kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_56">
            <summary>
            56kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_64">
            <summary>
            64kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_80">
            <summary>
            80kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_96">
            <summary>
            96kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_112">
            <summary>
            112kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_128">
            <summary>
            128kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_144">
            <summary>
            144kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_160">
            <summary>
            160kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_192">
            <summary>
            192kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_224">
            <summary>
            224kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_256">
            <summary>
            256kbps
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.BITRATE.kbps_320">
            <summary>
            320kbps
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE">
            <summary>
            List of supported broadcast sample rates.
            </summary>
            <remarks>Make sure this samplerate matches your encoder settings.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE.Hz_8000">
            <summary>
            8 kHz
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE.Hz_11025">
            <summary>
            11.025 kHz
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE.Hz_16000">
            <summary>
            16 kHz
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE.Hz_22050">
            <summary>
            22.05 kHz
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE.Hz_32000">
            <summary>
            32 kHz
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE.Hz_44100">
            <summary>
            44.1 kHz
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE.Hz_48000">
            <summary>
            48 kHz
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE.Hz_96000">
            <summary>
            96 kHz
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE.Hz_192000">
            <summary>
            192 kHz
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC">
            <summary>
            This delegate might be used in the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/> method.
            </summary>
            <param name="bytesTotal">The total number of bytes to be encode.</param>
            <param name="bytesDone">The number of bytes already encoded.</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)">
            <summary>
            Encodes a given input file to a given output file using the specified encoder.
            </summary>
            <param name="inputFile">The input filename to encode (must exist).</param>
            <param name="outputFile">The target output filename (if <see langword="null"/>, the filename will be composed by changing the file extension to the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.DefaultOutputExtension"/>).</param>
            <param name="encoder">The encoder to be used (make sure you set all the parameter members of the encoder before).</param>
            <param name="proc">An optional callback procedure which should be called during the encoding process in order to inform you about the encoding progress (<see langword="null"/> = no notifcation).</param>
            <param name="overwriteOutput">Set to <see langword="true"/>, if you want to force to overwrite any already existing output file (will delete the existing file). If set to <see langword="false"/> and the output file already exists the method will fail, but the existing file will not be deleted.</param>
            <param name="deleteInput">Set to <see langword="true"/>, if you want to delete the input file after the encoding has been successfully completed.</param>
            <returns>Returns <see langword="true"/>, if the input file was successfully encoded. Returns <see langword="false"/> if any error occured.</returns>
            <remarks>The method will use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> in order to open the input file for encoding. 16-bit will always be used here to read the inputFile.
            So any file format supported by BASS or the BASS plugin system might be used.
            </remarks>
            <exception cref="T:System.IO.IOException">The output file already exists (only raised when the <paramref name="overwriteOutput"/> is not used).</exception>
            <example>
            Encodes a file using the EncoderWMA (CBR at 128 kbps):
            <code lang="C#">
            EncoderWMA wma = new EncoderWMA(0);
            wma.WMA_Bitrate = 128;
            BaseEncoder.EncodeFile("test.wav", null, wma, 
                                   new BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), true, false);
            
            public void FileEncodingNotification(long bytesTotal, long bytesDone)
            {
              Console.Write("Encoding: {0:P}\r", Math.Round((double)bytesDone/(double)bytesTotal, 2));
            }
            </code>
            <code lang="VB">
            Dim wma As New EncoderWMA(0)
            wma.WMA_Bitrate = 128
            BaseEncoder.EncodeFile("test.wav", Nothing, wma, 
                                   New BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), True, False)
            
            Public Sub FileEncodingNotification(bytesTotal As Long, bytesDone As Long)
              Console.Write("Encoding: {0:P}\r", Math.Round(CDbl(bytesDone) / CDbl(bytesTotal), 2))
            End Sub
            </code>
            Encodes OGG input to an MP3 output using EncoderLAME (with the 'standard' preset):
            <code lang="C#">
            EncoderLAME enc = new EncoderLAME(0);
            enc.LAME_PresetName = "standard";
            BaseEncoder.EncodeFile("test.ogg", null, enc, null, true, false);
            </code>
            <code lang="VB">
            Dim enc As New EncoderLAME(0)
            enc.LAME_PresetName = "standard"
            BaseEncoder.EncodeFile("test.ogg", Nothing, enc, Nothing, True, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)">
            <summary>
            Encodes a given input file to a given output file using the specified encoder.
            </summary>
            <param name="encoder">The encoder to be used (make sure you set all the parameter members of the encoder before).</param>
            <param name="proc">An optional callback procedure which should be called during the encoding process in order to inform you about the encoding progress (<see langword="null"/> = no notifcation).</param>
            <param name="overwriteOutput">Set to <see langword="true"/>, if you want to force to overwrite any already existing output file (will delete the existing file). If set to <see langword="false"/> and the output file already exists the method will fail, but the existing file will not be deleted.</param>
            <param name="deleteInput">Set to <see langword="true"/>, if you want to delete the input file after the encoding has been successfully completed.</param>
            <returns>Returns <see langword="true"/>, if the input file was successfully encoded. Returns <see langword="false"/> if any error occured.</returns>
            <remarks>The InputFile and OutputFile will be taken from the encoder settings!
            <para>The method will use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> in order to open the input file for encoding. 16-bit will always be used here to read the inputFile.
            So any file format supported by BASS or the BASS plugin system might be used.</para>
            </remarks>
            <exception cref="T:System.IO.IOException">The output file already exists (only raised when the <paramref name="overwriteOutput"/> is not used).</exception>
            <example>
            Encodes a file using the EncoderWMA (using CBR at 128 kbps Pro):
            <code lang="C#">
            EncoderWMA wma = new EncoderWMA(0);
            wma.InputFile = "testin.ogg";
            wma.OutputFile = "testout.wma";
            wma.WMA_Bitrate = 128;
            wma.WMA_UsePro = true;
            BaseEncoder.EncodeFile(wma, new BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), true, false);
            
            public void FileEncodingNotification(long bytesTotal, long bytesDone)
            {
            	Console.Write("Encoding: {0:P}\r", Math.Round((double)bytesDone/(double)bytesTotal, 2));
            }
            </code>
            <code lang="VB">
            Dim wma As New EncoderWMA(0)
            wma.InputFile = "testin.ogg"
            wma.OutputFile = "testout.wma"
            wma.WMA_Bitrate = 128
            wma.WMA_UsePro = True
            BaseEncoder.EncodeFile(wma, New BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), True, False)
            
            Public Sub FileEncodingNotification(bytesTotal As Long, bytesDone As Long)
              Console.Write("Encoding: {0:P}\r", Math.Round(CDbl(bytesDone) / CDbl(bytesTotal), 2))
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Encodes a given input file to a given output file using the specified encoder.
            </summary>
            <param name="inputFile">The input filename to encode (must exist).</param>
            <param name="outputFile">The target output filename (if <see langword="null"/>, the filename will be composed by changing the file extension to the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.DefaultOutputExtension"/>).</param>
            <param name="encoder">The encoder to be used (make sure you set all the parameter members of the encoder before).</param>
            <param name="proc">An optional callback procedure which should be called during the encoding process in order to inform you about the encoding progress (<see langword="null"/> = no notifcation).</param>
            <param name="overwriteOutput">Set to <see langword="true"/>, if you want to force to overwrite any already existing output file (will delete the existing file). If set to <see langword="false"/> and the output file already exists the method will fail, but the existing file will not be deleted.</param>
            <param name="deleteInput">Set to <see langword="true"/>, if you want to delete the input file after the encoding has been successfully completed.</param>
            <param name="updateTags">Set to <see langword="true"/>, if you want to use the TAGs from the input file and write them also to the output file. <see langword="false"/> will write the output without any TAGs.</param>
            <returns>Returns <see langword="true"/>, if the input file was successfully encoded. Returns <see langword="false"/> if any error occured.</returns>
            <remarks>The method will use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> in order to open the input file for encoding. 16-bit will always be used here to read the inputFile.
            So any file format supported by BASS or the BASS plugin system might be used.
            </remarks>
            <exception cref="T:System.IO.IOException">The output file already exists (only raised when the <paramref name="overwriteOutput"/> is not used).</exception>
            <example>
            Re-Encodes an OGG file to MP3 using the EncoderLAME (no notification, but copying the TAGs):
            <code lang="C#">
            EncoderLAME lame = new EncoderLAME(0);
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_192;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            lame.TAGs = BassTags.BASS_TAG_GetFromFile("testin.ogg", true, false);;
            BaseEncoder.EncodeFile("testin.ogg", "testout.mp3", lame, null, true, false, true);
            </code>
            <code lang="VB">
            Dim lame As New EncoderLAME(0)
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_192)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            lame.TAGs = BassTags.BASS_TAG_GetFromFile("testin.ogg", True, False)
            BaseEncoder.EncodeFile("testin.ogg", "testout.mp3", lame, Nothing, True, False, True)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Encodes a given input file to a given output file using the specified encoder.
            </summary>
            <param name="encoder">The encoder to be used (make sure you set all the parameter members of the encoder before).</param>
            <param name="proc">An optional callback procedure which should be called during the encoding process in order to inform you about the encoding progress (<see langword="null"/> = no notifcation).</param>
            <param name="overwriteOutput">Set to <see langword="true"/>, if you want to force to overwrite any already existing output file (will delete the existing file). If set to <see langword="false"/> and the output file already exists the method will fail, but the existing file will not be deleted.</param>
            <param name="deleteInput">Set to <see langword="true"/>, if you want to delete the input file after the encoding has been successfully completed.</param>
            <param name="updateTags">Set to <see langword="true"/>, if you want to use the TAGs from the input file and write them also to the output file. <see langword="false"/> will write the output without any TAGs.</param>
            <returns>Returns <see langword="true"/>, if the input file was successfully encoded. Returns <see langword="false"/> if any error occured.</returns>
            <remarks>The InputFile and OutputFile will be taken from the encoder settings!
            <para>The method will use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> in order to open the input file for encoding. 16-bit will always be used here to read the inputFile.
            So any file format supported by BASS or the BASS plugin system might be used.</para>
            </remarks>
            <exception cref="T:System.IO.IOException">The output file already exists (only raised when the <paramref name="overwriteOutput"/> is not used).</exception>
            <example>
            Re-Encodes an OGG file to MP3 using the EncoderLAME (manual tagging):
            <code lang="C#">
            TAG_INFO tags = new TAG_INFO();
            tags.artist = "The Artist";
            tags.title = "The Title";
            
            EncoderLAME lame = new EncoderLAME(0);
            lame.InputFile = "test.ogg";
            lame.TAGs = tags;
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_192;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            BaseEncoder.EncodeFile(lame, 
                                   new BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), true, false, true);
            
            public void FileEncodingNotification(long bytesTotal, long bytesDone)
            {
            	Console.Write("Encoding: {0:P}\r", Math.Round((double)bytesDone/(double)bytesTotal, 2));
            }
            </code>
            <code lang="VB">
            Dim tags As New TAG_INFO()
            tags.artist = "The Artist"
            tags.title = "The Title"
            
            Dim lame As New EncoderLAME(0)
            lame.InputFile = "test.ogg"
            lame.TAGs = tags
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_192)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            BaseEncoder.EncodeFile(lame, 
                                   New BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), True, False, True)
            
            Public Sub FileEncodingNotification(bytesTotal As Long, bytesDone As Long)
              Console.Write("Encoding: {0:P}\r", Math.Round(CDbl(bytesDone) / CDbl(bytesTotal), 2))
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean,System.Boolean,System.Int64,System.Int64)">
            <summary>
            Encodes a given input file to a given output file using the specified encoder.
            </summary>
            <param name="inputFile">The input filename to encode (must exist).</param>
            <param name="outputFile">The target output filename (if <see langword="null"/>, the filename will be composed by changing the file extension to the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.DefaultOutputExtension"/>).</param>
            <param name="encoder">The encoder to be used (make sure you set all the parameter members of the encoder before).</param>
            <param name="proc">An optional callback procedure which should be called during the encoding process in order to inform you about the encoding progress (<see langword="null"/> = no notifcation).</param>
            <param name="overwriteOutput">Set to <see langword="true"/>, if you want to force to overwrite any already existing output file (will delete the existing file). If set to <see langword="false"/> and the output file already exists the method will fail, but the existing file will not be deleted.</param>
            <param name="deleteInput">Set to <see langword="true"/>, if you want to delete the input file after the encoding has been successfully completed.</param>
            <param name="updateTags">Set to <see langword="true"/>, if you want to use the TAGs from the input file and write them also to the output file. <see langword="false"/> will write the output without any TAGs.</param>
            <param name="fromPos">Sets the start position in bytes from where to start encoding or -1 to encode from the beginning.</param>
            <param name="toPos">Sets the end position in bytes til where want to encode or -1 to encode til the end. toPos must be greater than fromPos!</param>
            <returns>Returns <see langword="true"/>, if the input file was successfully encoded. Returns <see langword="false"/> if any error occured.</returns>
            <remarks>The method will use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> in order to open the input file for encoding. 16-bit will always be used here to read the inputFile.
            So any file format supported by BASS or the BASS plugin system might be used.
            </remarks>
            <exception cref="T:System.IO.IOException">The output file already exists (only raised when the <paramref name="overwriteOutput"/> is not used).</exception>
            <example>
            Re-Encodes an OGG file partially to MP3 using the EncoderLAME:
            <code lang="C#">
            EncoderLAME lame = new EncoderLAME(0);
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_192;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            BaseEncoder.EncodeFile("testin.ogg", "testout.mp3", lame, null, true, false, true, 4096, 61440);
            </code>
            <code lang="VB">
            Dim lame As New EncoderLAME(0)
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_192)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            BaseEncoder.EncodeFile("testin.ogg", "testout.mp3", lame, Nothing, True, False, True, 4096, 61440)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean,System.Boolean,System.Int64,System.Int64)">
            <summary>
            Encodes a given input file to a given output file using the specified encoder.
            </summary>
            <param name="encoder">The encoder to be used (make sure you set all the parameter members of the encoder before).</param>
            <param name="proc">An optional callback procedure which should be called during the encoding process in order to inform you about the encoding progress (<see langword="null"/> = no notifcation).</param>
            <param name="overwriteOutput">Set to <see langword="true"/>, if you want to force to overwrite any already existing output file (will delete the existing file). If set to <see langword="false"/> and the output file already exists the method will fail, but the existing file will not be deleted.</param>
            <param name="deleteInput">Set to <see langword="true"/>, if you want to delete the input file after the encoding has been successfully completed.</param>
            <param name="updateTags">Set to <see langword="true"/>, if you want to use the TAGs from the input file and write them also to the output file. <see langword="false"/> will write the output without any TAGs.</param>
            <param name="fromPos">Sets the start position in bytes from where to start encoding or -1 to encode from the beginning.</param>
            <param name="toPos">Sets the end position in bytes til where want to encode or -1 to encode til the end. toPos must be greater than fromPos!</param>
            <returns>Returns <see langword="true"/>, if the input file was successfully encoded. Returns <see langword="false"/> if any error occured.</returns>
            <remarks>The InputFile and OutputFile will be taken from the encoder settings!
            <para>The method will use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> in order to open the input file for encoding. 16-bit will always be used here to read the inputFile.
            So any file format supported by BASS or the BASS plugin system might be used.</para>
            </remarks>
            <exception cref="T:System.IO.IOException">The output file already exists (only raised when the <paramref name="overwriteOutput"/> is not used).</exception>
            <example>
            Re-Encodes an OGG file partially to MP3 using the EncoderLAME:
            <code lang="C#">
            EncoderLAME lame = new EncoderLAME(0);
            lame.InputFile = "testin.ogg";
            lame.OutputFile = "testout.mp3";
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_192;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            BaseEncoder.EncodeFile(lame, 
                                   new BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), 
                                   true, false, true, 4096, 61440);
            
            public void FileEncodingNotification(long bytesTotal, long bytesDone)
            {
            	Console.Write("Encoding: {0:P}\r", Math.Round((double)bytesDone/(double)bytesTotal, 2));
            }
            </code>
            <code lang="VB">
            Dim lame As New EncoderLAME(0)
            lame.InputFile = "testin.ogg"
            lame.OutputFile = "testout.mp3"
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_192)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            BaseEncoder.EncodeFile(lame, 
                                   New BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), 
                                   True, False, True, 4096, 61440)
            
            Public Sub FileEncodingNotification(bytesTotal As Long, bytesDone As Long)
              Console.Write("Encoding: {0:P}\r", Math.Round(CDbl(bytesDone) / CDbl(bytesTotal), 2))
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean,System.Boolean,System.Double,System.Double)">
            <summary>
            Encodes a given input file to a given output file using the specified encoder.
            </summary>
            <param name="inputFile">The input filename to encode (must exist).</param>
            <param name="outputFile">The target output filename (if <see langword="null"/>, the filename will be composed by changing the file extension to the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.DefaultOutputExtension"/>).</param>
            <param name="encoder">The encoder to be used (make sure you set all the parameter members of the encoder before).</param>
            <param name="proc">An optional callback procedure which should be called during the encoding process in order to inform you about the encoding progress (<see langword="null"/> = no notifcation).</param>
            <param name="overwriteOutput">Set to <see langword="true"/>, if you want to force to overwrite any already existing output file (will delete the existing file). If set to <see langword="false"/> and the output file already exists the method will fail, but the existing file will not be deleted.</param>
            <param name="deleteInput">Set to <see langword="true"/>, if you want to delete the input file after the encoding has been successfully completed.</param>
            <param name="updateTags">Set to <see langword="true"/>, if you want to use the TAGs from the input file and write them also to the output file. <see langword="false"/> will write the output without any TAGs.</param>
            <param name="fromPos">Sets the start position in seconds (incl. fractions) from where to start encoding or -1.0f to encode from the beginning.</param>
            <param name="toPos">Sets the end position in seconds (incl. fractions) til where want to encode or -1.0f to encode til the end. toPos must be greater than fromPos!</param>
            <returns>Returns <see langword="true"/>, if the input file was successfully encoded. Returns <see langword="false"/> if any error occured.</returns>
            <remarks>The method will use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> in order to open the input file for encoding. 16-bit will always be used here to read the inputFile.
            So any file format supported by BASS or the BASS plugin system might be used.
            </remarks>
            <exception cref="T:System.IO.IOException">The output file already exists (only raised when the <paramref name="overwriteOutput"/> is not used).</exception>
            <example>
            Re-Encodes an OGG file partially to MP3 using the EncoderLAME:
            <code lang="C#">
            EncoderLAME lame = new EncoderLAME(0);
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_192;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            BaseEncoder.EncodeFile("testin.ogg", "testout.mp3", lame, 
                                   new BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), 
                                   true, false, true, 5.1f, 25.3f);
            
            public void FileEncodingNotification(long bytesTotal, long bytesDone)
            {
            	Console.Write("Encoding: {0:P}\r", Math.Round((double)bytesDone/(double)bytesTotal, 2));
            }
            </code>
            <code lang="VB">
            Dim lame As New EncoderLAME(0)
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_192)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            BaseEncoder.EncodeFile("testin.ogg", "testout.mp3", lame, 
                                   New BaseEncoder.ENCODEFILEPROC(FileEncodingNotification),
                                   True, False, True, 5.1F, 25.3F)
            
            Public Sub FileEncodingNotification(bytesTotal As Long, bytesDone As Long)
              Console.Write("Encoding: {0:P}\r", Math.Round(CDbl(bytesDone) / CDbl(bytesTotal), 2))
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean,System.Boolean,System.Double,System.Double)">
            <summary>
            Encodes a given input file to a given output file using the specified encoder.
            </summary>
            <param name="encoder">The encoder to be used (make sure you set all the parameter members of the encoder before).</param>
            <param name="proc">An optional callback procedure which should be called during the encoding process in order to inform you about the encoding progress (<see langword="null"/> = no notifcation).</param>
            <param name="overwriteOutput">Set to <see langword="true"/>, if you want to force to overwrite any already existing output file (will delete the existing file). If set to <see langword="false"/> and the output file already exists the method will fail, but the existing file will not be deleted.</param>
            <param name="deleteInput">Set to <see langword="true"/>, if you want to delete the input file after the encoding has been successfully completed.</param>
            <param name="updateTags">Set to <see langword="true"/>, if you want to use the TAGs from the input file and write them also to the output file. <see langword="false"/> will write the output without any TAGs.</param>
            <param name="fromPos">Sets the start position in seconds (incl. fractions) from where to start encoding or -1.0f to encode from the beginning.</param>
            <param name="toPos">Sets the end position in seconds (incl. fractions) til where want to encode or -1.0f to encode til the end. toPos must be greater than fromPos!</param>
            <returns>Returns <see langword="true"/>, if the input file was successfully encoded. Returns <see langword="false"/> if any error occured.</returns>
            <remarks>The InputFile and OutputFile will be taken from the encoder settings!
            <para>The method will use <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> in order to open the input file for encoding. 16-bit will always be used here to read the inputFile.
            So any file format supported by BASS or the BASS plugin system might be used.</para>
            </remarks>
            <exception cref="T:System.IO.IOException">The output file already exists (only raised when the <paramref name="overwriteOutput"/> is not used).</exception>
            <example>
            Re-Encodes an OGG file to MP3 using the EncoderLAME partially:
            <code lang="C#">
            EncoderLAME lame = new EncoderLAME(0);
            lame.InputFile = "testin.ogg";
            lame.OutputFile = "testout.mp3";
            lame.LAME_Bitrate = (int)EncoderLAME.BITRATE.kbps_192;
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default;
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality;
            BaseEncoder.EncodeFile(lame, 
                                   new BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), 
                                   true, false, true,
                                   5.1f, 25.3f);
            
            public void FileEncodingNotification(long bytesTotal, long bytesDone)
            {
            	Console.Write("Encoding: {0:P}\r", Math.Round((double)bytesDone/(double)bytesTotal, 2));
            }
            </code>
            <code lang="VB">
            Dim lame As New EncoderLAME(0)
            lame.InputFile = "testin.ogg"
            lame.OutputFile = "testout.mp3"
            lame.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_192)
            lame.LAME_Mode = EncoderLAME.LAMEMode.Default
            lame.LAME_Quality = EncoderLAME.LAMEQuality.Quality
            BaseEncoder.EncodeFile(lame, 
                                   New BaseEncoder.ENCODEFILEPROC(FileEncodingNotification), 
                                   True, False, True, 5.1F, 25.3F)
            
            Public Sub FileEncodingNotification(bytesTotal As Long, bytesDone As Long)
              Console.Write("Encoding: {0:P}\r", Math.Round(CDbl(bytesDone) / CDbl(bytesTotal), 2))
            End Sub
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderACM">
            <summary>
            Encoder class implementation for the Windows Audio Compression Manager using <see cref="N:Un4seen.Bass.AddOn.Enc"/>.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WAV"/> encoder type (even if other types might be more propper).
            <para>Since Windows ACM does support 8-, 16-, and 32-bit(IEEE float) sample data as input, no BASS_ENCODE_FP_ flag will be used.</para>
            <para>Make sure to set the ACM_xxx flags before calling <see cref="M:Un4seen.Bass.Misc.EncoderACM.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderACM.#ctor(System.Int32)">
            <summary>
            Creates an instance of a Windows ACM implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements ACM encoding.
            <pata>This encoder might be used for streaming, since it does support STDOUT, however make sure to select an ACM codec matching your <see cref="T:Un4seen.Bass.Misc.StreamingServer"/>!</pata>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderACM.EncoderExists">
            <summary>
            This property always return <see langword="true"/>, since ACM should be installed on every Windows platform.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderACM.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>E.g. returns "Audio Compression Manager (BASS_CTYPE_STREAM_WAV)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderACM.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here the <see cref="F:Un4seen.Bass.Misc.EncoderACM.ACM_EncoderType"/> value is returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderACM.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (e.g. ".wav"). Here the <see cref="F:Un4seen.Bass.Misc.EncoderACM.ACM_DefaultOutputExtension"/> value is returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderACM.SupportsSTDOUT">
            <summary>
            ACM does implement STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>This encoder might be used for streaming, since it does support STDOUT. 
            However, the selected ACM codec must match the <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> implementation!</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderACM.EncoderCommandLine">
            <summary>
            Returns an empty string, since ACM does not use any command-line tool, but instead directly used <see cref="N:Un4seen.Bass.AddOn.Enc"/>.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderACM.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>This implementation evaluates the <see cref="F:Un4seen.Bass.AddOn.Enc.ACMFORMAT.waveformatex"/> structure (nAvgBytesPerSec) in order to calculate the effective bitrate.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderACM.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual ACM encoder. 
            </summary>
            <param name="proc">Optional callback function to receive the encoded data (only valid, if <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>)... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_StartACM(System.Int32,Un4seen.Bass.AddOn.Enc.ACMFORMAT,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle"/>.
            <para>If you have specified a file name for <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> (instead of <see langword="null"/>), a default stream using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> will be created internally and all it's data will immediately be encoded (meaning the <paramref name="paused"/> flag will have no effect).</para>
            <para>After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderACM.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderACM.SaveCodec(System.String)">
            <summary>
            Saves the current <see cref="F:Un4seen.Bass.Misc.EncoderACM.ACM_Codec"/> to a file.
            </summary>
            <param name="acmFile">The fully qualified file name and path where to save the <see cref="F:Un4seen.Bass.Misc.EncoderACM.ACM_Codec"/>.</param>
            <returns>Returns <see langword="true"/> on success - else <see langword="false"/> will be returned (e.g. <paramref name="acmFile"/> is not specified or can not be accessed).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderACM.LoadCodec(System.String)">
            <summary>
            Loads the <see cref="F:Un4seen.Bass.Misc.EncoderACM.ACM_Codec"/> from a file.
            </summary>
            <param name="acmFile">The fully qualified file name and path from where to load the <see cref="F:Un4seen.Bass.Misc.EncoderACM.ACM_Codec"/>.</param>
            <returns>Returns <see langword="true"/> on success - else <see langword="false"/> will be returned (e.g. <paramref name="acmFile"/> is not specified, can not be accessed or is invalid).</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderACM.ACM_Codec">
            <summary>
            Gets or Sets the ACM codec to be used.
            </summary>
            <remarks>By default a standard WAVE_FORMAT_PCM (16-bit, stereo, 44.1kHz) ACM codec is selected.
            <para>You might modify the <see cref="F:Un4seen.Bass.AddOn.Enc.ACMFORMAT.waveformatex"/> members in order to change a default WAVE_FORMAT_PCM codec (e.g. change the samplerate or bitwidth).</para>
            <para>In order to load an already defined ACM codec format, make use of the <see cref="M:Un4seen.Bass.AddOn.Enc.ACMFORMAT.LoadFromFile(System.String)"/> method. 
            For more details see the ACM documentation: <see cref="T:Un4seen.Bass.AddOn.Enc.ACMFORMAT"/> and <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_GetACMFormat(System.Int32,System.IntPtr,System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSACMFormat)"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderACM.ACM_WriteWaveHeader">
            <summary>
            If set, a WAVE header and the ACM codec content will be written to the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> (default is <see langword="true"/>).
            </summary>
            <remarks>This is generally required for the file to be playable, but in some cases (a Non-Wave ACM codec was selected, e.g. MP3) this is not wanted.
            So set this property to <see langword="false"/> for all Non-Wave ACM codecs.
            <para>Note: This property will only be evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderACM.ACM_EncoderType"/> is set to BASS_CTYPE_STREAM_WAV and the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is not set to <see langword="null"/>.
            If the <see cref="F:Un4seen.Bass.Misc.EncoderACM.ACM_EncoderType"/> is not set to BASS_CTYPE_STREAM_WAV or the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>, a WAVE header will never be written.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderACM.ACM_EncoderType">
            <summary>
            Gets or Sets the <see cref="T:Un4seen.Bass.BASSChannelType"/> which will be supported by the encoder.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderACM.ACM_DefaultOutputExtension">
            <summary>
            Gets or Sets the default output extension to be used by the encoder (e.g. ".wav").
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderWAV">
            <summary>
            Encoder class implementation for the RIFF WAVE format using raw PCM sample data with no real encoder.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WAV"/> encoder type.
            <para>This format supports 8-, 16- and 32-bit(IEEE float) sample data as input.</para>
            <para>Make sure to set the WAV_xxx and/or BWF_xxx flags before calling <see cref="M:Un4seen.Bass.Misc.EncoderWAV.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>TAG writing is supported by saving appropriate RIFF LIST INFO chunks.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
            <example>
            Manual encoding "File" To "File" in 32-bit:
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                              BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            EncoderWAV w = new EncoderWAV(stream);
            w.InputFile = null;
            w.OutputFile = "test.wav";  // will be a 32-bit IEEE float WAVE file, since the stream is float
            w.Start(null, IntPtr.Zero, false);
            // do the encoding
            Utils.DecodeAllData(stream, true);
            w.Stop();
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            Dim w As New EncoderWAV(stream)
            w.InputFile = Nothing
            w.OutputFile = "test.wav" ' will be a 32-bit IEEE float WAVE file, since the stream is float
            w.Start(Nothing, IntPtr.Zero, False)
            ' do the encoding
            Utils.DecodeAllData(stream, True)
            w.Stop()
            </code>
            Manual encoding "File" To "File" in 24-bit:
            <code lang="C#">
            EncoderWAV w = new EncoderWAV(0);
            w.InputFile = "testIn.wav";
            w.OutputFile = "testOut.wav";
            w.WAV_BitsPerSample = 24;
            w.Start(null, IntPtr.Zero, false);
            w.Stop();
            </code>
            <code lang="VB">
            Dim w As New EncoderWAV(0)
            w.InputFile = "testIn.wav"
            w.OutputFile = "testOut.wav"
            w.WAV_BitsPerSample = 24
            w.Start(Nothing, IntPtr.Zero, False)
            w.Stop()
            </code>
            "Recording" To "File" in 16-bit:
            <code lang="C#">
            private RECORDPROC _recProc;
            
            // init your recording device (we use the default device)
            if ( !Bass.BASS_RecordInit(-1) )
              MessageBox.Show(this, "Bass_RecordInit error!" );
            _recProc = new RECORDPROC(RecordingHandler);
            // start recording at 44.1kHz, stereo (paused)
            int recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _recProc, IntPtr.Zero);
            if (recHandle == Bass.FALSE)
              MessageBox.Show(this, "BASS_RecordStart error!" );
            
            // setup the encoder
            EncoderWAV w = new EncoderWAV(recHandle);
            w.InputFile = null;
            w.OutputFile = "testrec.wav";
            w.Start(null, IntPtr.Zero, true); // start encoder paused
            ...
            // now really start recording and encoding
            w.Pause(false);
            Bass.BASS_ChannelPlay(recHandle, false);
            ...
            // your recording will be encoded until you call
            w.Stop();
            
            private bool RecordingHandler(int handle, IntPtr buffer, int length, IntPtr user)
            {
              return true;
            }
            </code>
            <code lang="VB">
            private RECORDPROC _recProc;
            
            ' init your recording device (we use the default device)
            If Not Bass.BASS_RecordInit(- 1) Then
              MessageBox.Show(Me, "Bass_RecordInit error!")
            End If
            _recProc = New RECORDPROC(AddressOf RecordingHandler)
            ' start recording at 44.1kHz, stereo (paused)
            Dim recHandle As Integer = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _recProc, IntPtr.Zero)
            If recHandle = Bass.FALSE Then
              MessageBox.Show(Me, "BASS_RecordStart error!")
            End If 
            
            ' setup the encoder
            Dim w As New EncoderWAV(recHandle)
            w.InputFile = Nothing
            w.OutputFile = "testrec.wav"
            w.Start(Nothing, IntPtr.Zero, True) ' start encoder paused
            ...
            ' now really start recording and encoding
            w.Pause(False)
            Bass.BASS_ChannelPlay(recHandle, False)
            ...
            ' your recording will be encoded until you call
            w.Stop()
            
            Private Function RecordingHandler(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              Return True
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWAV.#ctor(System.Int32)">
            <summary>
            Creates an instance of a RIFF WAVE implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements RIFF WAVE encoding.
            <pata>This encoder might be used for streaming, since it does support STDOUT.</pata>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWAV.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>E.g. returns "RIFF WAVE (BASS_CTYPE_STREAM_WAV)" or "AIFF Encoder (BASS_CTYPE_STREAM_AIFF)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here the <see cref="F:Un4seen.Bass.Misc.EncoderWAV.WAV_EncoderType"/> value is returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (e.g. ".wav"). Here the <see cref="F:Un4seen.Bass.Misc.EncoderWAV.WAV_DefaultOutputExtension"/> value is returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.SupportsSTDOUT">
            <summary>
            WAV does not implement STDOUT, so <see langword="false"/> is always returned.
            </summary>
            <remarks>This encoder might not be used for streaming, since it does not support STDOUT.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.EncoderCommandLine">
            <summary>
            Returns the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/>, since WAV does not use any command-line tool.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>This implementation evaluates the original <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelSampleRate"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelBitwidth"/> and the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelNumChans"/> in order to calculate the effective bitrate.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWAV.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual WAV encoder. 
            </summary>
            <param name="proc">Must be <see langword="null"/> = no callback, since EncoderWAV does not support STDOUT.</param>
            <param name="user">Must be <see cref="F:System.IntPtr.Zero"/>, since EncoderWAV does not support STDOUT.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method uses the BASS_ENCODE_PCM flag to write plain PCM sample data to a file (if an <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> has been specified), without an encoder.
            If no <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> has been specified (<see langword="null"/>) - nothing will actually happen.
            <para>If you have specified a file name for <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> (instead of <see langword="null"/>), a default stream using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> will be created internally and all it's data will immediately be encoded (meaning the <paramref name="paused"/> flag will have no effect),
            else the data from the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle"/> will be encoded.</para>
            <para>After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.Force16Bit">
            <summary>
            Always returns false, since this encoder doesn't supports this flag. The target format can be set via the <see cref="P:Un4seen.Bass.Misc.EncoderWAV.WAV_BitsPerSample"/> property.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWAV.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.WAV_BitsPerSample">
            <summary>
            Gets or Sets the target resolution (number of bits per sample) of the Wave file to create -
            (by default the original resolution will be used).
            </summary>
            <remarks>This property is only evaluated, if an <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> has been specified or the BASS_CONFIG_FLOATDSP option is set!
            NOTE: In all other cases the original resolution will be used!
            <para>This property should be either 8, 16, 24 or 32.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.WAV_Use32BitInteger">
            <summary>
            Gets or Sets, if 32bit integer (instead of 32bit IEEE float) should be used when setting <see cref="P:Un4seen.Bass.Misc.EncoderWAV.WAV_BitsPerSample"/> to 32 (default is <see langword="false"/>)?
            </summary>
            <remarks>When seeting this property to <see langword="true"/> and setting the <see cref="P:Un4seen.Bass.Misc.EncoderWAV.WAV_BitsPerSample"/> property to 32, the 32bit integer wave format is used - 
            else the 32bit IEEE float is used as the default 32bit format.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.WAV_AddRiffInfo">
            <summary>
            Gets or Sets, if a RIFF INFO LIST chunk should be written to the file (default is <see langword="false"/>)?
            </summary>
            <remarks>The presense of a <see cref="P:Un4seen.Bass.Misc.BaseEncoder.TAGs"/> structure is required to write the RIFF INFO LIST chunk to the file.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.WAV_UseAIFF">
            <summary>
            Gets or Sets, if the AIFF format should be used instead of the WAVE format (default is <see langword="false"/>)?
            </summary>
            <remarks>The AIFF format doesn't support the RIFF INFO or BWF options, but its format is compatible on Windows and Mac.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.BWF_UseRF64">
            <summary>
            Gets or Sets, if a BWF RF64 WAVE header should be used instead of a regular WAVE header (default is <see langword="false"/>)?
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.BWF_AddBEXT">
            <summary>
            Gets or Sets, if a BWF BEXT chunk should be written to the file (default is <see langword="false"/>)?
            </summary>
            <remarks>The presense of a <see cref="P:Un4seen.Bass.Misc.BaseEncoder.TAGs"/> structure is required to write the BEXT chunk to the file.
            <para>When writing a BWF BEXT chunk to the file, the native tags with the prefix BWF are being used.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWAV.BWF_AddCART">
            <summary>
            Gets or Sets, if a BWF CART chunk should be written to the file (default is <see langword="false"/>)?
            </summary>
            <remarks>The presense of a <see cref="P:Un4seen.Bass.Misc.BaseEncoder.TAGs"/> structure is required to write the CART chunk to the file.
            <para>When writing a BWF BEXT chunk to the file, the native tags with the prefix BWF are being used.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWAV.WAV_EncoderType">
            <summary>
            Gets or Sets the <see cref="T:Un4seen.Bass.BASSChannelType"/> which will be supported by the encoder.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWAV.WAV_DefaultOutputExtension">
            <summary>
            Gets or Sets the default output extension to be used by the encoder (e.g. ".wav").
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderAIFF">
            <summary>
            Encoder class implementation for the Audio Interchange File Format (AIFF) using raw PCM sample data with no real encoder.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AIFF"/> encoder type.
            <para>This format supports 8-, 16- and 32-bit(IEEE float) sample data as input.</para>
            <para>Make sure to set the AIFF_xxx flags before calling <see cref="M:Un4seen.Bass.Misc.EncoderAIFF.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>TAG writing is not supported.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
            <example>
            Manual encoding "File" To "File" in 32-bit:
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                              BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            EncoderAIFF a = new EncoderAIFF(stream);
            a.InputFile = null;
            a.OutputFile = "test.aif";  // will be a 32-bit IEEE float file, since the stream is float
            a.Start(null, IntPtr.Zero, false);
            // do the encoding
            Utils.DecodeAllData(stream, true);
            a.Stop();
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            Dim a As New EncoderAIFF(stream)
            a.InputFile = Nothing
            a.OutputFile = "test.aif" ' will be a 32-bit IEEE float file, since the stream is float
            a.Start(Nothing, IntPtr.Zero, False)
            ' do the encoding
            Utils.DecodeAllData(stream, True)
            a.Stop()
            </code>
            Manual encoding "File" To "File" in 24-bit:
            <code lang="C#">
            EncoderAIFF w = new EncoderAIFF(0);
            a.InputFile = "testIn.wav";
            a.OutputFile = "testOut.aif";
            a.WAV_BitsPerSample = 24;
            a.Start(null, IntPtr.Zero, false);
            a.Stop();
            </code>
            <code lang="VB">
            Dim a As New EncoderAIFF(0)
            a.InputFile = "testIn.wav"
            a.OutputFile = "testOut.aif"
            a.WAV_BitsPerSample = 24
            a.Start(Nothing, IntPtr.Zero, False)
            a.Stop()
            </code>
            "Recording" To "File" in 16-bit:
            <code lang="C#">
            private RECORDPROC _recProc;
            
            // init your recording device (we use the default device)
            if ( !Bass.BASS_RecordInit(-1) )
              MessageBox.Show(this, "Bass_RecordInit error!" );
            _recProc = new RECORDPROC(RecordingHandler);
            // start recording at 44.1kHz, stereo (paused)
            int recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _recProc, IntPtr.Zero);
            if (recHandle == Bass.FALSE)
              MessageBox.Show(this, "BASS_RecordStart error!" );
            
            // setup the encoder
            EncoderAIFF a = new EncoderAIFF(recHandle);
            a.InputFile = null;
            a.OutputFile = "testrec.aif";
            a.Start(null, IntPtr.Zero, true); // start encoder paused
            ...
            // now really start recording and encoding
            a.Pause(false);
            Bass.BASS_ChannelPlay(recHandle, false);
            ...
            // your recording will be encoded until you call
            a.Stop();
            
            private bool RecordingHandler(int handle, IntPtr buffer, int length, IntPtr user)
            {
              return true;
            }
            </code>
            <code lang="VB">
            private RECORDPROC _recProc;
            
            ' init your recording device (we use the default device)
            If Not Bass.BASS_RecordInit(- 1) Then
              MessageBox.Show(Me, "Bass_RecordInit error!")
            End If
            _recProc = New RECORDPROC(AddressOf RecordingHandler)
            ' start recording at 44.1kHz, stereo (paused)
            Dim recHandle As Integer = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _recProc, IntPtr.Zero)
            If recHandle = Bass.FALSE Then
              MessageBox.Show(Me, "BASS_RecordStart error!")
            End If 
            
            ' setup the encoder
            Dim a As New EncoderAIFF(recHandle)
            a.InputFile = Nothing
            a.OutputFile = "testrec.aif"
            a.Start(Nothing, IntPtr.Zero, True) ' start encoder paused
            ...
            ' now really start recording and encoding
            a.Pause(False)
            Bass.BASS_ChannelPlay(recHandle, False)
            ...
            ' your recording will be encoded until you call
            a.Stop()
            
            Private Function RecordingHandler(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              Return True
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderAIFF.#ctor(System.Int32)">
            <summary>
            Creates an instance of a Audio Interchange File Format (AIFF) implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements Audio Interchange File Format (AIFF) encoding.
            <pata>This encoder might be used for streaming, since it does support STDOUT.</pata>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderAIFF.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>E.g. returns "AIFF Encoder (BASS_CTYPE_STREAM_AIFF)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderAIFF.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here the <see cref="F:Un4seen.Bass.Misc.EncoderAIFF.AIFF_EncoderType"/> value is returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderAIFF.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (e.g. ".aif"). Here the <see cref="F:Un4seen.Bass.Misc.EncoderAIFF.AIFF_DefaultOutputExtension"/> value is returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderAIFF.SupportsSTDOUT">
            <summary>
            AIFF does not implement STDOUT, so <see langword="false"/> is always returned.
            </summary>
            <remarks>This encoder might not be used for streaming, since it does not support STDOUT.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderAIFF.EncoderCommandLine">
            <summary>
            Returns the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/>, since WAV does not use any command-line tool.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderAIFF.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>This implementation evaluates the original <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelSampleRate"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelBitwidth"/> and the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelNumChans"/> in order to calculate the effective bitrate.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderAIFF.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual AIFF encoder. 
            </summary>
            <param name="proc">Must be <see langword="null"/> = no callback, since EncoderAIFF does not support STDOUT.</param>
            <param name="user">Must be <see cref="F:System.IntPtr.Zero"/>, since EncoderAIFF does not support STDOUT.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method uses the BASS_ENCODE_AIFF flag to write plain PCM sample data to a file (if an <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> has been specified), without an encoder.
            If no <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> has been specified (<see langword="null"/>) - nothing will actually happen.
            <para>If you have specified a file name for <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> (instead of <see langword="null"/>), a default stream using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> will be created internally and all it's data will immediately be encoded (meaning the <paramref name="paused"/> flag will have no effect),
            else the data from the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelHandle"/> will be encoded.</para>
            <para>After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderAIFF.Force16Bit">
            <summary>
            Always returns false, since this encoder doesn't supports this flag. The target format can be set via the <see cref="P:Un4seen.Bass.Misc.EncoderAIFF.AIFF_BitsPerSample"/> property.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderAIFF.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderAIFF.AIFF_BitsPerSample">
            <summary>
            Gets or Sets the target resolution (number of bits per sample) of the AIFF file to create -
            (by default the original resolution will be used).
            </summary>
            <remarks>This property is only evaluated, if an <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> has been specified or the BASS_CONFIG_FLOATDSP option is set!
            NOTE: In all other cases the original resolution will be used!
            <para>This property should be either 8, 16, 24 or 32.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderAIFF.AIFF_Use32BitInteger">
            <summary>
            Gets or Sets, if 32bit integer (instead of 32bit IEEE float) should be used when setting <see cref="P:Un4seen.Bass.Misc.EncoderAIFF.AIFF_BitsPerSample"/> to 32 (default is <see langword="false"/>)?
            </summary>
            <remarks>When seeting this property to <see langword="true"/> and setting the <see cref="P:Un4seen.Bass.Misc.EncoderAIFF.AIFF_BitsPerSample"/> property to 32, the 32bit integer format is used - 
            else the 32bit IEEE float is used as the default 32bit format.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderAIFF.AIFF_EncoderType">
            <summary>
            Gets or Sets the <see cref="T:Un4seen.Bass.BASSChannelType"/> which will be supported by the encoder.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderAIFF.AIFF_DefaultOutputExtension">
            <summary>
            Gets or Sets the default output extension to be used by the encoder (e.g. ".aif").
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderCMDLN">
            <summary>
            Encoder class implementation for any generic Command-Line encoder tool using <see cref="N:Un4seen.Bass.AddOn.Enc"/>.
            </summary>
            <remarks>This class uses by default the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WAV"/> encoder type (even if other types might be more propper) - so make sure to set the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_EncoderType"/> property accordingly.
            Also the <see cref="P:Un4seen.Bass.Misc.EncoderCMDLN.DefaultOutputExtension"/> is by default set to ".wav" and needs to be changed if needed (see all CMDLN_xxx properties).
            <para>Since this is a generic implementation this encoder will try to use either 32-bit float, 24-bit, 16-bit or 8-bit sample data (depending on the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.Force16Bit"/> and the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseFP_32BIT"/> or <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseFP_24BIT"/> property).
            The <see cref="F:Un4seen.Bass.AddOn.Enc.BASSEncode.BASS_ENCODE_NOHEAD"/> flags will be used, if you set the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseNOHEAD"/> flag.
            You MUST set the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_Executable"/> property to the executable name you want to use. Also make sure that the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> and the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/> are configured accordingly.
            The encoder will receive, raw PCM sample data in little endian.</para>
            <para>Make sure to set the CMDLN_xxx flags before calling <see cref="M:Un4seen.Bass.Misc.EncoderCMDLN.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderCMDLN.#ctor(System.Int32)">
            <summary>
            Creates an instance of the generic command-line encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements generic command-line encoding.
            <pata>This encoder might be used for streaming only if the <see cref="P:Un4seen.Bass.Misc.EncoderCMDLN.SupportsSTDOUT"/> property is set to true and the underlying executable does support STDOUT as well - however make sure to select a command-line tool matching your <see cref="T:Un4seen.Bass.Misc.StreamingServer"/>!</pata>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderCMDLN.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the specifiec command-line tool is availabel - else <see langword="false"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderCMDLN.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Eg.: returns "Generic Command-Line Encoder".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderCMDLN.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_EncoderType"/> value is returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderCMDLN.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (e.g. ".wav"). Here the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_DefaultOutputExtension"/> value is returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderCMDLN.SupportsSTDOUT">
            <summary>
            A command-line encoder might implement STDOUT, so here the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_SupportsSTDOUT"/> value is returned.
            </summary>
            <remarks>This encoder might be used for streaming, since it might support STDOUT. 
            However, the selected command-line encoder must match the <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> implementation!</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderCMDLN.EncoderCommandLine">
            <summary>
            Returns the specified command-line string to use. Depending on the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseVBR"/> property the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/> or the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> value is evaluated and all contained macros are replaced.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderCMDLN.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output. Here the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_Bitrate"/> value is returned.
            </summary>
            <remarks>The effective bitrate value is only needed, if the encoder is used for a <see cref="T:Un4seen.Bass.Misc.StreamingServer"/>. This member otherwise will never be really used.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderCMDLN.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual command-line encoder. 
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            </summary>
            <param name="proc">Optional callback function to receive the encoded data (only valid, if <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>)... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally!
            <para>After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderCMDLN.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseNOHEAD">
            <summary>
            Gets or Sets if the encoder should be started using the NOHEAD flag.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseFP_32BIT">
            <summary>
            Gets or Sets if the encoder should be started using the FP_32BIT flag.
            </summary>
            <remarks>The <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseFP_24BIT"/> flag will only be evaluated, if this flag is not set (<see langword="false"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseFP_24BIT">
            <summary>
            Gets or Sets if the encoder should be started using the FP_24BIT flag.
            </summary>
            <remarks>If the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseFP_32BIT"/> flag is set (<see langword="true"/>) this flag will be ignored.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_Executable">
            <summary>
            Gets or Sets the command-line executable name to be used with the encoder (not containing the path, e.g. "encoder.exe").
            </summary>
            <remarks>You MUST set this parameter!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_ParamSTDOUT">
            <summary>
            Gets or sets the ${output} parameter to be used with STDOUT.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_ParamSTDIN">
            <summary>
            Gets or sets the ${input} parameter to be used with STDIN.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_EncoderType">
            <summary>
            Gets or Sets the <see cref="T:Un4seen.Bass.BASSChannelType"/> which will be supported by the encoder.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_DefaultOutputExtension">
            <summary>
            Gets or Sets the default output extension to be used by the encoder (e.g. ".mp3").
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_SupportsSTDOUT">
            <summary>
            Gets or Sets if the encoder supports output of the encoded data to STDOUT.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseVBR">
            <summary>
            Gets or Sets, if the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> or the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/> command-line string should be used.
            </summary>
            <remarks></remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString">
            <summary>
            Gets or Sets the constant bitrate (CBR) command-line string to be used with the encoder (not containing the executable to be used, e.g. "-b ${bps} - output.xyz").
            </summary>
            <remarks>This command-line string is used, if <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseVBR"/> is set to <see langword="false"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString">
            <summary>
            Gets or Sets the variable bitrate (VBR) command-line string to be used with the encoder (not containing the executable to be used, e.g. "-b ${bps} - output.xyz").
            </summary>
            <remarks>This command-line string is used, if <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseVBR"/> is set to <see langword="true"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_Bitrate">
            <summary>
            Gets or Sets the effective bitrate (in kbps) for the ${bps} and ${kbps} macro to be used with the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> resp. <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/>.
            </summary>
            <remarks>Only needed when this encoder will be used for a <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> or if you use the ${kbps} or ${bps} macro in <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> or <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_Quality">
            <summary>
            Gets or Sets the ${quality} macro value to be used in the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> resp. <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/>.
            </summary>
            <remarks>Might e.g. contain the encoding quality level to be used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_Mode">
            <summary>
            Gets or Sets the ${mode} macro value to be used in the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> resp. <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/>.
            </summary>
            <remarks>Might e.g. contain the stereo mode (joint-stereo, mono, dual channel, independent stereo etc.) to be used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_Option">
            <summary>
            Gets or Sets the ${option} macro value to be used in the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> resp. <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/>.
            </summary>
            <remarks>Might e.g. contain any other optional value to be used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseA">
            <summary>
            Gets or Sets, if the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UserA"/> or the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UserB"/> macro string should be used.
            </summary>
            <remarks>If set to <see langword="true"/> the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UserA"/> macro value is used - else the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UserB"/> macro value is used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UserA">
            <summary>
            Gets or Sets the ${user} macro value to be used in the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> resp. <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/>.
            </summary>
            <remarks>This is a general purpose macro placeholder, which is only used, if the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseA"/> property is set to <see langword="true"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UserB">
            <summary>
            Gets or Sets the ${user} macro value to be used in the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_CBRString"/> resp. <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_VBRString"/>.
            </summary>
            <remarks>This is a general purpose macro placeholder, which is only used, if the <see cref="F:Un4seen.Bass.Misc.EncoderCMDLN.CMDLN_UseA"/> property is set to <see langword="false"/>.</remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderMP3">
            <summary>
            Encoder class implementation for any generic MP3 command-line encoder tool using <see cref="N:Un4seen.Bass.AddOn.Enc"/>.
            </summary>
            <remarks>This class uses by default the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP3"/> encoder type (<see cref="P:Un4seen.Bass.Misc.BaseEncoder.DefaultOutputExtension"/> is set to ".mp3").
            <para>This encoder is directly derived from <see cref="T:Un4seen.Bass.Misc.EncoderCMDLN"/> - so please take a look there for all other details.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMP3.#ctor(System.Int32)">
            <summary>
            Creates an instance of the generic MP3 command-line encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements generic command-line encoding.
            <pata>This encoder might be used for streaming only if the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.SupportsSTDOUT"/> property is set to true (which is by default the case) and the underlying executable does support STDOUT as well - however make sure to select a command-line tool matching your <see cref="T:Un4seen.Bass.Misc.StreamingServer"/>!</pata>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMP3.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMP3.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Eg.: returns "Generic MP3 Encoder".</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderLAME">
            <summary>
            Encoder class implementation for MP3 encoding using lame.exe.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP3"/> encoder type.
            <para>LAME (lame.exe) must be downloaded separately (e.g. from <a href="http://www.rarewares.org/mp3.html">www.rarewares.org</a>).</para>
            <para>Since lame.exe does not support 32-bit IEEE float sample data as input, the BASS_ENCODE_FP_32BIT will be used for highest quality.
            This will be used, whenever the underlying channel handle is 32-bit float or the BASS_CONFIG_FLOATDSP option has been set.</para>
            <para>Make sure to set the LAME_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderLAME.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderLAME.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderLAME.#ctor(System.Int32)">
            <summary>
            Creates an instance of a LAME encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>LAME implements MP3 encoding (BASS_CTYPE_STREAM_MP3).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderLAME.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "lame.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderLAME.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "LAME Encoder (BASS_CTYPE_STREAM_MP3)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderLAME.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_MP3 is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderLAME.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".mp3").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderLAME.SupportsSTDOUT">
            <summary>
            LAME implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>LAME support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderLAME.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all LAME_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the LAME_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderLAME.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>If you are encoding in CBR (<see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseVBR"/> is set to <see langword="false"/>, default) the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_Bitrate"/> member will be returned.
            <para>If you are encoding in VBR or ABR (<see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseVBR"/> is set to <see langword="true"/>) the average of <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_Bitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_VBRMaxBitrate"/> resp. <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_ABRBitrate"/> will be used.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderLAME.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual LAME encoder. 
            </summary>
            <param name="proc">Optional callback function to receive the encoded data (only valid, if <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>)... <see langword="null"/> = no callback.
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderLAME.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderLAME.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_NOHEAD and BASSEncode.BASS_ENCODE_FP_32BIT flag.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderLAME.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other LAME_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other LAME_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_Mode">
            <summary>
            -m: The encoding mode (stereo, joint stereo, mono etc.).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_Scale">
            <summary>
            --scale: Scale input (multiply PCM data). Set to 1.00 (default) for no scaling.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_PresetName">
            <summary>
            --preset: Preset name must be "medium", "standard", "extreme", "insane" or a value for an average desired bitrate 
            and depending on the value specified, appropriate quality settings will be used.
            </summary>
            <remarks>If a preset name is specified NO other options will be used!
            So make sure to set the preset name to String.Empty, if you want to use any other options.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_Quality">
            <summary>
            -q: Noise shaping and psycho acoustic algorithms (default is Quality).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_ReplayGain">
            <summary>
            --replaygain: ReplayGain analysis (Default is None).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_FreeFormat">
            <summary>
            --freeformat: produce a free format bitstream? (Default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_Bitrate">
            <summary>
            -b:  Constant (or minimum allowed) bitrate in kbps, default 128 kbps.
            </summary>
            <remarks>
            <para>If the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseVBR"/> flag is not set (<see langword="false"/>): This specifies the CBR bitrate.</para>
            <para>If the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseVBR"/> flag is set (<see langword="true"/>): This specifies the minimum allowed VBR bitrate, if <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_LimitVBR"/> is also set.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_TargetSampleRate">
            <summary>
            --resample: target sampling frequency of output (in Hz). Set to 0 (zero) to use automatic resampling (default).
            </summary>
            <remarks>Specify the target sample rate in Hz, e.g. 22050 for 22.05kHz.
            <para>When using this encoder for broadcast streaming it is advised to always set the target samplerate.</para>
            <para>You might use one of the <see cref="T:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE"/> constants here.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_EnforceCBR">
            <summary>
            --cbr: Enforce use of constant bitrate.
            </summary>
            <remarks>Only evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseVBR"/> flag is not set (<see langword="false"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_ABRBitrate">
            <summary>
            --abr: Specify average target bitrate in kbps desired (instead of quality). 
            Set to 0, if this option should be disabled (default).
            </summary>
            <remarks>Only evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseVBR"/> flag is set (<see langword="true"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseVBR">
            <summary>
            Use variable bitrate (VBR) (Default is <see langword="false"/>).
            </summary>
            <remarks>If enabled, the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_VBRQuality"/> or <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_ABRBitrate"/> value will be used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_LimitVBR">
            <summary>
            Use variable bitrate (VBR) limitation (Default is <see langword="false"/>).
            </summary>
            <remarks>If <see langword="true"/>, the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_Bitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_VBRMaxBitrate"/> values will be used as the minimum and maximum allowed VBR bitrate,
            as well as the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_VBREnforceMinBitrate"/> flag will be evaluated.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_VBRQuality">
            <summary>
            -V: Quality setting for VBR (default is VBR_Q4).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_VBRMaxBitrate">
            <summary>
            Specify maximum allowed bitrate in kbps, default 320 kbps.
            </summary>
            <remarks>Only evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_LimitVBR"/> flag is set (<see langword="true"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_VBRDisableTag">
            <summary>
            -t: disable writing VBR LAME Tag? (Default is <see langword="false"/>).
            </summary>
            <remarks>Only evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_UseVBR"/> flag is set (<see langword="true"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_VBREnforceMinBitrate">
            <summary>
            -F: strictly enforce minimum bitrate, for use with players that do not support low bitrate mp3.
            </summary>
            <remarks>Only evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderLAME.LAME_LimitVBR"/> flag is set (<see langword="true"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_Copyright">
            <summary>
            -c: mark as copyright (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_NonOriginal">
            <summary>
            -o: mark as non-original (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_Protect">
            <summary>
            -p: error protection. Adds 16-bit checksum to every frame (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_DisableBitReservoir">
            <summary>
            --nores: disable the bit reservoir (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_EnforceISO">
            <summary>
            --strictly-enforce-ISO: comply as much as possible to ISO MPEG spec (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_DisableAllFilters">
            <summary>
            -k: keep ALL frequencies (disables all filters), can cause ringing and twinkling (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_PSYuseShortBlocks">
            <summary>
            --short: use short blocks when appropriate (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_PSYnoShortBlocks">
            <summary>
            --noshort: don't use short blocks (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_PSYallShortBlocks">
            <summary>
            --allshort: use only short blocks (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_PSYnoTemp">
            <summary>
            --notemp: disable temporal masking effect (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_PSYnsSafeJoint">
            <summary>
            --nssafejoint: M/S switching criterion (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_NoASM">
            <summary>
            --noasm: disable assembly optimizations for mmx/3dnow/sse.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_HighPassFreq">
            <summary>
            --highpass: frequency(kHz), highpass filter cutoff below freq.
            </summary>
            <remarks>Set to 0 (zero) to apply default (disabled).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_HighPassFreqWidth">
            <summary>
            --highpass-width: frequency(kHz) - default 15% of highpass freq.
            </summary>
            <remarks>Set to 0 (zero) to apply the default.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_LowPassFreq">
            <summary>
            --lowpass: frequency(kHz), lowpass filter cutoff above freq.
            </summary>
            <remarks>Set to 0 (zero) to apply default (disabled).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_LowPassFreqWidth">
            <summary>
            --lowpass-width: frequency(kHz) - default 15% of lowpass freq.
            </summary>
            <remarks>Set to 0 (zero) to apply the default.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAME_ATHControl">
            <summary>
            --ath...: ATH control.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderLAME.LAMEATH">
            <summary>
            LAME ATH control options.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEATH.Default">
            <summary>
            Default: standrad ATH control
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEATH.Only">
            <summary>
            --athonly: Ignore output of PSY model, only use masking from ATH (not recommended, use only for testing).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEATH.Disable">
            <summary>
            --noath: Disable ATH.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEATH.OnlyShortBlocks">
            <summary>
            --athshort: use ATH only for short blocks.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderLAME.LAMENOASM">
            <summary>
            --noasm: Assembly optimizations options.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMENOASM.Default">
            <summary>
            Default: mmx/3dnow/sse are enabled.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMENOASM.NO_MMX">
            <summary>
            MMX will be disabled.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMENOASM.NO_3DNOW">
            <summary>
            3dNOW will be disabled.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMENOASM.NO_SSE">
            <summary>
            SSE will be disabled.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality">
            <summary>
            -V: Quality setting for VBR (default is VBR_Q4).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q0">
            <summary>
            -V 0: high quality, bigger files.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q1">
            <summary>
            -V 1
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q2">
            <summary>
            -V 2
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q3">
            <summary>
            -V 3
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q4">
            <summary>
            -V 4: default.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q5">
            <summary>
            -V 4
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q6">
            <summary>
            -V 5
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q7">
            <summary>
            -V 6
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q8">
            <summary>
            -V 7
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEVBRQuality.VBR_Q9">
            <summary>
            -V 9: poor quality, smaller files.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderLAME.LAMEReplayGain">
            <summary>
            ReplayGain analysis.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEReplayGain.Default">
            <summary>
            Default, use no option.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEReplayGain.Fast">
            <summary>
            Compute RG fast but	 slightly inaccurately (default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEReplayGain.Accurate">
            <summary>
            Compute RG more accurately and find the peak sample.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEReplayGain.None">
            <summary>
            Disable ReplayGain analysis.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality">
            <summary>
            Encoding quality (default is Quality).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q0">
            <summary>
            -q 0: Highest quality, slow
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q1">
            <summary>
            -q 1
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q2">
            <summary>
            -q 2, same as -h
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q3">
            <summary>
            -q 3
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q4">
            <summary>
            -q 4
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q5">
            <summary>
            -q 5, default
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q6">
            <summary>
            -q 6
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q7">
            <summary>
            -q 7, same as -f
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q8">
            <summary>
            -q 8
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Q9">
            <summary>
            -q 9: poor quality, fast
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.None">
            <summary>
            None
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Speed">
            <summary>
            -f: Fast, equals -q 7
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEQuality.Quality">
            <summary>
            -h: Default quality, recommended, equals -q 2
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderLAME.LAMEMode">
            <summary>
            The general LAME encoding mode (stereo, joint stereo, mono etc.).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEMode.Default">
            <summary>
            Default is JointStereo or Stereo depending on bitrate.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEMode.Stereo">
            <summary>
            Stereo
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEMode.JointStereo">
            <summary>
            Force LR stereo on all frames
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEMode.ForcedJointStereo">
            <summary>
            Force MS stereo on all frames
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEMode.Mono">
            <summary>
            Mono
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderLAME.LAMEMode.DualMono">
            <summary>
            Dual Mono
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Mp3">
            <summary>
            Encoder class implementation for build-in BASSenc_MP3 encoding.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP3"/> encoder type.
            <para>BASSenc_MP3 (bassenc_mp3.dll) must be available.</para>
            <para>MP3 encoding is based on libmp3lame, Copyright (C) 1999-2017 The LAME Project: <a href="http://lame.sourceforge.net/">lame.sourceforge.net</a></para>
            <para>libmp3lame is under the LGPL v2 licence: <a href="www.gnu.org/licenses/lgpl-2.0.html">www.gnu.org/licenses/lgpl-2.0.html</a></para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.#ctor(System.Int32)">
            <summary>
            Creates an instance of the BassEnc_Mp3 encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>BassEnc_Mp3 implements MP3 encoding (BASS_CTYPE_STREAM_MP3).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.EncoderExists">
            <summary>
            This property always return <see langword="true"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "BASSenc_MP3 Encoder (BASS_CTYPE_STREAM_MP3)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_MP3 is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".mp3").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.SupportsSTDOUT">
            <summary>
            LAME implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>LAME support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all LAME_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the LAME_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>If you are encoding in CBR (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseVBR"/> is set to <see langword="false"/>, default) the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_Bitrate"/> member will be returned.
            <para>If you are encoding in VBR or ABR (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseVBR"/> is set to <see langword="true"/>) the average of <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_Bitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_VBRMaxBitrate"/> resp. <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_ABRBitrate"/> will be used.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual LibMP3Lame encoder. 
            </summary>
            <param name="proc">NOT used/supported here.</param>
            <param name="user">NOT used/supported here.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other LAME_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other LAME_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_Mode">
            <summary>
            -m: The encoding mode (stereo, joint stereo, mono etc.).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_PresetName">
            <summary>
            --preset: Preset name must be "medium", "standard", "extreme", "insane" or a value for an average desired bitrate 
            and depending on the value specified, appropriate quality settings will be used.
            </summary>
            <remarks>If a preset name is specified NO other options will be used!
            So make sure to set the preset name to String.Empty, if you want to use any other options.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_Quality">
            <summary>
            -q: Noise shaping and psycho acoustic algorithms (default is Quality).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_ReplayGain">
            <summary>
            --replaygain: ReplayGain analysis (Default is None).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_Bitrate">
            <summary>
            -b: Constant (or minimum allowed) bitrate in kbps, default 128 kbps.
            </summary>
            <remarks>
            <para>If the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseVBR"/> flag is not set (<see langword="false"/>): This specifies the CBR bitrate.</para>
            <para>If the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseVBR"/> flag is set (<see langword="true"/>): This specifies the minimum allowed VBR bitrate, if <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_LimitVBR"/> is also set.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_TargetSampleRate">
            <summary>
            --resample: target sampling frequency of output (in Hz). Set to 0 (zero) to use automatic resampling (default).
            </summary>
            <remarks>Specify the target sample rate in Hz, e.g. 22050 for 22.05kHz.
            <para>When using this encoder for broadcast streaming it is advised to always set the target samplerate.</para>
            <para>You might use one of the <see cref="T:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE"/> constants here.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_ABRBitrate">
            <summary>
            --abr: Specify average target bitrate in kbps desired (instead of quality). 
            Set to 0, if this option should be disabled (default).
            </summary>
            <remarks>Only evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseVBR"/> flag is set (<see langword="true"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseVBR">
            <summary>
            Use variable bitrate (VBR) (Default is <see langword="false"/>).
            </summary>
            <remarks>If enabled, the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_VBRQuality"/> or <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_ABRBitrate"/> value will be used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_LimitVBR">
            <summary>
            Use variable bitrate (VBR) limitation (Default is <see langword="false"/>).
            </summary>
            <remarks>If <see langword="true"/>, the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_Bitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_VBRMaxBitrate"/> values will be used as the minimum and maximum allowed VBR bitrate.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_VBRQuality">
            <summary>
            -V: Quality setting for VBR (default is VBR_Q4).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_VBRMaxBitrate">
            <summary>
            Specify maximum allowed bitrate in kbps, default 320 kbps.
            </summary>
            <remarks>Only evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_LimitVBR"/> flag is set (<see langword="true"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_VBRDisableTag">
            <summary>
            -t: disable writing VBR LAME Tag? (Default is <see langword="false"/>).
            </summary>
            <remarks>Only evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_UseVBR"/> flag is set (<see langword="true"/>).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAME_Protect">
            <summary>
            -p: error protection. Adds 16-bit checksum to every frame (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality">
            <summary>
            -V: Quality setting for VBR (default is VBR_Q4).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q0">
            <summary>
            -V 0: high quality, bigger files.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q1">
            <summary>
            -V 1
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q2">
            <summary>
            -V 2
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q3">
            <summary>
            -V 3
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q4">
            <summary>
            -V 4: default.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q5">
            <summary>
            -V 4
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q6">
            <summary>
            -V 5
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q7">
            <summary>
            -V 6
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q8">
            <summary>
            -V 7
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEVBRQuality.VBR_Q9">
            <summary>
            -V 9: poor quality, smaller files.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEReplayGain">
            <summary>
            ReplayGain analysis.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEReplayGain.Default">
            <summary>
            Default, use fast option.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEReplayGain.None">
            <summary>
            Disable ReplayGain analysis.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality">
            <summary>
            Encoding quality (default is Quality).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q0">
            <summary>
            -q 0: Highest quality, slow
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q1">
            <summary>
            -q 1
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q2">
            <summary>
            -q 2, same as -h
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q3">
            <summary>
            -q 3
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q4">
            <summary>
            -q 4
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q5">
            <summary>
            -q 5, default
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q6">
            <summary>
            -q 6
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q7">
            <summary>
            -q 7, same as -f
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q8">
            <summary>
            -q 8
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEQuality.Q9">
            <summary>
            -q 9: poor quality, fast
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEMode">
            <summary>
            The general LAME encoding mode (stereo, joint stereo, mono etc.).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEMode.Default">
            <summary>
            Default is JointStereo or Stereo depending on bitrate.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEMode.Stereo">
            <summary>
            Stereo
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEMode.JointStereo">
            <summary>
            Force LR stereo on all frames
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEMode.ForcedJointStereo">
            <summary>
            Force MS stereo on all frames
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEMode.Mono">
            <summary>
            Mono
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Mp3.LAMEMode.DualMono">
            <summary>
            Dual Mono
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Aac">
            <summary>
            Encoder class implementation for build-in BASSenc_AAC encoding.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AAC"/> encoder type.
            <para>BASSenc_AAC (bassenc_aac.dll) must be made available.</para>
            <para>AAC encoding is based on the FDK AAC encoder: <a href="https://wiki.hydrogenaud.io/index.php?title=Fraunhofer_FDK_AAC">Hydrogenauio Fraunhofer FDK AAC</a></para>
            <para>AAC is patented and a licence is required to use it in commercial products. A licence can be obtained from Via: <a href="https://www.via-corp.com/licensing/aac/">www.via-corp.com/licensing</a></para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Aac.#ctor(System.Int32)">
            <summary>
            Creates an instance of the Fraunhofer FDK AAC encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>This encoder implements AAC encoding (BASS_CTYPE_STREAM_AAC).
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Aac.EncoderExists">
            <summary>
            This property always return <see langword="true"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Aac.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "BASSenc_AAC Encoder (BASS_CTYPE_STREAM_AAC)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Aac.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_AAC is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Aac.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (either ".aac" or ".m4a").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Aac.SupportsSTDOUT">
            <summary>
            BASSenc_AAC implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Aac.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all FDKAAC_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the FDKAAC_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Aac.EffectiveBitrate">
            <summary>
            Returns the CBR encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>Note: This property always returns the CBR mode bitrate as given by the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.FDKAAC_ConstantBitrate"/> member.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Aac.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual BASSenc_AAC encoder. 
            </summary>
            <param name="proc">NOT used/supported here.</param>
            <param name="user">NOT used/supported here.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderBassEnc_Aac.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Aac.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.FDKAAC_Profile">
            <summary>
            --object-type: choose the AAC profile; default is 2 (AAC LC).
            </summary>
            <remarks>
            <para>2 : AAC LC (default)</para>
            <para>5 : HE-AAC v1</para>
            <para>29 : HE-AAC v2</para>
            <para>23 : AAC LD</para>
            <para>39 : AAC ELD</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.FDKAAC_VBRMode">
            <summary>
            --vbr: bitrate mode; 0=CBR, 1..5 VBRLevel.
            </summary>
            <remarks>
            When set to 0 (zero) VBR mode is disabled and the CBR mode is used (see <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.FDKAAC_ConstantBitrate"/>).
            When set to a value between 1 and 5 CBR mode is disabled and VBR mode is used.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.FDKAAC_ConstantBitrate">
            <summary>
            --bitrate: encode in CBR mode; bitrate in kbps (8..576), default 128 kbps.
            </summary>
            <remarks>
            CBR mode is used by default unless you set the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.FDKAAC_VBRMode"/> property to a value greater than 0 (zero).
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Aac.FDKAAC_UseADTS">
            <summary>
            -f: Use ADTS container instead of MPEG-4 (currently always true).
            </summary>
            <remarks>Setting this flag to <see langword="false"/> will mux the output file to m4a container.
            <para>Encoding to STDOUT (<see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>) requires this flag to be set (e.g. when streaming to a server in AAC),
            in such case this flag is automatically applied.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACProfile">
            <summary>
            The FDKAAC profile to use (Audio Object Type).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACProfile.AAC_LC">
            <summary>
            2: (Default) MPEG-4 AAC LC Audio Object Type based on the MPEG-2 Part 7 Low Complexity profile (LC) combined with Perceptual Noise Substitution (PNS) (defined in MPEG-4 Part 3 Subpart 4).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACProfile.HE_AAC">
            <summary>
            5: SBR (Spectral Band Replication), used with AAC LC in the High Efficiency AAC Profile (HE-AAC v1).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACProfile.HE_AACv2">
            <summary>
            29: SBR+PS (Parametric Stereo), used with AAC LC and SBR in the HE-AAC v2 Profile.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACProfile.AAC_LD">
            <summary>
            23: ER AAC LD (Low Delay), used with CELP, ER CELP, HVXC, ER HVXC and TTSI in the Low Delay Profile (commonly used for real-time conversation applications).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACProfile.AAC_ELD">
            <summary>
            39: ELD (Enhanced Low Delay).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACVBR">
            <summary>
            The FDKAAC profile to use (Audio Object Type).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACVBR.CBR">
            <summary>
            CBR, Filter depends on samplerate from 3700 Hz (below 12kbps) to 17000 Hz (96kbps and above).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACVBR.VBR1">
            <summary>
            VBR Mode 1, 13050 Hz filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACVBR.VBR2">
            <summary>
            VBR Mode 2, 13050 Hz filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACVBR.VBR3">
            <summary>
            VBR Mode 4, 14260 Hz filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACVBR.VBR4">
            <summary>
            VBR Mode 4, 15500 Hz filter.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Aac.AACVBR.VBR5">
            <summary>
            VBR Mode 5, Full range, no filter.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Flac">
            <summary>
            Encoder class implementation for build-in BASSenc_FLAC encoding.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_FLAC"/> encoder type.
            <para>BASSenc_FLAC (bassenc_flac.dll) must be made available.</para>
            <para>FLAC encoding is based on: <a href="https://github.com/xiph/flac">libflac</a></para>
            <para>Make sure to set the FLAC_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderBassEnc_Flac.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderBassEnc_Flac.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            <para>FLAC 'cuesheets' and the 'skip' and 'until' properties are not supported in this implementation by default, but you might add them with the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_CustomOptions"/> parameter.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Flac.#ctor(System.Int32)">
            <summary>
            Creates an instance of the BASSEnc_Flac encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements FLAC encoding (BASS_CTYPE_STREAM_FLAC).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Flac.EncoderExists">
            <summary>
            This property alwas return <see langword="true"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Flac.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "BASSenc_FLAC Encoder (.flac)" or "BASSenc_AAC Encoder (.ogg)" depending on <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_UseOgg"/>.</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Flac.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_FLAC is returned
            (or BASS_CTYPE_STREAM_FLAC_OGG if <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_UseOgg"/> is set to to <see langword="true"/>).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Flac.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".flac").
            </summary>
            <remarks>If you set the option <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_UseOgg"/> to <see langword="true"/> this will return ".ogg" instead.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Flac.SupportsSTDOUT">
            <summary>
            BASSenc_FLAC implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Flac.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all FLAC_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the FLAC_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Flac.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>Since FLAC is a lossless format, no matter what compression mode you are using, the bitrate will always be taken from the raw input format.
            Meaning the original <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelSampleRate"/> and the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelNumChans"/> will be evaluated in order to calculate the effective bitrate.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Flac.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual BASSenc_FLAC encoder. 
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            </summary>
            <param name="proc">NOT used/supported here.</param>
            <param name="user">NOT used/supported here.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderBassEnc_Flac.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Flac.UpdateTitle(System.String,System.String)">
            <summary>
            Starts a new bitstream in an Ogg FLAC encoder's output for streaming meta data updates.
            </summary>
            <param name="song">The 'artist - title' to use for the meta data update.</param>
            <param name="url">The url to use for the meta data update.</param>
            <returns>The success of the update.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Flac.UpdateTitle(Un4seen.Bass.AddOn.Tags.TAG_INFO,System.String)">
            <summary>
            Starts a new bitstream in an Ogg FLAC encoder's output for streaming meta data updates.
            </summary>
            <param name="tag">The tag data to use for the meta data update.</param>
            <param name="url">The url to use for the meta data update.</param>
            <returns>The success of the update.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Flac.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other FLAC_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other FLAC_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_UseOgg">
            <summary>
            --ogg: When encoding, generate Ogg FLAC output instead of native FLAC (default is <see langword="false"/>).
            </summary>
            <remarks>Ogg FLAC streams are FLAC streams wrapped in an Ogg transport layer.
            The resulting file should have an '.ogg' extension and will still be decodable by flac.
            <para>When setting this property to <see langword="true"/>, the <see cref="P:Un4seen.Bass.Misc.EncoderBassEnc_Flac.DefaultOutputExtension"/> will be changed to ".ogg".</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_Verify">
            <summary>
            -V: Verify a correct encoding by decoding the output in parallel and comparing to the original (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_Padding">
            <summary>
            -P: Tell the encoder to write a PADDING metadata block of the given length (in bytes) after the STREAMINFO block (default is off).
            </summary>
            <remarks>This is useful if you plan to tag the file later with an APPLICATION block; instead of having to rewrite the entire file later just to insert your block, you can write directly over the PADDING block.
            Note that the total length of the PADDING block will be 4 bytes longer than the length given, because of the 4 metadata block header bytes.
            You can force no PADDING block at all to be written with "--no-padding".
            The encoder writes a PADDING block of 4096 bytes by default.
            <para>If you set <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_NoPadding"/> to <see langword="true"/>, this option will have no effect.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_NoPadding">
            <summary>
            --no-padding: Suppress writing a PADDING block of 4096 bytes (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_Blocksize">
            <summary>
            -b: Specify the blocksize in samples (the default is 1152 for -l 0, else 4608).
            </summary>
            <remarks>This must be one of 192, 576, 1152, 2304, 4608, 256, 512, 1024, 2048, 4096, 8192, 16384, or 32768 (unless "--lax" is used).
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Flac.FLAC_CompressionLevel">
            <summary>
            -0..-8: Defines the compression level (default is 5) between 0 (fast) and 8 (best).
            </summary>
            <remarks>Although FLAC is a lossless format you can adjust the compression level.
            A higher compression level (max. is 8) means a smaller output, whereas a lower compression level (min. is 0) means faster results.</remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Opus">
            <summary>
            Encoder class implementation for build-in BASSenc_OPUS encoding.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_OPUS"/> encoder type.
            <para>BASSenc_OPUS (bassenc_opus.dll) must be made available.</para>
            <para>OPUS encoding is based on: <a href="https://opus-codec.org/">libopus</a>, Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic, Jean-Marc Valin, Timothy B.Terriberry, CSIRO, Gregory Maxwell, Mark Borgerding, Erik de Castro Lopo. and libSpeexDSP, Copyright 2002-2008 Xiph.Org, Jean-Marc Valin.</para>
            <para>Make sure to set the OPUS_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderBassEnc_Opus.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderBassEnc_Opus.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Opus.#ctor(System.Int32)">
            <summary>
            Creates an instance of the BASSEnc_Opus encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements OPUS encoding (BASS_CTYPE_STREAM_OPUS).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Opus.EncoderExists">
            <summary>
            This property always return <see langword="true"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Opus.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "OPUS Encoder (BASS_CTYPE_STREAM_OPUS)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Opus.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_OPUS is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Opus.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".opus").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Opus.SupportsSTDOUT">
            <summary>
            BASSenc_OPUS implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Opus.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all OPUS_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the OPUS_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Opus.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            No matter in which mode (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_Mode"/>) you are encoding only the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_Bitrate"/> value will be used to return the effective bitrate value.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Opus.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual OPUS encoder. 
            </summary>
            <param name="proc">NOT used/supported here.</param>
            <param name="user">NOT used/supported here.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderBassEnc_Opus.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Opus.UpdateTitle(System.String,System.String)">
            <summary>
            Starts a new bitstream in an Opus encoder's output for streaming meta data updates.
            </summary>
            <param name="song">The 'artist - title' to use for the meta data update.</param>
            <param name="url">The url to use for the meta data update.</param>
            <returns>The success of the update.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Opus.UpdateTitle(Un4seen.Bass.AddOn.Tags.TAG_INFO,System.String)">
            <summary>
            Starts a new bitstream in an Opus encoder's output for streaming meta data updates.
            </summary>
            <param name="tag">The tag data to use for the meta data update.</param>
            <param name="url">The url to use for the meta data update.</param>
            <returns>The success of the update.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Opus.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other OPUS_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other OPUS_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_Bitrate">
            <summary>
            -bitrate: Encoding bitrate in kbit/sec (6-256 per channel, default is 128 kpbs).
            </summary>
            <remarks>
            Depending on the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_Mode"/> option this defines the managed target bitrate.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_Mode">
            <summary>
            --vbr, --cvbr, --hard-cbr: The bitrate encoding mode to use (default is VBR).
            </summary>
            <remarks>For streaming the HardCBR mode is recommended.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_Complexity">
            <summary>
            --comp: Encoding computational complexity (0-10, default: 10).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_Framesize">
            <summary>
            --framesize: Maximum frame size in milliseconds (2.5, 5, 10, 20, 40, 60, default: 20).
            </summary>
            <remarks>
            Smaller framesizes achieve lower latency but less quality at a given bitrate.
            Sizes greater than 20ms are only interesting at fairly low bitrates. 
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_ExpectLoss">
            <summary>
            --expect-loss: Percentage packet loss to expect (0-100, default: 0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUS_MaxDelay">
            <summary>
            --max-delay: Maximum container delay in milliseconds (0-1000, default: 1000).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSFramesize">
            <summary>
            The OPUS framesize in milliseconds (2.5, 5, 10, 20, 40, or 60).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSFramesize.f2_5ms">
            <summary>
            Framesize 2.5
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSFramesize.f5ms">
            <summary>
            Framesize 5
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSFramesize.f10ms">
            <summary>
            Framesize 10
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSFramesize.f20ms">
            <summary>
            Framesize 20
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSFramesize.f40ms">
            <summary>
            Framesize 40
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSFramesize.f60ms">
            <summary>
            Framesize 60
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSMode">
            <summary>
            The OPUS bitrate encoding mode (VBR, CVBR, CBR).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSMode.VBR">
            <summary>
            --vbr: Use variable bitrate encoding (default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSMode.CVBR">
            <summary>
            --cvbr: Use constrained variable bitrate encoding.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Opus.OPUSMode.CBR">
            <summary>
            --hard-cbr: Use hard constant bitrate encoding.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderBassEnc_Ogg">
            <summary>
            Encoder class implementation for build-in BASSenc_OGG encoding.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_OGG"/> encoder type.
            <para>BASSenc_OGG (bassenc_ogg.dll) must be made available.</para>
            <para>OGG encoding is based on: <a href="https://xiph.org/vorbis/">libogg/vorbis</a>, Copyright(c) 2002-2020 Xiph.org Foundation.</para>
            <para>Make sure to set the OGG_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.#ctor(System.Int32)">
            <summary>
            Creates an instance of BASSEnc_Opus encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements OGG encoding (BASS_CTYPE_STREAM_OGG).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.EncoderExists">
            <summary>
            This property always return <see langword="true"/>.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "BASSenc_OGG Encoder (BASS_CTYPE_STREAM_OGG)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_OGG is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".ogg").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.SupportsSTDOUT">
            <summary>
            BASSenc_OGG implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all OGG_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the OGG_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>When using the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode"/> is set to <see langword="true"/>, default) you only need to specify a quality factor via <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Quality"/> and the bitrate parameters (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate"/>, <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Bitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate"/>) are ignored. 
            In this case the effective bitrate will be calculated automatically according to the OGG-Vorbis specification.</para>
            <para>When you turn off Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode"/> is set to <see langword="false"/>) the bitrate parameters are evaluated!
            However, no matter if you are encoding in CBR or VBR/ABR the properties <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate"/> will not be used - instead only the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Bitrate"/> value will be used to return the effective bitrate value.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual BassEnc_Ogg encoder. 
            </summary>
            <param name="proc">NOT used/supported here.</param>
            <param name="user">NOT used/supported here.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.UpdateTitle(System.String,System.String)">
            <summary>
            Starts a new bitstream in an Opus encoder's output for streaming meta data updates.
            </summary>
            <param name="song">The 'artist - title' to use for the meta data update.</param>
            <param name="url">The url to use for the meta data update.</param>
            <returns>The success of the update.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.UpdateTitle(Un4seen.Bass.AddOn.Tags.TAG_INFO,System.String)">
            <summary>
            Starts a new bitstream in an Opus encoder's output for streaming meta data updates.
            </summary>
            <param name="tag">The tag data to use for the meta data update.</param>
            <param name="url">The url to use for the meta data update.</param>
            <returns>The success of the update.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.Quality2Kbps(System.Single)">
            <summary>
            Converts a quality setting (between -2.0 and 10.0) to an approx. bitrate (in kbps).
            </summary>
            <param name="q">The OGG quality level to convert (between -2.0 and 10.0).</param>
            <returns>The rounded approximate bitrate in kbps.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.Kbps2Quality(System.Int32)">
            <summary>
            Converts a bitrate (between 32 kbps and 498 kbps) to an approx. quality level.
            </summary>
            <param name="kbps">The bitrate in kbps to convert (between 32 kbps and 498 kbps).</param>
            <returns>The OGG quality level (between -2.0 and 10.0) which approximates the bitrate.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other OGG_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other OGG_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode">
            <summary>
            Use Quality-Mode? (default is <see langword="true"/>).
            </summary>
            <remarks>
            <para>When using the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode"/> is set to <see langword="true"/>, default) you only specify a quality factor via <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Quality"/> and the bitrate parameters (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate"/>, <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Bitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate"/>) are ignored.</para>
            <para>When you turn off Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode"/> is set to <see langword="false"/>) the bitrate parameters are evaluated!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Quality">
            <summary>
            -q: Specify quality between -2 (low) and 10 (high) (default=4), instead of specifying a particular bitrate (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Bitrate"/>).
            </summary>
            <remarks>This is the normal, default mode of operation. Fractional qualities (e.g. 2.75) are permitted.
            <para>If you enable the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode"/> is set to <see langword="true"/>, default) only this value is being evaluated.</para>
            <para>If you disable the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode"/> is set to <see langword="false"/>) this value is being ignored.</para>
            <para>Here is a list about approximate Quality to Bitrate mappings:
            <list type="table">
            <listheader><term>Quality:</term><description>Bitrate:</description></listheader>
            <item><term>-2</term><description>approx. 32 kbps</description></item>
            <item><term>-1</term><description>approx. 48 kbps</description></item>
            <item><term>0</term><description>approx. 64 kbps</description></item>
            <item><term>1</term><description>approx. 80 kbps</description></item>
            <item><term>2</term><description>approx. 96 kbps</description></item>
            <item><term>3</term><description>approx. 112 kbps</description></item>
            <item><term>4</term><description>approx. 128 kbps</description></item>
            <item><term>5</term><description>approx. 160 kbps</description></item>
            <item><term>6</term><description>approx. 192 kbps</description></item>
            <item><term>7</term><description>approx. 224 kbps</description></item>
            <item><term>8</term><description>approx. 256 kbps</description></item>
            <item><term>9</term><description>approx. 320 kbps</description></item>
            <item><term>10</term><description>approx. 498! kbps</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Bitrate">
            <summary>
            -b: Choose a nominal bitrate to encode at. Attempt to encode at a bitrate averaging this. Takes an argument in kbps.
            </summary>
            <remarks>By default, this produces a VBR encoding, equivalent to using -q or --quality.
            <para>Unless the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode"/> is set to <see langword="false"/> this property is NOT evaluated.</para>
            <para>To use ABR (average bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate"/> to 0 (zero).</para>
            <para>To use CBR (constant bitrate): specify the exact same value also for <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate">
            <summary>
             -m: Specify a minimum bitrate (in kbps). Useful for encoding for a fixed-size channel. If set to 0 (zero, default) this property is not evaluated!
            </summary>
            <remarks>Unless the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode"/> is set to <see langword="false"/> this property is NOT evaluated.
            <para>To use ABR (average bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate"/> to 0 (zero) and only specify a value for <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Bitrate"/>.</para>
            <para>To use CBR (constant bitrate): specify the exact same value as you set for <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Bitrate"/> also for <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate">
            <summary>
            -M:  Specify a maximum bitrate in kbps. Useful for streaming applications.  If set to 0 (zero, default) this property is not evaluated!
            </summary>
            <remarks>Unless the <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_UseQualityMode"/> is set to <see langword="false"/> this property is NOT evaluated.
            <para>To use ABR (average bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate"/> to 0 (zero) and only specify a value for <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Bitrate"/>.</para>
            <para>To use CBR (constant bitrate): specify the exact same value as you set for <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_Bitrate"/> also for <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderBassEnc_Ogg.OGG_MaxBitrate"/>.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderMP3S">
            <summary>
            Encoder class implementation for MP3 encoding using the Fraunhofer IIS mp3 Surround command line encoder mp3sEncoder.exe.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP3"/> encoder type.
            <para>mp3sEncoder (mp3sEncoder.exe) must be downloaded separately (e.g. from <a href="http://www.all4mp3.com/SoftwareLine.aspx">www.all4mp3.com</a>).</para>
            <para>Since mp3sEncoder.exe does not support 32-bit IEEE float sample data as input, the BASS_ENCODE_FP_24BIT will be used for highest quality.
            This will be used, whenever the underlying channel handle is 32-bit float or the BASS_CONFIG_FLOATDSP option has been set.</para>
            <para>Make sure to set the MP3S_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderMP3S.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderMP3S.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMP3S.#ctor(System.Int32)">
            <summary>
            Creates an instance of a mp3sEncoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>mp3sEncoder implements MP3 encoding (BASS_CTYPE_STREAM_MP3).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMP3S.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "mp3sEncoder.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMP3S.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "Fraunhofer IIS MP3 Surround Encoder (BASS_CTYPE_STREAM_MP3)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMP3S.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_MP3 is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMP3S.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".mp3").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMP3S.SupportsSTDOUT">
            <summary>
            Fraunhofer IIS MP3 Surround implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>mp3sEncoder support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMP3S.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all MP3S_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the MP3S_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMP3S.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>Actually this will always return the <see cref="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_Bitrate"/> member.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMP3S.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual mp3sEncoder. 
            </summary>
            <param name="proc">Optional callback function to receive the encoded data (only valid, if <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>)... <see langword="null"/> = no callback.
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderMP3S.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderMP3S.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_NOHEAD and BASSEncode.BASS_ENCODE_FP_24BIT flag.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMP3S.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other MP3S_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other MP3S_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_Mono">
            <summary>
            -mono: Create mono downmix from stereo input file before encoding? (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_Quality">
            <summary>
            -q: Use high quality encoder setting? (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_Bitrate">
            <summary>
            -b: Constant bitrate in kbps, default 128 kbps.
            </summary>
            <remarks>
            Valid ranges for the output bitrate are:
            <para>Mono mp3: 16000 - 256000 bits/s</para>
            <para>Stereo mp3: 96000 - 320000 bits/s</para>
            <para>MP3 Surround: 128000 - 320000 bits/s</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_UseVBR">
            <summary>
            Use variable bitrate (VBR) (Default is <see langword="false"/>).
            </summary>
            <remarks>If enabled, the <see cref="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_VBRQuality"/> value will be used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_VBRQuality">
            <summary>
            -m: Quality setting for VBR (default is High).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_WriteVBRHeader">
            <summary>
            -vbri: Write a VBRI header? (Default is <see langword="false"/>).
            </summary>
            <remarks>Only evaluated, if the <see cref="F:Un4seen.Bass.Misc.EncoderMP3S.MP3S_UseVBR"/> flag is set (<see langword="true"/>).</remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderMP3S.MP3SVBRQuality">
            <summary>
            -m: Quality setting for VBR.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3SVBRQuality.Highest">
            <summary>
            -m 1: highest quality
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3SVBRQuality.High">
            <summary>
            -m 2: high quality
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3SVBRQuality.Intermediate">
            <summary>
            -m 3: intermediate quality
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3SVBRQuality.Medium">
            <summary>
            -m 4: intermediate bitrate
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMP3S.MP3SVBRQuality.Low">
            <summary>
            -m 5: low bitrate
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderWinampAACplus">
            <summary>
            Encoder class implementation for Winamp AACplus encoding using "enc_aacPlus.exe" (the command-line encoder using the following Winamp DLLs: "enc_aacplus.dll", "nscrt.dll" and "libmp4v2.dll").
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AAC"/> encoder type.
            <para>Please make sure to use the special "enc_aacPlus.exe" version (made by Bernd Niedergesäß) which can be downloaded here: <a href="http://www.un4seen.com/filez/4/enc_aacPlus.zip">enc_aacPlus.zip</a>.</para>
            <para>Since "enc_aacPlus.exe" also needs the mentioned Winamp DLLs ("enc_aacplus.dll", "nscrt.dll" and and "libmp4v2.dll" as of version 5.57 or above) you also need to install Winamp and copy the Winamp DLLs from the Winamp/PlugIns folder into the same folder which contains enc_aacPlus.exe (or you might also copy enc_aacPlus.exe into the Winamp/PlugIns folder).</para>
            <para>Since the Winamp AACPlus library does only support 16-bit sample data as input, the BASS_ENCODE_FP_16BIT will always be used. Also note, that 8-bit sample data is also not supported!
            This will be used, whenever the underlying channel handle is float or the BASS_CONFIG_FLOATDSP option has been set.</para>
            <para>Make sure to set the AACPlus_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderWinampAACplus.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderWinampAACplus.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This encoder does not support 8-bit channels!</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>The extension of the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> can be either .acc to write an aac bitstream output file or .m4a/.mp4 to box the output to a MP4 container (note, that using m4a/mp4 requires "libmp4v2.dll" to be present).</para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWinampAACplus.#ctor(System.Int32)">
            <summary>
            Creates an instance of a Winamp AACplus encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>This encoder implements AACplus v2 encoding (BASS_CTYPE_STREAM_AAC).
            <para>This encoder does not support 8-bit channels!</para>
            </remarks>
            <exception cref="T:System.ArgumentException">8-bit channels are not supported by the Winamp AACPlus encoder.</exception>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWinampAACplus.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the files "enc_aacPlus.exe" and "enc_aacplus.dll" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
            <remarks>To check, if Winamp is also installed you might call the <see cref="M:Un4seen.Bass.Misc.EncoderWinampAACplus.IsWinampInstalled"/> method.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWinampAACplus.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "Winamp AACPlus v2 Encoder (BASS_CTYPE_STREAM_AAC)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWinampAACplus.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_AAC is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWinampAACplus.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (either ".aac" or ".m4a").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWinampAACplus.SupportsSTDOUT">
            <summary>
            The special "enc_aacPlus.exe" implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>Please make sure to use the special "enc_aacPlus.exe" version (made by Bernd Niedergesäß).
            It can be downloaded from here: <a href="http://www.un4seen.com/filez/4/enc_aacPlus.zip">enc_aacPlus.zip</a></remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWinampAACplus.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all AACPlus_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the AACPlus_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWinampAACplus.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>Since AACPlus does not support VBR, the effective bitrate is always given by the <see cref="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_Bitrate"/> member.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWinampAACplus.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual AACplus encoder. 
            </summary>
            <param name="proc">Optional callback function to receive the encoded data (only valid, if <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>)... <see langword="null"/> = no callback.
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderWinampAACplus.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderWinampAACplus.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_NOHEAD and BASSEncode.BASS_ENCODE_FP_16BIT flag.
            So floating-point channels are supported and automatically converted - but 8-bit channels are not supported!.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWinampAACplus.Force16Bit">
            <summary>
            Always returns true, since this encoder only supports receiving 16 bit sample data.
            </summary>
            <remarks>32-bit float channels are supported, since they are automatically converted to 16-bit integer sample data before sending them to the encoder.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWinampAACplus.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWinampAACplus.IsWinampInstalled">
            <summary>
            Determines, if Winamp is installed on your machine (only work on Windows using the Full Framework).
            </summary>
            <returns><see langword="true"/> is returned if Winamp is installed - else <see langword="false"/> is returned.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_Bitrate">
            <summary>
            --br:  bitrate in kbps, default 128 kbps.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_EnableParametricStereo">
            <summary>
            --ps: Enable Parametric Stereo (bitrates up to 56000, only with HE-AAC, default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_IndependedStereo">
            <summary>
            --is: Independed Stereo, disables Joint Stereo M/S coding (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_PreferDualChannel">
            <summary>
            --dc: Prefer Dual Channel (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_Mono">
            <summary>
            --mono: Encode as Mono (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_Mpeg2Aac">
            <summary>
            --mpeg2aac: Force MPEG2 AAC instead of letting the encoder choose (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_Mpeg4Aac">
            <summary>
            --mpeg4aac: Force MPEG4 AAC instead of letting the encoder choose (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_LC">
            <summary>
            --lc: Encode as LC-AAC (supports bitrate up to 320000, default=<see langword="false"/>).
            </summary>
            <remarks>LC-AAC requires encoding to a physical output file, so it will not be supported, if you output to STDOUT.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_HE">
            <summary>
            --he: Encode as HE-AAC (supports bitrate up to 128000, default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_High">
            <summary>
            --high: Encode as HE-AAC+ with high bitrates (supports bitrate up to 256000, multichannel not supported, default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_Speech">
            <summary>
            --speech: Tune for Speech encoding (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_PNS">
            <summary>
            --pns: Enable Perceptual Noise Subsitution (default=<see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWinampAACplus.AACPlus_UseMp4Output">
            <summary>
            Box the output to a MP4 container using the .m4a output file extension (default=<see langword="false"/>).
            </summary>
            <remarks>Setting this flag to <see langword="true"/> requires the "libmp4v2.dll" to be present.
            <para>This flag is automatically applied when encoding to an output file with the extension '.m4a' or '.mp4'.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderFHGAACplus">
            <summary>
            Encoder class implementation for FHG Winamp AACplus encoding using "fhgaacenc.exe" (the command-line encoder using the following Winamp DLLs: "enc_fhgaac.dll", "nsutil.dll", "libsndfile-1.dll" and "libmp4v2.dll").
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AAC"/> encoder type.
            <para>fhgaacenc (fhgaacenc.exe) must be downloaded separately (e.g. from <a href="https://github.com/tmkk/fhgaacenc">https://github.com/tmkk/fhgaacenc</a>).</para>
            <para>Since "fhgaacenc.exe" also needs the mentioned Winamp DLLs ("enc_fhgaac.dll", "nsutil.dll" and "libmp4v2.dll" as of version 5.62 or above) you also need to install Winamp and copy the Winamp DLLs from the Winamp resp. Winamp/PlugIns folder 
            into the same folder which contains fhgaacenc.exe (or you might also copy "fhgaacenc.exe" and "libsndfile-1.dll" into the Winamp/PlugIns folder).</para>
            <para>The FHG Winamp AACPlus library does not support 32-bit floating point sample data as input, so the BASS_ENCODE_FP_32BIT flag will automatically be used.</para>
            <para>Make sure to set the AACPlus_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderFHGAACplus.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderFHGAACplus.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>The extension of the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> can be either .acc to write an aac bitstream output file or .m4a/.mp4 to box the output to a MP4 container (note, that using m4a/mp4 requires "libmp4v2.dll" to be present).</para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFHGAACplus.#ctor(System.Int32)">
            <summary>
            Creates an instance of a FHG Winamp AACplus encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>This encoder implements AACplus v2 encoding (BASS_CTYPE_STREAM_AAC).
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFHGAACplus.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the files "fhgaacenc.exe", "enc_fhgaac.dll", "libsndfile-1.dll" and "nsutil.dll" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
            <remarks>To check, if Winamp is also installed you might call the <see cref="M:Un4seen.Bass.Misc.EncoderFHGAACplus.IsWinampInstalled"/> method.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFHGAACplus.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "FHG Winamp AACPlus v2 Encoder (BASS_CTYPE_STREAM_AAC)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFHGAACplus.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_AAC is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFHGAACplus.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (either ".aac" or ".m4a").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFHGAACplus.SupportsSTDOUT">
            <summary>
            The "fhgaacenc.exe" implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFHGAACplus.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all AACPlus_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the AACPlus_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFHGAACplus.EffectiveBitrate">
            <summary>
            Returns the CBR encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>Note: This property always returns the CBR mode bitrate as given by the <see cref="F:Un4seen.Bass.Misc.EncoderFHGAACplus.AACPlus_ConstantBitrate"/> member.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFHGAACplus.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual FHG AACplus encoder. 
            </summary>
            <param name="proc">Optional callback function to receive the encoded data (only valid, if <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>)... <see langword="null"/> = no callback.
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderFHGAACplus.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderFHGAACplus.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_FP_32BIT flag. So floating-point channels are supported and automatically converted.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFHGAACplus.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFHGAACplus.IsWinampInstalled">
            <summary>
            Determines, if Winamp is installed on your machine(only work on Windows using the Full Framework).
            </summary>
            <returns><see langword="true"/> is returned if Winamp is installed - else <see langword="false"/> is returned.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFHGAACplus.AACPlus_ConstantBitrate">
            <summary>
            --cbr:  encode in CBR mode; bitrate in kbps (8..576), default 128 kbps.
            </summary>
            <remarks>
            CBR mode is used by default unless you set the <see cref="F:Un4seen.Bass.Misc.EncoderFHGAACplus.AACPlus_VariableBitrate"/> property to a value greater than 0 (zero).
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFHGAACplus.AACPlus_VariableBitrate">
            <summary>
            --vbr:  encode in VBR mode; preset 1..5, default is 0 (disabled).
            </summary>
            <remarks>
            When set to 0 (zero) VBR mode is disabled and the CBR mode is used (see <see cref="F:Un4seen.Bass.Misc.EncoderFHGAACplus.AACPlus_ConstantBitrate"/>).
            When set to a value between 1 and 5 CBR mode is disabled and VBR mode is used.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFHGAACplus.AACPlus_Profile">
            <summary>
            --profile: choose the AAC profile (only for CBR mode); default is Auto.
            </summary>
            <remarks>
            <para>Auto : automatically choose the optimum profile according to the bitrate (default).</para>
            <para>LC : force use LC-AAC profile.</para>
            <para>HE : force use HE-AAC (AAC+SBR) profile.</para>
            <para>HEv2 : force use HE-AAC v2 (AAC+SBR+PS) profile.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFHGAACplus.AACPlus_UseADTS">
            <summary>
            Use ADTS container instead of MPEG-4.
            </summary>
            <remarks>Setting this flag to <see langword="false"/> requires the "libmp4v2.dll" to be present.
            <para>Encoding to STDOUT (<see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>) requires this flag to be set (e.g. when streaming to a SHOUTcast server in AAC),
            in such case this flag is automatically applied.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderFHGAACplus.FHGProfile">
            <summary>
            The FHG AAC profile to use (only for CBR mode).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFHGAACplus.FHGProfile.Auto">
            <summary>
            Automatically choose the optimum profile according to the bitrate [default].
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFHGAACplus.FHGProfile.LC">
            <summary>
            Force use LC-AAC profile.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFHGAACplus.FHGProfile.HE">
            <summary>
            Force use HE-AAC (AAC+SBR) profile.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFHGAACplus.FHGProfile.HEv2">
            <summary>
            Force use HE-AAC v2 (AAC+SBR+PS) profile.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderOGG">
            <summary>
            Encoder class implementation for OGG-Vorbis encoding using "oggenc2.exe".
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_OGG"/> encoder type.
            <para>"oggenc2.exe" must be downloaded separately (e.g. from <a href="http://www.rarewares.org/ogg.html">www.rarewares.org</a> or <a href="http://www.vorbis.com">www.vorbis.com</a>).</para>
            <para>Since "oggenc2.exe" does support 8/, 16/ and 32-bit(IEEE float) sample data as input, no BASS_ENCODE_FP_ flag will be used.</para>
            <para>Make sure to set the OGG_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderOGG.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderOGG.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>There are several versions of "oggenc.exe" or "oggenc2.exe" out there (some are highly optimized for SSE etc.). 
            This encoder implementation tries to support the latest version 2.x set of parameters. If you downloaded another OGG-Vorbis encoder version, just try it out and simply make sure that you rename the executable to "oggenc2.exe".</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOGG.#ctor(System.Int32)">
            <summary>
            Creates an instance of a OGG encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements OGG encoding (BASS_CTYPE_STREAM_OGG).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOGG.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "oggenc2.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOGG.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "OGG Encoder (BASS_CTYPE_STREAM_OGG)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOGG.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_OGG is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOGG.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".ogg").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOGG.SupportsSTDOUT">
            <summary>
            "oggenc2.exe" implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>"oggenc2.exe" support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOGG.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all OGG_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the OGG_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOGG.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>When using the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> is set to <see langword="true"/>, default) you only need to specify a quality factor via <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Quality"/> and the bitrate parameters (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate"/>, <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Bitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate"/>) are ignored. 
            In this case the effective bitrate will be calculated automatically according to the OGG-Vorbis specification.</para>
            <para>When you turn off Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> is set to <see langword="false"/>) the bitrate parameters are evaluated!
            However, no matter if you are encoding in CBR (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseManagedBitrate"/> is set to <see langword="true"/>) or VBR/ABR (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseManagedBitrate"/> is set to <see langword="false"/>, default) the properties <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate"/> will not be used - instead only the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Bitrate"/> value will be used to return the effective bitrate value.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOGG.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual OGG encoder. 
            </summary>
            <param name="proc">Optional callback function to receive the encoded data (only valid, if <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>)... <see langword="null"/> = no callback.
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderOGG.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderOGG.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_NOHEAD flag.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOGG.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOGG.Quality2Kbps(System.Single)">
            <summary>
            Converts a quality setting (between -2.0 and 10.0) to an approx. bitrate (in kbps).
            </summary>
            <param name="q">The OGG quality level to convert (between -2.0 and 10.0).</param>
            <returns>The rounded approximate bitrate in kbps.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOGG.Kbps2Quality(System.Int32)">
            <summary>
            Converts a bitrate (between 32 kbps and 498 kbps) to an approx. quality level.
            </summary>
            <param name="kbps">The bitrate in kbps to convert (between 32 kbps and 498 kbps).</param>
            <returns>The OGG quality level (between -2.0 and 10.0) which approximates the bitrate.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other OGG_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other OGG_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Downmix">
            <summary>
            --downmix: Downmix from stereo to mono? (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Scale">
            <summary>
            --scale: Scale input data to n (n = between 0.00 and 1.00, multiply PCM data). Set to 1.0 (default) for no scaling.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode">
            <summary>
            Use Quality-Mode? (default is <see langword="true"/>).
            </summary>
            <remarks>
            <para>When using the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> is set to <see langword="true"/>, default) you only specify a quality factor via <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Quality"/> and the bitrate parameters (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate"/>, <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Bitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate"/>) are ignored.</para>
            <para>When you turn off Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> is set to <see langword="false"/>) the bitrate parameters are evaluated!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Quality">
            <summary>
            -q: Specify quality between -2 (low) and 10 (high) (default=4), instead of specifying a particular bitrate (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Bitrate"/>).
            </summary>
            <remarks>This is the normal, default mode of operation. Fractional qualities (e.g. 2.75) are permitted.
            <para>If you enable the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> is set to <see langword="true"/>, default) only this value is being evaluated.</para>
            <para>If you disable the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> is set to <see langword="false"/>) this value is being ignored.</para>
            <para>Here is a list about approximate Quality to Bitrate mappings:
            <list type="table">
            <listheader><term>Quality:</term><description>Bitrate:</description></listheader>
            <item><term>-2</term><description>approx. 32 kbps</description></item>
            <item><term>-1</term><description>approx. 48 kbps</description></item>
            <item><term>0</term><description>approx. 64 kbps</description></item>
            <item><term>1</term><description>approx. 80 kbps</description></item>
            <item><term>2</term><description>approx. 96 kbps</description></item>
            <item><term>3</term><description>approx. 112 kbps</description></item>
            <item><term>4</term><description>approx. 128 kbps</description></item>
            <item><term>5</term><description>approx. 160 kbps</description></item>
            <item><term>6</term><description>approx. 192 kbps</description></item>
            <item><term>7</term><description>approx. 224 kbps</description></item>
            <item><term>8</term><description>approx. 256 kbps</description></item>
            <item><term>9</term><description>approx. 320 kbps</description></item>
            <item><term>10</term><description>approx. 498! kbps</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Bitrate">
            <summary>
            -b: Choose a nominal bitrate to encode at. Attempt to encode at a bitrate averaging this. Takes an argument in kbps.
            </summary>
            <remarks>By default, this produces a VBR encoding, equivalent to using -q or --quality.
            See the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseManagedBitrate"/> option to use a managed bitrate targetting the selected bitrate.
            <para>Unless the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> is set to <see langword="false"/> this property is NOT evaluated.</para>
            <para>To use ABR (average bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate"/> to 0 (zero).</para>
            <para>To use CBR (constant bitrate): specify the exact same value also for <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseManagedBitrate">
            <summary>
            --managed: Enable the bitrate management engine. This will allow much greater control over the precise bitrate(s) used, but encoding will be much slower.
            Don't use it unless you have a strong need for detailed control over bitrate, such as for streaming.
            </summary>
            <remarks>This property is not evaluated unless you set <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> to <see langword="false"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate">
            <summary>
             -m: Specify a minimum bitrate (in kbps). Useful for encoding for a fixed-size channel. If set to 0 (zero, default) this property is not evaluated!
            </summary>
            <remarks>Unless the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> is set to <see langword="false"/> this property is NOT evaluated.
            <para>To use ABR (average bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate"/> to 0 (zero) and only specify a value for <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Bitrate"/>.</para>
            <para>To use CBR (constant bitrate): specify the exact same value as you set for <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Bitrate"/> also for <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate">
            <summary>
            -M:  Specify a maximum bitrate in kbps. Useful for streaming applications.  If set to 0 (zero, default) this property is not evaluated!
            </summary>
            <remarks>Unless the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_UseQualityMode"/> is set to <see langword="false"/> this property is NOT evaluated.
            <para>To use ABR (average bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate"/> to 0 (zero) and only specify a value for <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Bitrate"/>.</para>
            <para>To use CBR (constant bitrate): specify the exact same value as you set for <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Bitrate"/> also for <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MinBitrate"/> and <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_MaxBitrate"/>.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_TargetSampleRate">
            <summary>
            --resample: target sampling frequency of output (in Hz). Set to 0 (zero) if you don't want to do any resampling (default).
            </summary>
            <remarks>Specify the target sample rate in Hz, e.g. 22050 for 22.05kHz.
            <para>You might use one of the <see cref="T:Un4seen.Bass.Misc.BaseEncoder.SAMPLERATE"/> constants here.</para>
            <para>Use the <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Converter"/> property to control which resampling engine should be used.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGG_Converter">
            <summary>
            -S: Specify the resampling engine to be used. Options are: Best, Medium (default) and Fast.
            </summary>
            <remarks>Will only be used, if you have specified a <see cref="F:Un4seen.Bass.Misc.EncoderOGG.OGG_TargetSampleRate"/> which is not 0 (zero).</remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderOGG.OGGConverter">
            <summary>
            The OGG resampling engine mode (Best, Medium. Fast).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGGConverter.Best">
            <summary>
            Best resampling quality.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGGConverter.Medium">
            <summary>
            Medium resampling quality (default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOGG.OGGConverter.Fast">
            <summary>
            Fast resampling, low quality.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderNeroAAC">
            <summary>
            Encoder class implementation for the Nero Digital AAC encoder using "neroAacEnc.exe".
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AAC"/> encoder type.
            <para>The NeroAac Encoder must be downloaded separately (e.g. from <a href="http://www.nero.com/eng/technologies-aac-codec.html">www.nero.com</a>).</para>
            <para>Since "neroAacEnc.exe" does support 8-, 16-, and 32-bit(IEEE float) sample data as input, no BASS_ENCODE_FP_ flag will be used.</para>
            <para>Make sure to set the NERO_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderNeroAAC.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderNeroAAC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>There are two versions: "neroEncAac.exe" and "neroAacEnc_sse2.exe" out there (one is highly optimized for SSE etc.). 
            This encoder implementation supports both versions see the <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseSSE"/> property for details.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderNeroAAC.#ctor(System.Int32)">
            <summary>
            Creates an instance of a Nero Digital AAC encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements AAC encoding (BASS_CTYPE_STREAM_AAC).
            <pata>This encoder can NOT be used for streaming, since it does not support STDOUT!</pata>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderNeroAAC.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "neroAacEnc.exe" or "neroAacEnc_sse2.exe" (depending on your <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseSSE"/> setting) exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderNeroAAC.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "Nero Digital Aac Encoder (BASS_CTYPE_STREAM_AAC)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderNeroAAC.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_AAC is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderNeroAAC.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".m4a").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderNeroAAC.SupportsSTDOUT">
            <summary>
            Nero Digital Aac does NOT implement STDOUT, so FASLE is always returned.
            </summary>
            <remarks>This encoder can NOT be used for streaming, since it does not support STDOUT!</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderNeroAAC.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all NERO_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the NERO_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderNeroAAC.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>No matter if you are encoding in CBR (see <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseCBR"/>) or VBR (default) the properties <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_Bitrate"/> value will be used to return the effective bitrate value.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderNeroAAC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual Nero Digial Aac encoder. 
            </summary>
            <param name="proc">Must be always <see langword="null"/> = no callback - since this encoder does NOT support STDOUT.</param>
            <param name="user">N/A - ignorred.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderNeroAAC.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with no flags, meaning a Wave header will be send to the encoder to specify the bitrate, number of channels and samplerate.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderNeroAAC.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseSSE">
            <summary>
            Specifies, if the "neroAacEnc.exe" (<see langword="false"/>, default) or the "neroAacEnc_sse2.exe" (<see langword="true"/>) command-line tool should be used.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other NERO_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other NERO_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseQualityMode">
            <summary>
            Use Quality-Mode? (default is <see langword="false"/>).
            </summary>
            <remarks>
            <para>When using the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseQualityMode"/> is set to <see langword="true"/>) you only specify a quality factor via <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_Quality"/> and the bitrate parameter (<see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_Bitrate"/>) is ignored.</para>
            <para>When you turn off Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseQualityMode"/> is set to <see langword="false"/>, default) the bitrate parameter is evaluated and the <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_Quality"/> parameter is ignored!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_Quality">
            <summary>
            -q: Specify quality between 0.00 (low) and 1.00 (high) (default=0.4), instead of specifying a particular bitrate (<see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_Bitrate"/>).
            </summary>
            <remarks>This is an alternative mode of operation. Fractional qualities (e.g. 0.75) are permitted.
            <para>If you enable the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseQualityMode"/> is set to <see langword="true"/>) only this value is being evaluated.</para>
            <para>If you disable the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseQualityMode"/> is set to <see langword="false"/>, default) this value is being ignored.</para>
            <para>Here is a list about approximate Quality to Bitrate mappings:
            <list type="table">
            <listheader><term>Quality:</term><description>Bitrate:</description></listheader>
            <item><term>0.0</term><description>approx. 13 kbps</description></item>
            <item><term>0.1</term><description>approx. 25 kbps</description></item>
            <item><term>0.2</term><description>approx. 52 kbps</description></item>
            <item><term>0.3</term><description>approx. 83 kbps</description></item>
            <item><term>0.4</term><description>approx. 130 kbps</description></item>
            <item><term>0.5</term><description>approx. 180 kbps</description></item>
            <item><term>0.6</term><description>approx. 227 kbps</description></item>
            <item><term>0.7</term><description>approx. 269 kbps</description></item>
            <item><term>0.8</term><description>approx. 316 kbps</description></item>
            <item><term>0.9</term><description>approx. 362 kbps</description></item>
            <item><term>1.0</term><description>approx. 408! kbps</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_Bitrate">
            <summary>
            -br: Choose a nominal bitrate to encode at. Attempt to encode at a bitrate averaging this. Takes an argument in kbps.
            </summary>
            <remarks>By default, this produces a VBR encoding.
            See the <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseCBR"/> option to use a managed bitrate targetting a constant bitrate.
            <para>Unless the <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseQualityMode"/> is set to <see langword="false"/> this property is NOT evaluated.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseCBR">
            <summary>
            -cbr: Enables the constant bitrate mode (default is <see langword="false"/>). When enabled CBR is generated, else VBR is generated.
            </summary>
            <remarks>This property is not evaluated unless you set <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_UseQualityMode"/> to <see langword="false"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_2Pass">
            <summary>
            -2pass: Enables two-pass encoding mode. Note that two-pass mode requires a physical file as input, rather than STDIN.
            </summary>
            <remarks>This property is only evaluated, if an <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> is being used.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_2PassPeriod">
            <summary>
            -2passperiod: Overrides two-pass encoding bitrate averaging period, in milliseconds. Specify 0 (zero) to use least restrictive value possible (default).
            </summary>
            <remarks>This property is only evaluated, if <see cref="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_2Pass"/> is set to <see langword="true"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_LC">
            <summary>
            -lc: Forces use of LC AAC profile, HE features disabled (default is <see langword="false"/>).
            </summary>
            <remarks>Note that the switches (-lc, -he, -hev2) should not be used.
            Optimal AAC profile is automatically determined from quality/bitrate settings when no override is specified.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_HE">
            <summary>
            -he: Forces use of HE AAC profile, HEv2 features disabled (default is <see langword="false"/>).
            </summary>
            <remarks>Note that the switches (-lc, -he, -hev2) should not be used.
            Optimal AAC profile is automatically determined from quality/bitrate settings when no override is specified.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_HEv2">
            <summary>
            -hev2: Forces use of HEv2 AAC profile (default is <see langword="false"/>).
            </summary>
            <remarks>Note that the switches (-lc, -he, -hev2) should not be used.
            Optimal AAC profile is automatically determined from quality/bitrate settings when no override is specified.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderNeroAAC.NERO_HintTrack">
            <summary>
            -hinttrack: Generates an RTP hint track in output MP4 file (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderQTAAC">
            <summary>
            Encoder class implementation for the QuickTime AAC encoder using "qtaacenc.exe".
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AAC"/> encoder type.
            <para>The QuickTime AAC Encoder must be downloaded separately (e.g. from <a href="http://tmkk.pv.land.to/qtaacenc/">here</a>).</para>
            <para>Since "qtaacenc.exe" does support 8-, 16-, and 32-bit(IEEE float) sample data as input, no BASS_ENCODE_FP_ flag will be used.</para>
            <para>Make sure to set the QT_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderQTAAC.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderQTAAC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>Note: <a href="http://www.apple.com/quicktime/download/">QuickTime v7.6.4</a> or higher and maybe the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2">VC2008 runtime</a> needs to be installed on your machine.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderQTAAC.#ctor(System.Int32)">
            <summary>
            Creates an instance of a QuickTime AAC encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements AAC encoding (BASS_CTYPE_STREAM_AAC).
            <pata>This encoder can NOT be used for streaming, since it does not support STDOUT!</pata>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderQTAAC.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "qtaacenc.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
            <remarks>To check, if QuickTime is also installed you might call the <see cref="M:Un4seen.Bass.Misc.EncoderQTAAC.IsQuickTimeInstalled"/> method.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderQTAAC.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "QuickTime AAC Encoder (BASS_CTYPE_STREAM_AAC)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderQTAAC.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_AAC is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderQTAAC.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".m4a").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderQTAAC.SupportsSTDOUT">
            <summary>
            QuickTime AAC does NOT implement STDOUT, so FASLE is always returned.
            </summary>
            <remarks>This encoder can NOT be used for streaming, since it does not support STDOUT!</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderQTAAC.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all QT_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the QT_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderQTAAC.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>No matter in which <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Mode"/> you are encoding, the properties <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Bitrate"/> value will be used to return the effective bitrate value.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderQTAAC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual QuickTime AAC encoder. 
            </summary>
            <param name="proc">Must be always <see langword="null"/> = no callback - since this encoder does NOT support STDOUT.</param>
            <param name="user">N/A - ignorred.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderQTAAC.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with no flags, meaning a Wave header will be send to the encoder to specify the bitrate, number of channels and samplerate.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderQTAAC.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderQTAAC.IsQuickTimeInstalled">
            <summary>
            Determines, if QuickTime is installed on your machine (only work on Windows using the Full Framework).
            </summary>
            <returns><see langword="true"/> is returned if QuickTime is installed - else <see langword="false"/> is returned.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other QT_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other QT_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_QualityMode">
            <summary>
            Gets or Sets which encoder quality mode to use? (default is High).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Mode">
            <summary>
            --cbr, --abr, --cvbr or --tvbr: Gets or Sets the QuickTime encoding mode (CBR, ABR, CVBR, TVBR).
            </summary>
            <remarks>
            
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Bitrate">
            <summary>
            --cbr, --abr or --cvbr: Choose a nominal bitrate to encode at for the selected <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Mode"/> (only used for CBR, ABR and CVBR).
            Attempt to encode at a bitrate averaging this. Takes an argument in kbps.
            </summary>
            <remarks>By default, this produces a CBR encoding.
            <para>This property is only evaluated if the <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Mode"/> is set to CBR, ABR or CVBR.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Quality">
            <summary>
            --tvbr: Choose the quality value for the selected <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Mode"/> (only used for TVBR).
            Available quality range is 0-127 (default is 65).
            </summary>
            <remarks>
            <para>This property is only evaluated if the <see cref="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Mode"/> is set to TVBR.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_HE">
            <summary>
            --he: Enable the high efficiency (HE-AAC) encoder. Cannot be used with True VBR mode.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QT_Samplerate">
            <summary>
            --samplerate: Control the samplerate of the output file.
            </summary>
            <remarks>Use one of the following values:
            <para>-1: Automatically choose the optimum samplerate according to the bitrate and quality.</para>
            <para>0: Keep the original samplerate (if possible, default).</para>
            <para>value: Specify the preferred samplerate in Hz. Allowed values are: 8000, 11250, 12000, 16000, 22050, 24000, 32000, 44100, 48000.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderQTAAC.QTMode">
            <summary>
            The QuickTime encoding mode (CBR, ABR, CVBR, TVBR).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QTMode.CBR">
            <summary>
            Encode in CBR mode. Available bitrate range is 16-320kbps(stereo), 8-256kbps(mono). 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QTMode.ABR">
            <summary>
            Encode in ABR mode. Available bitrate range is 16-320kbps(stereo), 8-256kbps(mono). 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QTMode.CVBR">
            <summary>
            Encode in Constrained VBR mode. Available bitrate range is 16-320kbps(stereo), 8-256kbps(mono).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QTMode.TVBR">
            <summary>
            Encode in True VBR mode. Available quality range is 0-127 (default).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderQTAAC.QTQuality">
            <summary>
            The QuickTime quality engine mode (Fast, Normal, High).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QTQuality.Fastest">
            <summary>
            Choose the profile for the fastest encoding speed (identical to --fast in the current QT AAC encoder). 
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QTQuality.Fast">
            <summary>
            Choose the profile focused on the encoding speed.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QTQuality.Normal">
            <summary>
            Choose the profile with moderate speed and quality.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QTQuality.High">
            <summary>
            Choose the profile focused on the encoding quality (default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderQTAAC.QTQuality.Highest">
            <summary>
            Choose the profile for the highest encoding quality (identical to --high in the current QT AAC encoder).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderWMA">
            <summary>
            Encoder class implementation for the Windows Media Audio codec using <see cref="N:Un4seen.Bass.AddOn.Wma"/>.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WMA"/> encoder type.
            <para>Since WMA does support 8-, 16-, and 32-bit(IEEE float) sample data as input, no BASS_ENCODE_FP_ flag will be used.</para>
            <para>Make sure to set the WMA_xxx flags before calling <see cref="M:Un4seen.Bass.Misc.EncoderWMA.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>As with all encoders in this framework also this WMA encoder always automatically encodes sample data (by using a DSP callback). So there is no need to manually send any sample data to the encoder.</para>
            <para>The <see cref="P:Un4seen.Bass.Misc.EncoderWMA.WMA_Notify"/> property can be used to setup a <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC"/> to receive notifications about the encoder status (e.g. when the encoder died).</para>
            <para>IMPORTANT NOTE: This implementation uses BASSwma. So make sure the BASSwma add-on and dll is available.</para>
            </remarks>
            <example>
            Manual encoding of a stream (here in lossless format):
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.wav", 0, 0, BASSFlag.BASS_STREAM_DECODE);
            EncoderWMA wma = new EncoderWMA(stream);
            wma.WMA_UseVBR = true;
            wma.WMA_VBRQuality = 100; // lossless
            wma.InputFile = null;	  //STDIN
            wma.OutputFile = "test.wma";
            wma.Start(null, IntPtr.Zero, false);
            // encode all the data right away
            Utils.DecodeAllData(stream, true);
            wma.Stop();
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.wav", 0, 0, BASSFlag.BASS_STREAM_DECODE)
            Dim wma As New EncoderWMA(stream)
            wma.WMA_UseVBR = True
            wma.WMA_VBRQuality = 100 ' lossless
            wma.InputFile = Nothing 'STDIN
            wma.OutputFile = "test.wma"
            wma.Start(Nothing, IntPtr.Zero, False)
            ' encode all the data right away
            Utils.DecodeAllData(stream, True)
            wma.Stop()
            </code>
            Automatic encoding to the local network (using a recording handle):
            <code lang="C#">
            EncoderWMA wma = new EncoderWMA(_recHandle);
            wma.WMA_UseVBR = false;
            wma.WMA_Bitrate = 64;
            wma.WMA_UsePro = true;
            wma.WMA_UseNetwork = true;
            wma.WMA_NetworkPort = 80;
            wma.WMA_NetworkClients = 10;
            wma.InputFile = null;  //STDIN
            wma.OutputFile = null; //STDOUT
            wma.Start(null, IntPtr.Zero, false);
            ...
            // encodes until this is called
            wma.Stop();
            </code>
            <code lang="VB">
            Dim wma As New EncoderWMA(_recHandle)
            wma.WMA_UseVBR = False
            wma.WMA_Bitrate = 64
            wma.WMA_UsePro = True
            wma.WMA_UseNetwork = True
            wma.WMA_NetworkPort = 80
            wma.WMA_NetworkClients = 10
            wma.InputFile = Nothing 'STDIN
            wma.OutputFile = Nothing 'STDOUT
            wma.Start(Nothing, IntPtr.Zero, False)
            ...
            ' encodes until this is called
            wma.Stop()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWMA.#ctor(System.Int32)">
            <summary>
            Creates an instance of a Windows Media Audio encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements WMA encoding.
            <pata>This encoder might be used for streaming, since it does support STDOUT, however make sure to select an WMA codec matching your <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> implementation!</pata>
            <para>Please note, that there is also a special <see cref="T:Un4seen.Bass.Misc.WMAcast"/> implementation.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.IsActive">
            <summary>
            Gets a value indicating if the encoder has been started (see <see cref="M:Un4seen.Bass.Misc.EncoderWMA.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>) and is active - else <see langword="false"/> will be returned.
            </summary>
            <remarks>This implementation first gets the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/>.
            If the encoder handle is valid (non-zero) <see langword="true"/> will be returned. In all other cases <see langword="false"/> is returned.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.IsPaused">
            <summary>
            Gets a value indicating if the encoder has been paused (see <see cref="M:Un4seen.Bass.Misc.EncoderWMA.Pause(System.Boolean)"/>) - else <see langword="false"/> will be returned.
            </summary>
            <remarks>While the encoder is paused no data will be written to the encoder, however the input channel is not paused.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWMA.Stop">
            <summary>
            Stops the encoder (if started).
            </summary>
            <returns>Returns <see langword="true"/>, if the encoder was successfully stopped - else <see langword="false"/> is returned.</returns>
            <remarks>Internally <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeClose(System.Int32)"/> is called using the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/>.
            After the encoder was stopped successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> is set to 0 (zero). 
            If the encoder was not stopped the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> is left unchanged.
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.EncoderWMA.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWMA.Pause(System.Boolean)">
            <summary>
            Pauses or resumes an encoder
            </summary>
            <param name="paused"><see langword="true"/> = pause the encoder, <see langword="false"/> = resume the encoder.</param>
            <returns>Will always return <see langword="true"/>.</returns>
            <remarks>Since WMA does not natively support pausing/resuming of the encoder, this special implementation will suppress writing data to the encoder while the encoder is paused.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.EncoderExists">
            <summary>
            This property always return <see langword="true"/>, since we use the native BASSWMA add-on.
            </summary>
            <remarks>Make sure to have "basswma.dll" available in your path.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWMA.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "Audio Compression Manager (BASS_CTYPE_STREAM_WAV)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_WAV is always returned.
            </summary>
            <remarks>Since it will actually be impossible to return the real ACM codec related channel type, we will instead always use Here BASS_CTYPE_STREAM_WAV.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".wma").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.SupportsSTDOUT">
            <summary>
            WMA does implement STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>This encoder might be used for streaming, since it does support STDOUT. 
            However, the selected WMA codec must match the <see cref="T:Un4seen.Bass.Misc.StreamingServer"/> implementation!
            <para>Please note, that there is also a special <see cref="T:Un4seen.Bass.Misc.WMAcast"/> implementation.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.EncoderCommandLine">
            <summary>
            Returns an empty string, since WMA does not use any command-line tool, but instead directly uses the <see cref="N:Un4seen.Bass.AddOn.Wma"/> add-on.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>This implementation always returns the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_Bitrate"/> member.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWMA.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual WMA encoder. 
            </summary>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.EncoderWMA.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpen(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,Un4seen.Bass.AddOn.Wma.WMENCODEPROC,System.IntPtr)"/>, <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenFile(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String)"/>, <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenNetwork(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenPublish(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32,System.String,System.String,System.String)"/> (resp. <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenNetworkMulti(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32[],System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_EncodeOpenPublishMulti(System.Int32,System.Int32,Un4seen.Bass.AddOn.Wma.BASSWMAEncode,System.Int32[],System.String,System.String,System.String)"/> if the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_MultiBitrate"/> was set) internally depending on the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseNetwork"/> and <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> properties.
            <para>If you have specified a file name for <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> (instead of <see langword="null"/>), a default stream using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> will be created internally and all it's data will immediately be encoded (meaning the <paramref name="paused"/> flag will have no effect).</para>
            <para>After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).</para>
            <para>The <paramref name="proc"/> is only used, if you have set the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseNetwork"/> property to <see langword="false"/> and are encoding to STDOUT (<see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> must be <see langword="null"/>).
            If in such case the <paramref name="proc"/> is invoked you need to be aware of one special WMA case:
            When encoding begins, an initial header is given. When encoding is completed, an updated header is given (the initial header should be replaced by the updated one).
            The WMA header can be recognized by a negative 'length' parameter, whereas positive 'length' values will indicate plain WMA encoded data.
            </para>
            <para>Internally, the sending of sample data to the encoder is implemented via a DSP callback on the channel. 
            That means when you play the channel (or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> if it's a decoding channel), the sample data will be sent to the encoder at the same time.
            So in contrast to the standard <see cref="T:Un4seen.Bass.AddOn.Wma.BassWma">BASSwma</see> implementation there is no need to manually feed (write) any sample data to the encoder.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.
            You might use the <see cref="P:Un4seen.Bass.Misc.EncoderWMA.WMA_Notify"/> property to get informed when this happens.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.Force16Bit">
            <summary>
            Always returns false, since this encoder doesn't supports this flag. Use the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_Use24Bit"/> property instead.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWMA.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWMA.SetTag(System.String,System.String)">
            <summary>
            Sets a tag in a WMA encoding.
            </summary>
            <param name="tag">The tag to set.
            <para>The standard WMA header tags are as follows:</para>
            <list type="table">
            <item><term>Title</term><description>Content title.</description></item>
            <item><term>Author</term><description>Name of the content author (Artist).</description></item>
            <item><term>Description</term><description>Description of the content.</description></item>
            <item><term>Rating</term><description>Content rating.</description></item>
            <item><term>Copyright</term><description>Content copyright message.</description></item>
            <item><term>WM/AlbumTitle</term><description>Album title.</description></item>
            <item><term>WM/PromotionURL</term><description>URL to an HTML page containing related information.</description></item>
            <item><term>WM/AlbumCoverURL</term><description>URL to an HTML page containing an image of the album cover.</description></item>
            <item><term>WM/Genre</term><description>Genre of the music.</description></item>
            <item><term>WM/Year</term><description>Year of publication of the music.</description></item>
            </list>
            </param>
            <param name="value">The tag's text/data.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.ByteSend">
            <summary>
            Gets the total bytes send to the server.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWMA.WMA_Notify">
            <summary>
            Gets ot Sets a <see cref="T:Un4seen.Bass.AddOn.Enc.ENCODENOTIFYPROC"/> on the WMA encoder.
            </summary>
            <remarks>
            A WMA encoder can only have one notification callback set. Subsequent calls to this property can be used to change the callback, or disable notifications (<see langword="null"/>).
            <para>The WMA encoder's status can be one of the following (see <see cref="T:Un4seen.Bass.AddOn.Enc.BASSEncodeNotify"/>):
            <list type="table">
            <item><term>BASS_ENCODE_NOTIFY_ENCODER</term><description>The encoder died.</description></item>
            <item><term>BASS_ENCODE_NOTIFY_CAST</term><description>Cast server connection died (or any other mystery problem).</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_Bitrate">
            <summary>
            Choose a total bitrate to encode at. Takes an argument in kbps (default is 128 kbps).
            </summary>
            <remarks>By default, this produces a CBR encoding.
            <para>To use VBR (variable bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseVBR"/> to <see langword="true"/> and specify a <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_VBRQuality"/>.</para>
            <para>To use CBR (constant bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseVBR"/> to <see langword="false"/> (default).</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_Use24Bit">
            <summary>
            Use 24-bit encoding? (Default is <see langword="false"/>).
            </summary>
            <remarks>If set to <see langword="true"/>, the output will be in 24-bit resolution.
            <para>The WMA codec expects 16-bit or 24-bit sample data, but BASSWMA will accept 8-bit, 16-bit or floating-point data, and convert it to the appropriate format. 
            Of course, it makes little sense to encode 8-bit or 16-bit data in 24-bit.</para>
            <para>When this parameter is set to <see langword="true"/> the WMA 10 Professional codec will be used automatically (regardless of the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePro"/> setting).</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePro">
            <summary>
            Use the WMA 10 Professional format? (Default is <see langword="false"/> = WMA 9 format).
            </summary>
            <remarks>Windows Media Audio 10 Professional (WMA 10 Pro) is the most flexible Windows Media audio codec available – supporting profiles that include everything from full-resolution 24-bit/96 kHz audio in stereo, 5.1 channel, or even 7.1 channel surround sound, to highly efficient mobile capabilities at 24 Kbps to 96 Kbps for stereo, and 128 Kbps to 256 Kbps for 5.1-channel sound. WMA 10 Pro offers incredible quality for consumers using high-fidelity hardware and 5.1 channel surround sound-equipped computers -– and for consumers playing audio content on their mobile devices. WMA 10 Pro supports streaming, progressive download, or download-and-play delivery at 128 to 768 Kbps.
            <para>WMA Pro also offers dynamic range control using the maximum and average audio amplitudes that are calculated during the encoding process. Using the Quiet Mode feature in Windows Media Player 9 and later, users can hear either the full dynamic range, a medium difference range up to 12 decibels (dB) above the average, or a little difference range up to 6 dB above the average.</para>
            <para>If a user tries to play back a file that was encoded using the 5.1 channel, 24-bit, 96 kHz sampling capabilities, but does not have a system or sound card that supports multi-channel or high-resolution sound, multiple channels are combined into stereo audio (for example, 16-bit, two channel audio), ensuring that users get the best playback experience their systems can provide.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_ForceStandard">
            <summary>
            When set to <see langword="true"/>, the WMA standard codec (WMA 9) will be forced to use (default is <see langword="false"/>).
            </summary>
            <remarks>If neither this or the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePro"/> flag is specified, then either codec (WMA 9 or WMA 10 Pro) could be used (whichever supports the requested sample format and bitrate).
            <para>If the flag is set to <see langword="true"/>, the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_Use24Bit"/> and <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePro"/> options will not be evaluated!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseVBR">
            <summary>
            Enable the VBR (variable bitrate) mode (default is <see langword="false"/>).
            </summary>
            <remarks>If not set to <see langword="true"/> the CBR (constant bitrate) mode will be used.
            <para>When making a VBR stream, the bitrate is only allowed to vary within set limits:
            <list type="table">
            <listheader><term>Samplerate:</term><description>Bitrate:</description></listheader>
            <item><term>48kHz</term><description>Stereo: 112-384kbps  Mono: 56-192kbps</description></item>
            <item><term>44.1kHz or 32kHz</term><description>Stereo: 192-384kbps  Mono: 96-192kbps</description></item>
            <item><term>24kHz, 22.05kHz or 16kHz</term><description>Stereo/Mono: 8-160kbps</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_VBRQuality">
            <summary>
            Set a VBR quality level from 1 (very low) to 100 (lossless).
            </summary>
            <remarks>The higher the number the better the quality.
            <para>If the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseVBR"/> is set to <see langword="false"/>, this property is not evaluated!</para>
            <para>VBR and lossless encoding are currently only available at 44100hz stereo (48000hz too, but with limited quality settings). 
            To encode other sample formats, the data will first have to be resampled before.</para>
            <para>Here is a list of quality level to approximate kbps mapping:
            <list type="table">
            <listheader><term>Quality:</term><description>Bitrate:</description></listheader>
            <item><term>10%</term><description>65 kbps</description></item>
            <item><term>25%</term><description>77 kbps</description></item>
            <item><term>50%</term><description>89 kbps</description></item>
            <item><term>75%</term><description>140 kbps</description></item>
            <item><term>100%</term><description>778 kbps</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_TargetSampleRate">
            <summary>
            Currently only used internally.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_TargetNumChans">
            <summary>
            Currently only used internally.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseNetwork">
            <summary>
            Enables WMA encoding to the network (default is <see langword="false"/>).
            </summary>
            <remarks>When encoding to a network it will not be possible to receive the encoded data (see <see cref="M:Un4seen.Bass.Misc.EncoderWMA.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>).
            However, you might use the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> streaming server implementation in this case.
            <para>Also note, that if streaming to a network you must set the properties: <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkPort"/> and optionally <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkClients"/>.</para>
            <para>If you set the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> property to <see langword="false"/> (default), encoding will directly be done to the network (pull mode): <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkClients"/> users might connect directly to the specified <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkPort"/>.</para>
            <para>Set the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> property to <see langword="true"/>, in order to enable encoding to a publishing point on a Windows Media server (push mode).</para>
            <para>If you are using this encoder in the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class, there will be no need to set this member, since it will automatically be done by the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class implementation!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish">
            <summary>
            Enables WMA encoding to a publishing point on a Windows Media server.
            </summary>
            <remarks>This property will only be evaluated, if <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseNetwork"/> is set to <see langword="true"/>.
            <para>When encoding to a network it will not be possible to receive the encoded data (see <see cref="M:Un4seen.Bass.Misc.EncoderWMA.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>).
            However, you might use the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> streaming server implementation in this case.</para>
            <para>Also note, that if streaming to a Windows Media server you must set the properties: <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishUrl"/>, <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishUsername"/> and <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishPassword"/>.</para>
            <para>If you set the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> property to <see langword="false"/> (default), encoding will directly be done to the network (pull mode): <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkClients"/> users might connect directly to the specified <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkPort"/>.</para>
            <para>Set the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> property to <see langword="true"/>, in order to enable encoding to a publishing point on a Windows Media server (push mode).</para>
            <para>If you are using this encoder in the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class, there will be no need to set this member, since it will automatically be done by the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class implementation!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_MultiBitrate">
            <summary>
            Here you can specify an array of encoding bitrates (in bits per second!) to use in case you selected <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseNetwork"/> or <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> - default is <see langword="null"/>.
            </summary>
            <remarks>If set to <see langword="null"/> the multi bitrate option for network encoding or encoding to a publishing point on a Windows Media server is not used, but only the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_Bitrate"/> is evaluated.
            <para>If you assign an array of bitrates (in bits per second!) here (e.g. = new int[2] {64000, 128000}) these bitrates will be used instead on the <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_Bitrate"/> property!</para>
            <para>This property will only be evaluated in case you set <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseNetwork"/> or <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> to <see langword="true"/>.</para>
            <para>If you are using this encoder in the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class, there will be no need to set this member, since it will automatically be done by the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class implementation!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkPort">
            <summary>
            The network port number for clients to conenct to (only used, if <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseNetwork"/> is set to <see langword="true"/> and <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> is set to <see langword="false"/>) - default is 8080.
            </summary>
            <remarks>
            <para>If you are using this encoder in the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class, there will be no need to set this member, since it will automatically be done by the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class implementation!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_NetworkClients">
            <summary>
            The maximum number of clients (up to 50) that can be connected (only used, if <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UseNetwork"/> is set to <see langword="true"/> and <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> is set to <see langword="false"/>) - default is 1.
            </summary>
            <remarks>
            <para>If you are using this encoder in the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class, there will be no need to set this member, since it will automatically be done by the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class implementation!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishUrl">
            <summary>
            URL of the publishing point on the Windows Media server.
            </summary>
            <remarks>This property is only evaluated, if <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> is set to <see langword="true"/>.
            <para>If you are using this encoder in the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class, there will be no need to set this member, since it will automatically be done by the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class implementation!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishUsername">
            <summary>
            Username to use in connecting to the server.
            </summary>
            <remarks>If either this or <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishPassword"/> is <see langword="null"/>, then no username/password is sent to the server.
            <para>This property is only evaluated, if <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> is set to <see langword="true"/>.</para>
            <para>If you are using this encoder in the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class, there will be no need to set this member, since it will automatically be done by the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class implementation!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishPassword">
            <summary>
            Password to use in connecting to the server.
            </summary>
            <remarks>If either this or <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_PublishUsername"/> is <see langword="null"/>, then no username/password is sent to the server.
            <para>This property is only evaluated, if <see cref="F:Un4seen.Bass.Misc.EncoderWMA.WMA_UsePublish"/> is set to <see langword="true"/>.</para>
            <para>If you are using this encoder in the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class, there will be no need to set this member, since it will automatically be done by the <see cref="T:Un4seen.Bass.Misc.WMAcast"/> class implementation!</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderTooLAME">
            <summary>
            Encoder class implementation for MPEG Audio Layer II (MP2) encoding using "tooLAME.exe".
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP2"/> encoder type.
            <para>"tooLAME.exe" must be downloaded separately (e.g. from <a href="http://www.rarewares.org/mp3.html">www.rarewares.org</a> or <a href="http://toolame.sourceforge.net">toolame.sourceforge.net</a>).
             tooLAME is a very good and stable freeware MP2 encoder.</para>
            <para>Since tooLAME does only support 16-bit sample data as input, the BASS_ENCODE_FP_16BIT flag will be used.
            This will be used, whenever the underlying channel handle is float or the BASS_CONFIG_FLOATDSP option has been set.</para>
            <para>Make sure to set the TWO_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderTooLAME.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderTooLAME.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderTooLAME.#ctor(System.Int32)">
            <summary>
            Creates an instance of a tooLAME encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements MP2 encoding (BASS_CTYPE_STREAM_MP2).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTooLAME.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "tooLAME.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderTooLAME.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "tooLAME Encoder (BASS_CTYPE_STREAM_MP2)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTooLAME.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_MP2 is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTooLAME.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".mp2").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTooLAME.SupportsSTDOUT">
            <summary>
            tooLAME implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>tooLAME support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTooLAME.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all TOO_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the TOO_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTooLAME.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>No matter if you are using CBR- or VBR-Mode (see <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_UseVBR"/>) the <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_Bitrate"/> value will be used to return the effective bitrate value.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderTooLAME.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual tooLAME encoder. 
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            </summary>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. 
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderTooLAME.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderTooLAME.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_NOHEAD and BASS_ENCODE_FP_16BIT flag.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTooLAME.Force16Bit">
            <summary>
            Always returns true, since this encoder only supports receiving 16 bit sample data.
            </summary>
            <remarks>32-bit float channels are supported, since they are automatically converted to 16-bit integer sample data before sending them to the encoder.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderTooLAME.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other TOO_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other TOO_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_Mode">
            <summary>
            -m: The encoding mode (Stereo, Joint stereo, DualChannel, Mono, default is Auto).
            </summary>
            <remarks>For MPEG Audio Layer II, not all combinations of total bitrate and mode are allowed. See the following table:
            <list type="table">
            <listheader><term>Bitrate (kbps):</term><description>Allowed Modes:</description></listheader>
            <item><term>32, 48, 56</term><description>mono only</description></item>
            <item><term>64</term><description>all modes</description></item>
            <item><term>80</term><description>mono only</description></item>
            <item><term>96, 112, 128, 160, 192</term><description>all modes</description></item>
            <item><term>224, 256, 320, 384</term><description>stereo only</description></item>
            </list>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_Downmix">
            <summary>
            -a: Downmix from stereo to mono? (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_Bitrate">
            <summary>
            -b: Choose a total bitrate to encode at. Takes an argument in kbps (default is 192 kbps).
            </summary>
            <remarks>By default, this produces a CBR encoding.
            <para>To use VBR (variable bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_UseVBR"/> to <see langword="true"/> and specify a <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_VBRLevel"/>.</para>
            <para>To use CBR (constant bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_UseVBR"/> to <see langword="false"/> (default).</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_UseVBR">
            <summary>
            Enable the VBR (variable bitrate) mode (default is <see langword="false"/>).
            </summary>
            <remarks>If not set to <see langword="true"/> the CBR (constant bitrate) mode will be used.
            <para>When making a VBR stream, the bitrate is only allowed to vary within set limits:
            <list type="table">
            <listheader><term>Samplerate:</term><description>Bitrate:</description></listheader>
            <item><term>48kHz</term><description>Stereo: 112-384kbps  Mono: 56-192kbps</description></item>
            <item><term>44.1kHz or 32kHz</term><description>Stereo: 192-384kbps  Mono: 96-192kbps</description></item>
            <item><term>24kHz, 22.05kHz or 16kHz</term><description>Stereo/Mono: 8-160kbps</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_VBRLevel">
            <summary>
            -v: Enable VBR and set a quality level from -50 to 50 (default is disbaled).
            </summary>
            <remarks>The higher the number the better the quality. Maximum range is -50 to 50 but useful range is -10 to 10. See vbr documentation file for details.
            <para>If the <see cref="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_UseVBR"/> is set to <see langword="false"/>, this property is not evaluated!</para>
            <para>Using for example "-v -5" will force the encoder to favour the lower bitrate. Whereas using "-v 5" will force the encoder to favour the upper bitrate.
            The value can actually be any number. The larger the number, the greater the bitrate bias.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_PsycModel">
            <summary>
            -P: The psychoacoustic model (PAM) tooLAME should use (-1 to 4).
            </summary>
            <remarks>Choose the psycho-acoustic model to use (-1 to 4). Model number -1 turns off psycho-acoustic modelling and uses fixed default values instead.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_ATH">
            <summary>
            -l: Set the ATH level. Default level is 0.0 (which will not use the property).
            </summary>
            <remarks>ATH means Absolute Thresholds of Hearing. The ATH value raises/lowers the ATH by this many dB.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_Quick">
            <summary>
            -q: Enable quick mode (if value is geater than 0 (zero)). Only re-calculate psycho-acoustic model every specified number of frames (default is 0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_Copyright">
            <summary>
            -c: Turn on Copyright flag in output bitstream (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_Original">
            <summary>
            -o: Mark as Original in output bitstream (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_Protect">
            <summary>
            -e: Enable CRC error protection in output bitstream. An extra 16-bit checksum is added to each frame (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_Padding">
            <summary>
            -r: force padding bit/frame off (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_DeEmphasis">
            <summary>
            -d: Set the de-emphasis type (None, CCIT, 50/15ms). Default is None.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOO_DABExtension">
            <summary>
            -D: Add DAB extensions of specific length (specify 0 (zero) to not specify a DAB extension, default).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderTooLAME.TOOMode">
            <summary>
            The general tooLAME encoding mode (stereo, joint stereo, mono etc.).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOMode.Auto">
            <summary>
            Default is JointStereo or Stereo depending on bitrate.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOMode.Stereo">
            <summary>
            Stereo
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOMode.JointStereo">
            <summary>
            Force LR stereo on all frames
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOMode.DualChannel">
            <summary>
            Force dual channel all frames
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOMode.Mono">
            <summary>
            Mono
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderTooLAME.TOOPsycModel">
            <summary>
            The psychoacoustic model tooLAME should use (-1 to 4, default is 1).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOPsycModel.Default">
            <summary>
            Default model will be selected by encoder.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOPsycModel.None">
            <summary>
            Psychoacoustic Model: -1 (turns off psycho-acoustic modelling and uses fixed default values instead)
            <para>This PAM doesn't actually look at the samples being encoded to decide upon the output values. There is simply a set of 32 default values which are used, regardless of input.</para>
            <para>Pros: Faaaast. Low complexity. Surprisingly good. "Surprising" in that the other PAMs go to the effort of calculating FFTs and subbands and masking, and this one does absolutely nothing. Zip. Nada. Diddly Squat. This model might be the best example of why it is hard to make a good model - if having no computations sounds OK, how do you improve on it?</para>
            <para>Cons: Absolutely no attempt to consider any of the masking effects that would help the audio sound better.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOPsycModel.Fixed">
            <summary>
            Psychoacoustic Model: 0
            <para>This PAM looks at the sizes of the scalefactors for the audio and combines it with the Absolute Threshold of Hearing (ATH) to make the 32 SMR values.</para>
            <para>Pros: Faaast. Low complexity.</para>
            <para>Cons: This model has absolutely no mathematical basis and does not use any perceptual model of hearing. It simply juggles some of the numbers of the input sound to determine the values.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOPsycModel.ISO_PAM1">
            <summary>
            Psychoacoustic Model: 1
            <para>This PAM is from the ISO standard. Just because they are the standard, doesn't mean that they are any good. Look at LAME which basically threw out the MP3 standard psycho models and made their own (GPSYCHO).</para>
            <para>Pros: A reference for future PAMs.</para>
            <para>Cons: Terrible ISO code, buggy tables, poor documentation.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOPsycModel.ISO_PAM2">
            <summary>
            Psychoacoustic Model: 2
            <para>This PAM is from the ISO standard. Just because they are the standard, doesn't mean that they are any good. Look at LAME which basically threw out the MP3 standard psycho models and made their own (GPSYCHO).</para>
            <para>Pros: A reference for future PAMs.</para>
            <para>Cons: Terrible ISO code, buggy tables, poor documentation.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOPsycModel.PAM3">
            <summary>
            Psychoacoustic Model: 3
            <para>A re-implementation of psychoacoustic model 1. ISO11172 was used as the guide for re-writing this PAM from the ground up.</para>
            <para>Pros: No more obscure tables of values from the ISO code. Hopefully a good base to work upon for tweaking PAMs.</para>
            <para>Cons: At the moment, doesn't really sound any better than PAM1.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOOPsycModel.PAM4">
            <summary>
            Psychoacoustic Model: 4
            <para>A cleaned up version of PAM2.</para>
            <para>Pros: Faster than PAM2. No more obscure tables of values from the ISO standard. Hopefully a good base to work from for improving the PAMs.</para>
            <para>Cons: Still has the same "warbling"/"Davros" problems as PAM2.</para>
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderTooLAME.TOODeEmphMode">
            <summary>
            The general tooLAME encoding mode (stereo, joint stereo, mono etc.).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOODeEmphMode.None">
            <summary>
            No Emphasis
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOODeEmphMode.CCIT_J17">
            <summary>
            Emphasis according to CCIT J.17
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTooLAME.TOODeEmphMode.Five">
            <summary>
            Emphasis 50/15 ms
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderTwoLAME">
            <summary>
            Encoder class implementation for MP2 TwoLAME encoding using "twolame.exe".
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MP2"/> encoder type.
            <para>"twolame.exe" must be downloaded separately (e.g. from <a href="http://www.rarewares.org/mp3.html">www.rarewares.org</a> or <a href="http://www.twolame.org">www.twolame.org</a>). TwoLAME is a fork of the tooLAME project, so don't mix it up. TwoLAME is a very good and stable freeware MP2 encoder.</para>
            <para>Make sure to set the TWO_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderTwoLAME.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderTwoLAME.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderTwoLAME.#ctor(System.Int32)">
            <summary>
            Creates an instance of a TwoLAME encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements MP2 encoding (BASS_CTYPE_STREAM_MP2).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTwoLAME.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "twolame.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderTwoLAME.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "TwoLAME Encoder (BASS_CTYPE_STREAM_MP2)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTwoLAME.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_MP2 is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTwoLAME.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".mp2").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTwoLAME.SupportsSTDOUT">
            <summary>
            TwoLAME implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>TwoLAME support broadcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTwoLAME.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all TWO_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the TWO_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderTwoLAME.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>No matter if you are using CBR- or VBR-Mode (see <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_UseVBR"/>) the <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Bitrate"/> value will be used to return the effective bitrate value.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderTwoLAME.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual TwoLAME encoder. 
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            </summary>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. 
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderTwoLAME.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderTwoLAME.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_NOHEAD flag and if your input is 32-bit float the BASS_ENCODE_FP_32BIT flag is used.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderTwoLAME.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other TWO_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other TWO_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Mode">
            <summary>
            -m: The encoding mode (Stereo, Joint stereo, DualChannel, Mono, default is Auto).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Scale">
            <summary>
            --scale: Scale input data (multiply PCM data). Set to 1.0 (default) for no scaling.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Downmix">
            <summary>
            -a: Downmix from stereo to mono? (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Bitrate">
            <summary>
            -b: Choose a total bitrate to encode at. Takes an argument in kbps (default is 256 kbps).
            </summary>
            <remarks>By default, this produces a CBR encoding.
            <para>To use VBR (variable bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_UseVBR"/> to <see langword="true"/> and optionally specify a <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_MaxBitrate"/> value.</para>
            <para>To use CBR (constant bitrate): set <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_UseVBR"/> to <see langword="false"/> (default). The <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_MaxBitrate"/> value will be ignored in this case.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_MaxBitrate">
            <summary>
            -B:  Specify a maximum bitrate in kbps when in VBR mode.
            </summary>
            <remarks>If set to 0 (zero, default) or if the <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_UseVBR"/> is set to <see langword="false"/>, this property is not evaluated!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_UseVBR">
            <summary>
            -v: Enable the VBR (variable bitrate) mode (default is <see langword="false"/>).
            </summary>
            <remarks>If not set to <see langword="true"/> the CBR (constant bitrate) mode will be used.
            <para>When making a VBR stream, the bitrate is only allowed to vary within set limits:
            <list type="table">
            <listheader><term>Samplerate:</term><description>Bitrate:</description></listheader>
            <item><term>48kHz</term><description>Stereo: 112-384kbps  Mono: 56-192kbps</description></item>
            <item><term>44.1kHz or 32kHz</term><description>Stereo: 192-384kbps  Mono: 96-192kbps</description></item>
            <item><term>24kHz, 22.05kHz or 16kHz</term><description>Stereo/Mono: 8-160kbps</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_VBRLevel">
            <summary>
            -V: Enable VBR and set a quality level from -50 to 50 (default is disbaled).
            </summary>
            <remarks>The higher the number the better the quality. Maximum range is -50 to 50 but useful range is -10 to 10. See vbr documentation file for details.
            <para>If a value outside the range or the <see cref="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_UseVBR"/> is set to <see langword="false"/>, this property is not evaluated!</para>
            <para>Using for example "-V -5" will force the encoder to favour the lower bitrate. Whereas using "-V 5" will force the encoder to favour the upper bitrate.
            The value can actually be any integer. The larger the number, the greater the bitrate bias.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_PsycModel">
            <summary>
            -P: The psychoacoustic model (PAM) TwoLAME should use (-1 to 4).
            </summary>
            <remarks>Choose the psycho-acoustic model to use (-1 to 4). Model number -1 turns off psycho-acoustic modelling and uses fixed default values instead.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_ATH">
            <summary>
            -l: Set the ATH level. Default level is 0.0 (which will not use the property).
            </summary>
            <remarks>ATH means Absolute Thresholds of Hearing. The ATH value raises/lowers the ATH by this many dB.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Quick">
            <summary>
            -q: Enable quick mode (if value is geater than 0 (zero)). Only re-calculate psycho-acoustic model every specified number of frames (default is 0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Copyright">
            <summary>
            -c: Turn on Copyright flag in output bitstream (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_NonOriginal">
            <summary>
            -o: Turn off Original flag in output bitstream (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Protect">
            <summary>
            -p: Enable CRC error protection in output bitstream. An extra 16-bit checksum is added to each frame (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Padding">
            <summary>
            -d: Turn on padding in output bitstream (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Reserve">
            <summary>
            -R: Reserve specified number of bits in the each from of the output bitstream (default is 0, which will not use this property).
            </summary>
            <remarks>The value must be a multiple of 8 (e.g. 8, 16, 24, 32, ...).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_DeEmphasis">
            <summary>
            -e: Set the de-emphasis type (None, CCIT, 50/15ms). Default is None.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWO_Energy">
            <summary>
            -E: Turn on energy level extensions (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderTwoLAME.TWOMode">
            <summary>
            The general TwoLAME encoding mode (stereo, joint stereo, mono etc.).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOMode.Auto">
            <summary>
            Default is JointStereo or Stereo depending on bitrate.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOMode.Stereo">
            <summary>
            Stereo
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOMode.JointStereo">
            <summary>
            Force LR stereo on all frames
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOMode.DualChannel">
            <summary>
            Force dual channel all frames
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOMode.Mono">
            <summary>
            Mono
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderTwoLAME.TWOPsycModel">
            <summary>
            The psychoacoustic model TwoLAME should use (-1 to 4, default is 3).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOPsycModel.Default">
            <summary>
            Default model will be selected by encoder.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOPsycModel.None">
            <summary>
            Psychoacoustic Model: -1 (turns off psycho-acoustic modelling and uses fixed default values instead)
            </summary>
            <remarks>This PAM doesn't actually look at the samples being encoded to decide upon the output values. There is simply a set of 32 default values which are used, regardless of input.
            <para>Pros: Faaaast. Low complexity. Surprisingly good. "Surprising" in that the other PAMs go to the effort of calculating FFTs and subbands and masking, and this one does absolutely nothing. Zip. Nada. Diddly Squat. This model might be the best example of why it is hard to make a good model - if having no computations sounds OK, how do you improve on it?</para>
            <para>Cons: Absolutely no attempt to consider any of the masking effects that would help the audio sound better.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOPsycModel.Fixed">
            <summary>
            Psychoacoustic Model: 0
            </summary>
            <remarks>This PAM looks at the sizes of the scalefactors for the audio and combines it with the Absolute Threshold of Hearing (ATH) to make the 32 SMR values.
            <para>Pros: Faaast. Low complexity.</para>
            <para>Cons: This model has absolutely no mathematical basis and does not use any perceptual model of hearing. It simply juggles some of the numbers of the input sound to determine the values.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOPsycModel.ISO_PAM1">
            <summary>
            Psychoacoustic Model: 1
            </summary>
            <remarks>This PAM is from the ISO standard. Just because they are the standard, doesn't mean that they are any good. Look at LAME which basically threw out the MP3 standard psycho models and made their own (GPSYCHO).
            <para>Pros: A reference for future PAMs.</para>
            <para>Cons: Terrible ISO code, buggy tables, poor documentation.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOPsycModel.ISO_PAM2">
            <summary>
            Psychoacoustic Model: 2
            </summary>
            <remarks>This PAM is from the ISO standard. Just because they are the standard, doesn't mean that they are any good. Look at LAME which basically threw out the MP3 standard psycho models and made their own (GPSYCHO).
            <para>Pros: A reference for future PAMs.</para>
            <para>Cons: Terrible ISO code, buggy tables, poor documentation.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOPsycModel.PAM3">
            <summary>
            Psychoacoustic Model: 3
            </summary>
            <remarks>A re-implementation of psychoacoustic model 1. ISO11172 was used as the guide for re-writing this PAM from the ground up.
            <para>Pros: No more obscure tables of values from the ISO code. Hopefully a good base to work upon for tweaking PAMs.</para>
            <para>Cons: At the moment, doesn't really sound any better than PAM1.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWOPsycModel.PAM4">
            <summary>
            Psychoacoustic Model: 4
            </summary>
            <remarks>A cleaned up version of PAM2.
            <para>Pros: Faster than PAM2. No more obscure tables of values from the ISO standard. Hopefully a good base to work from for improving the PAMs.</para>
            <para>Cons: Still has the same "warbling"/"Davros" problems as PAM2.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderTwoLAME.TWODeEmphMode">
            <summary>
            The general TwoLAME encoding mode (stereo, joint stereo, mono etc.).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWODeEmphMode.None">
            <summary>
            No Emphasis
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWODeEmphMode.CCIT_J17">
            <summary>
            Emphasis according to CCIT J.17
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderTwoLAME.TWODeEmphMode.Five">
            <summary>
            Emphasis 50/15 ms
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderFAAC">
            <summary>
            Encoder class implementation for AAC encoding using faac.exe.
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_AAC"/> encoder type.
            <para>FAAC (faac.exe) must be downloaded separately (e.g. from <a href="http://www.rarewares.org/aac.html">www.rarewares.org</a>).</para>
            <para>Make sure to set the FAAC_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderFAAC.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderFAAC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFAAC.#ctor(System.Int32)">
            <summary>
            Creates an instance of a FAAC encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>FAAC implements AAC encoding (BASS_CTYPE_STREAM_AAC).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFAAC.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "lame.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFAAC.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "FAAC Encoder (BASS_CTYPE_STREAM_AAC)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFAAC.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_AAC is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFAAC.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".m4a").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFAAC.SupportsSTDOUT">
            <summary>
            FAAC implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>FAAC support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFAAC.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all FAAC_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the FAAC_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFAAC.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>When using the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_UseQualityMode"/> is set to <see langword="true"/>, default) you only need to specify a quality factor via <see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Quality"/> and the bitrate parameters <see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Bitrate"/> is ignored. 
            In this case the effective bitrate will be calculated automatically according to the FAAC specification.</para>
            <para>When you turn off Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_UseQualityMode"/> is set to <see langword="false"/>) the bitrate parameters is evaluated!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFAAC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual FAAC encoder. 
            </summary>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. 
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderFAAC.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderFAAC.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_NOHEAD flag.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFAAC.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFAAC.Quality2Kbps(System.Int32)">
            <summary>
            Converts a quality setting (between 10 and 500) to an approx. bitrate (in kbps).
            </summary>
            <param name="q">The FACC quality level to convert (between 10 and 500).</param>
            <returns>The rounded approximate bitrate in kbps.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other FAAC_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other FAAC_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_UseQualityMode">
            <summary>
            Gets or Sets, if the Quality mode (<see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Quality"/>) will be used (default is <see langword="false"/>).
            </summary>
            <remarks>
            <para>When using the Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_UseQualityMode"/> is set to <see langword="true"/>) you only specify a quality factor via <see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Quality"/> and the bitrate parameter (<see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Bitrate"/>) is ignored.</para>
            <para>When you turn off Quality-Mode (<see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_UseQualityMode"/> is set to <see langword="false"/>, default) the bitrate parameter is evaluated and the <see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Quality"/> parameter is ignored!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Quality">
            <summary>
            -q: Set default variable bitrate (VBR) quantizer quality in percent.
            </summary>
            <remarks>Default: 100, averages at approx. 120 kbps VBR for a normal stereo input file with 16 bit and 44.1 kHz sample rate.
            Max. value is 500, Min. value is 10.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Bitrate">
            <summary>
            -b: Set average bitrate (ABR) to approximately bitrate in kbps.
            <para>Max. value is 152 kbps/stereo with a 16 kHz cutoff, can be raised with a higher -c <see cref="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Bandwidth"/> setting).</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_Bandwidth">
            <summary>
            -c: Set the bandwidth in Hz (default: -1 automatic, i.e. adapts maximum value to input sample rate).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_WrapMP4">
            <summary>
            -w: Wrap AAC data in MP4 container (default is <see langword="true"/>, generating an .m4a output).
            </summary>
            <remarks>Setting this property to <see langword="false"/> will generate an AAC stream (TAGs are not supported with AAC).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_EnableTNS">
            <summary>
            --tns: Enable coding of TNS, temporal noise shaping (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_NoMidSide">
            <summary>
            --no-midside: Don't use mid/side coding (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_MpegVersion">
            <summary>
            --mpeg-vers: Force AAC MPEG version 2 or 4 (-1 use default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_ObjectType">
            <summary>
            --obj-type: AAC object type. "LC" (Low Complexity, default), "Main" or "LTP" (Long Term Prediction).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_BlockType">
            <summary>
            --shortctl: Enforce block type (0 = both (default), 1 = no short; 2 = no long).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFAAC.FAAC_RawBitstream">
            <summary>
            -r: Generate raw AAC bitstream (i.e. without any headers, default is <see langword="false"/>).
            </summary>
            <remarks>Not advised! RAW AAC files are practically useless!</remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderFLAC">
            <summary>
            Encoder class implementation for FLAC encoding using "flac.exe".
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_FLAC"/> encoder type.
            <para>"flac.exe" must be downloaded separately (e.g. from <a href="http://www.rarewares.org/lossless.html">www.rarewares.org</a>). FLAC also needs the "libmmd.dll", which is also available at rarewares.org.</para>
            <para>Make sure to set the FLAC_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderFLAC.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderFLAC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            <para>FLAC 'cuesheets' and the 'skip' and 'until' properties are not supported in this implementation by default, but you might add them with the <see cref="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_CustomOptions"/> parameter.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFLAC.#ctor(System.Int32)">
            <summary>
            Creates an instance of a FLAC encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements FLAC encoding (BASS_CTYPE_STREAM_FLAC).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFLAC.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "flac.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFLAC.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "FLAC Encoder (.flac)" or "FLAC Encoder (.ogg)" depending on <see cref="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_UseOgg"/>.</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFLAC.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_FLAC is returned
            (or BASS_CTYPE_STREAM_FLAC_OGG if <see cref="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_UseOgg"/> is set to to <see langword="true"/>).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFLAC.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".flac").
            </summary>
            <remarks>If you set the option <see cref="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_UseOgg"/> to <see langword="true"/> this will return ".ogg" instead.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFLAC.SupportsSTDOUT">
            <summary>
            FLAC implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>FLAC support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFLAC.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all FLAC_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the FLAC_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderFLAC.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>Since FLAC is a lossless format, no matter what compression mode you are using, the bitrate will always be taken from the raw input format.
            Meaning the original <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelSampleRate"/> and the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelNumChans"/> will be evaluated in order to calculate the effective bitrate.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFLAC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual FLAC encoder. 
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            </summary>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. 
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderFLAC.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderFLAC.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_NOHEAD and if using 32-bit float input with the BASS_ENCODE_FP_24BIT flag.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderFLAC.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other FLAC_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other FLAC_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_UseOgg">
            <summary>
            --ogg: When encoding, generate Ogg FLAC output instead of native FLAC (default is <see langword="false"/>).
            </summary>
            <remarks>Ogg FLAC streams are FLAC streams wrapped in an Ogg transport layer.
            The resulting file should have an '.ogg' extension and will still be decodable by flac.
            <para>When setting this property to <see langword="true"/>, the <see cref="P:Un4seen.Bass.Misc.EncoderFLAC.DefaultOutputExtension"/> will be changed to ".ogg".</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_Verify">
            <summary>
            -V: Verify a correct encoding by decoding the output in parallel and comparing to the original (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_Lax">
            <summary>
            --lax: Allow encoder to generate non-Subset files (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_ReplayGain">
            <summary>
            --replay-gain: Calculate ReplayGain values and store in Vorbis comments (default is <see langword="false"/>).
            </summary>
            <remarks>Title gains/peaks will be computed for each file. 
            NOTE: this option may also leave a few extra bytes in the PADDING block.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_Padding">
            <summary>
            -P: Tell the encoder to write a PADDING metadata block of the given length (in bytes) after the STREAMINFO block (default is off).
            </summary>
            <remarks>This is useful if you plan to tag the file later with an APPLICATION block; instead of having to rewrite the entire file later just to insert your block, you can write directly over the PADDING block.
            Note that the total length of the PADDING block will be 4 bytes longer than the length given, because of the 4 metadata block header bytes.
            You can force no PADDING block at all to be written with "--no-padding".
            The encoder writes a PADDING block of 4096 bytes by default.
            <para>If you set <see cref="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_NoPadding"/> to <see langword="true"/>, this option will have no effect.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_NoPadding">
            <summary>
            --no-padding: Suppress writing a PADDING block of 4096 bytes (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_Blocksize">
            <summary>
            -b: Specify the blocksize in samples (the default is 1152 for -l 0, else 4608).
            </summary>
            <remarks>This must be one of 192, 576, 1152, 2304, 4608, 256, 512, 1024, 2048, 4096, 8192, 16384, or 32768 (unless "--lax" is used).
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderFLAC.FLAC_CompressionLevel">
            <summary>
            -0..-8: Defines the compression level (default is 5) between 0 (fast) and 8 (best).
            </summary>
            <remarks>Although FLAC is a lossless format you can adjust the compression level.
            A higher compression level (max. is 8) means a smaller output, whereas a lower compression level (min. is 0) means faster results.</remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderWavPack">
            <summary>
            Encoder class implementation for WavPack encoding using "wavpack.exe".
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_WV"/> encoder type.
            <para>"wavpack.exe" must be downloaded separately (e.g. from <a href="http://www.wavpack.com">www.wavpack.com</a> or <a href="http://www.rarewares.org/lossless.html">www.rarewares.org</a>).</para>
            <para>Make sure to set the WV_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderWavPack.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderWavPack.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWavPack.#ctor(System.Int32)">
            <summary>
            Creates an instance of a WavPack encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements WavPack encoding (BASS_CTYPE_STREAM_WV).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWavPack.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "wavpack.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWavPack.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "WavPack Encoder (BASS_CTYPE_STREAM_WV)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWavPack.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_WV is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWavPack.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".wv").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWavPack.SupportsSTDOUT">
            <summary>
            WavPack does implement STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>WavPack does support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWavPack.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all WV_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the WV_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderWavPack.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            <para>Since WavPack can be used as a hybrid lossy or fully lossless encoder, the <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseHybrid"/> will be used to determine the bitrate in kbps.</para>
            <para>If the <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseHybrid"/> is set to <see langword="true"/> (lossy), the bitrate is directly taken from the <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_HybridBitrate"/> property.</para>
            <para>If the <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseHybrid"/> is set to <see langword="false"/> (lossless), the the original <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelSampleRate"/>, <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelBitwidth"/> and the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.ChannelNumChans"/> will be evaluated in order to calculate the effective bitrate.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWavPack.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual WavPack encoder. 
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            </summary>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. 
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderWavPack.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderWavPack.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with no flags, meaning a Wave header will be send to the encoder to specify the bitrate, number of channels and samplerate (8, 16 and 32 bit are supported).</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderWavPack.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other WV_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other WV_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseHybrid">
            <summary>
            Enable hybrid compression? (default is <see langword="false"/>)
            </summary>
            <remarks>When set to <see langword="true"/>, the <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_HybridBitrate"/> property is used.
            If set to <see langword="false"/> (default) WavPack is pure lossless, which means that the .wv file contains all the information that was in the original .wav file.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_HybridBitrate">
            <summary>
            -b: Hybrid compression, 24 - 9600 kbits/second (default is 1024 kbps).
            </summary>
            <remarks>Only used, if <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseHybrid"/> is set to <see langword="true"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_CreateCorrectionFile">
            <summary>
            -c: Create correction file (.wvc) for hybrid mode (=lossless, default is <see langword="false"/>)
            </summary>
            <remarks>Only used, if <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseHybrid"/> is set to <see langword="true"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_MaximumHybridCompression">
            <summary>
            -cc: Maximum hybrid compression (hurts lossy quality and decode speed, default is <see langword="false"/>).
            </summary>
            <remarks>Only used, if <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseHybrid"/> is set to <see langword="true"/>.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_FastMode">
            <summary>
            -f: Fast mode (fast, but some compromise in compression ratio, default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_HighQuality">
            <summary>
            -h: High quality (best compression in all modes, but slower, default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_IgnoreLength">
            <summary>
            -i: Ignore length in wav header (no pipe output allowed, default is <see langword="false"/>).
            </summary>
            <remarks>Sometimes If the length in the wav headers that is provided is not correct. 
            In this case use this option to force WavPack to ignore the header and accept the actual length. 
            Because WavPack must seek to the beginning of the output file to write the correct length, this option cannot be used with piped output.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_JointStereo">
            <summary>
            -j0: Joint-stereo override (<see langword="false"/> = left/right, <see langword="true"/> = mid/side, default is <see langword="true"/>).
            </summary>
            <remarks>WavPack normally defaults to joint stereo (sometimes called mid/side) in which the left and right channels are combined to form an alternate representation (essentially L+R and L-R) that compresses better in lossless mode and improves quality in lossy mode. 
            This option allows this feature to be forced either on or off.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_LowPriority">
            <summary>
            -l: Run at low priority (for smoother multitasking, default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_ComputeMD5">
            <summary>
            -m: Compute and store MD5 signature of raw audio data (default is <see langword="false"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_CalcAvgPeakQuant">
            <summary>
            -n: Calculate average and peak quantization noise (hybrid only, default is <see langword="false"/>).
            </summary>
            <remarks>Only used, if <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseHybrid"/> is set to <see langword="true"/>.
            <para>This causes WavPack to calculate the average and peak quantization noise generated in the lossy version of the hybrid mode, both referenced in decibels below full scale. 
            While it is impossible to use this as a guide to determine the audibility of the noise, it is useful for comparing the various compression options and for comparing WavPack's lossy performance to other programs.
            Note that this option does not currently produce meaningfull results for floating point or multichannels files.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_PracticalFloat">
            <summary>
            -p = practical float storage (also 32-bit ints, not lossless, default is <see langword="false"/>).
            </summary>
            <remarks>This option reduces the storage of some floating-point data files by up to about 10% by eliminating some information that has virtually no effect on the audio data. 
            While this does technically make the compression lossy, it retains all the advantages of floating point data (>600 dB of dynamic range, no clipping, and 25 bits of resolution). 
            This also affects large integer compression by limiting the resolution to 24 bits.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_NewRiffHeader">
            <summary>
            -r: Generate new RIFF wav header (removing extra chunk info, default is <see langword="false"/>).
            </summary>
            <remarks>WavPack normally saves all the RIFF header information contained in the wav file (including any chunks after the audio data). 
            This is done so that WvUnpack.exe can restore the original wav files exactly. The -r option causes WavPack to discard the header contained in the source file (and any extra chunks) and generate a fresh wav header. 
            Obviously the source wav header is still used to determine the format and size of the file (i.e. this is not a "raw" mode).
            Note that for multichannel files a WAVEFORMATEXTENSIBLE header is generated whether the source file had one or not.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_NoiseShaping">
            <summary>
            -s: noise shaping override (hybrid only, -1.0 to 1.0, 0.0 = off = default)
            </summary>
            <remarks>Only used, if <see cref="F:Un4seen.Bass.Misc.EncoderWavPack.WV_UseHybrid"/> is set to <see langword="true"/>.
            <para>WavPack uses first-order noise shaping to improve the perceived quality of lossy files and to improve the hybrid lossless compression ratio. 
            Normally WavPack will choose the noise shaping most appropriate for the application, but this option allows the user to override the default. The parameter range is +/- 1.0, where positive values shift the noise higher in frequency and negative values shift the noise lower in frequency. Values very close to -1.0 are clipped to prevent problems associated with very high gain near DC</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_CopyTimestamp">
            <summary>
            -t: Copy input file's time stamp to output file (default is <see langword="false"/>).
            </summary>
            <remarks>Can only be used, if a <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is specified.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderWavPack.WV_ExtraProcessing">
            <summary>
            -x: Extra encode processing (optional n = 1-6 for more/less, 0 = default).
            </summary>
            <remarks>
            <para>Like previous versions of WavPack (and many other compressors), WavPack 4.31 normally works "symmetrically" in that encoding and decoding operate at about the same rate (regardless of the mode used). 
            However, WavPack now has an option to work "asymmetrically", so that extra processing can be done during encoding to provide better compression, but with NO corresponding cost to decoding performance!</para>
            <para>This is enabled with the -x option and provides an average improvement in CD music compression of about 1% in "fast" mode, about 0.5% in the normal mode, and about 0.25% in "high" mode. 
            Because the standard compression parameters are optimized for "normal" CD music audio, this option works best with "non-standard" audio (synthesized sounds, non-standard sampling rates, etc) where it can often achieve enormous gains. 
            It should be noted that this mode is not just a little slower than the regular mode - it is MUCH slower. 
            However, the fact that it has no effect on decode time could make it attractive in some situations.</para> 
            <para>The "extra" option provides a level of extra processing that has been optimized for the encoding mode selected (i.e. normal, "fast" or "high"). 
            This level can be overridden with the optional numeric parameter from 1 to 6, although this is not generally recommended.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderMPC">
            <summary>
            Encoder class implementation for MusePack MPC encoding using "mppenc.exe" resp. "mpcenc.exe".
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_MPC"/> encoder type.
            <para>"mppenc.exe" or "mpcenc.exe" must be downloaded separately (e.g. from <a href="http://www.musepack.net">www.musepack.net</a>).</para>
            <para>Note: "mpcenc.exe" is the default MusePack Stream Version 8 encoder. "mppenc.exe" is the MusePack Stream Version 7 encoder.
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderMPC.MPC_UseVersion7"/> property, if you want to use "mppenc.exe". By default "mpcenc.exe" (Stream Version 8) will be used.</para>
            <para>Make sure to set the MPC_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderMPC.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderMPC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            <para>This implementation does not use all possible tweaking switches, since they are mostly not recommended ny MusePack and since the default settings are already pretty much optimized.
            However, if you for what ever reason need to add you swicth, you can make use of the <see cref="F:Un4seen.Bass.Misc.EncoderMPC.MPC_CustomOptions"/> property.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMPC.#ctor(System.Int32)">
            <summary>
            Creates an instance of a MPC encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements MusePack encoding (BASS_CTYPE_STREAM_MPC).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMPC.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "mppenc.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMPC.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "MusePack Encoder (BASS_CTYPE_STREAM_MPC)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMPC.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_MPC is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMPC.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".mpc").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMPC.SupportsSTDOUT">
            <summary>
            MusePack does implement STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>MusePack does support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMPC.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all MPC_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the MPC_xxx settings.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderMPC.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            Since MusePack uses presets the appropriate bitrate associated with the <see cref="F:Un4seen.Bass.Misc.EncoderMPC.MPC_Preset"/> will be returned in any case.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMPC.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual MPC encoder. 
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle.
            </summary>
            <param name="proc">Optional callback function to receive the encoded data... <see langword="null"/> = no callback. 
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderMPC.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderMPC.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_FP_32BIT flag (since no 32bit floating point are supported), this also means a Wave header will be send to the encoder to specify the bitrate, number of channels and samplerate (8, 16, 24 and 32 bit are supported).</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderMPC.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPC_UseVersion7">
            <summary>
            Use "mppenc.exe" (Stream Version 7)?
            </summary>
            <remarks>
            By default "mpcenc.exe" (Stream Version 8) will be used. 
            Set this option to <see langword="true"/> in order to use "mppenc.exe" (Stream Version 7).
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPC_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderMPC.MPC_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other MPC_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderMPC.MPC_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPC_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderMPC.MPC_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other MPC_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderMPC.MPC_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPC_Preset">
            <summary>
            Quality preset (use one of the <see cref="T:Un4seen.Bass.Misc.EncoderMPC.MPCPreset"/> values, default is "standard").
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPC_Scale">
            <summary>
            --scale: Scale input signal by x (default: 1.00000, no scaling).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPC_Quality">
            <summary>
            --quality: Set Quality to x (default is 5, between 0 and 10).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPC_NMT">
            <summary>
            --nmt: Set NMT value to x dB (default is 6.5).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPC_TMN">
            <summary>
            --tmn: Set TMN value to x dB (default is 18.0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPC_PNS">
            <summary>
            --pns: Set PNS value to x dB (default is 0.0).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderMPC.MPCPreset">
            <summary>
            Profile options, Quality preset. To be used with <see cref="F:Un4seen.Bass.Misc.EncoderMPC.MPC_Preset"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPCPreset.telephone">
            <summary>
            lowest quality (typ.  60 kbps)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPCPreset.thumb">
            <summary>
            low quality/internet (typ.  90 kbps)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPCPreset.radio">
            <summary>
            medium (MP3) quality (typ. 130 kbps)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPCPreset.standard">
            <summary>
            high quality (default) (typ. 180 kbps)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPCPreset.xtreme">
            <summary>
            extreme high quality (typ. 210 kbps)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPCPreset.insane">
            <summary>
            extreme high quality (typ. 240 kbps)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderMPC.MPCPreset.braindead">
            <summary>
            extreme high quality (typ. 270 kbps)
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderOPUS">
            <summary>
            Encoder class implementation for Opus Interactive Audio Codec encoding using "opusenc.exe".
            </summary>
            <remarks>This class uses the <see cref="F:Un4seen.Bass.BASSChannelType.BASS_CTYPE_STREAM_OPUS"/> encoder type.
            <para>"opusenc.exe" must be downloaded separately (e.g. from <a href="http://www.opus-codec.org/">www.opus-codec.org</a>).</para>
            <para>Since opusenc.exe does not support 32-bit IEEE float sample data as input, the BASS_ENCODE_FP_24BIT will be used for highest quality.
            This will be used, whenever the underlying channel handle is 32-bit float or the BASS_CONFIG_FLOATDSP option has been set.</para>
            <para>Make sure to set the OPUS_xxx flags before retrieving the <see cref="P:Un4seen.Bass.Misc.EncoderOPUS.EncoderCommandLine"/> or calling <see cref="M:Un4seen.Bass.Misc.EncoderOPUS.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)"/>.</para>
            <para>This implementation uses the automatic DSP system for encoding. 
            Meaning the sending of sample data to the encoder is done automatically when you play the channel (<see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) or call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> (if it's a decoding channel).
            So there is no need to call <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Write(System.Int32,System.IntPtr,System.Int32)"/> manually!
            </para>
            <para>If you simply want to encode a physical file please also take a look to the <see cref="M:Un4seen.Bass.Misc.BaseEncoder.EncodeFile(System.String,System.String,Un4seen.Bass.Misc.BaseEncoder,Un4seen.Bass.Misc.BaseEncoder.ENCODEFILEPROC,System.Boolean,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOPUS.#ctor(System.Int32)">
            <summary>
            Creates an instance of a OPUS encoder implementation.
            </summary>
            <param name="channel">The channel handle... a HSTREAM, HMUSIC, or HRECORD.</param>
            <remarks>Implements OPUS encoding (BASS_CTYPE_STREAM_OPUS).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOPUS.EncoderExists">
            <summary>
            This property return <see langword="true"/>, if the file "opusenc.exe" exists in the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderDirectory"/> - else <see langword="false"/> is returned.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOPUS.ToString">
            <summary>
            Returns the name of the Encoder.
            </summary>
            <returns>Returns "OPUS Encoder (BASS_CTYPE_STREAM_OPUS)".</returns>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOPUS.EncoderType">
            <summary>
            Gets a value indicating the type of content. Here BASS_CTYPE_STREAM_OPUS is always returned.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOPUS.DefaultOutputExtension">
            <summary>
            This return the default extension of an output file for this encoder (".opus").
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOPUS.SupportsSTDOUT">
            <summary>
            "opusenc.exe" implements STDOUT, so <see langword="true"/> is always returned.
            </summary>
            <remarks>"opusenc.exe" support boradcast streaming.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOPUS.EncoderCommandLine">
            <summary>
            Gets the actual encoder command-line string (using all OPUS_xxx properties).
            </summary>
            <remarks>The encoder command-line is evaluating the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.InputFile"/> and <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> members 
            as well as the OPUS_xxx settings.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.EncoderOPUS.EffectiveBitrate">
            <summary>
            Returns the effective encoder bitrate (in kbps) of the output.
            </summary>
            <remarks>
            No matter in which mode (<see cref="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_Mode"/>) you are encoding only the <see cref="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_Bitrate"/> value will be used to return the effective bitrate value.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOPUS.Start(Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr,System.Boolean)">
            <summary>
            This method starts the actual OPUS encoder. 
            </summary>
            <param name="proc">Optional callback function to receive the encoded data (only valid, if <see cref="P:Un4seen.Bass.Misc.BaseEncoder.OutputFile"/> is set to <see langword="null"/>)... <see langword="null"/> = no callback.
            To have the encoded data received by a callback function, the encoder needs to be told to output to STDOUT (instead of a file), so <see cref="P:Un4seen.Bass.Misc.EncoderOPUS.SupportsSTDOUT"/> must return true.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <param name="paused">Start the encoder paused? If <see langword="true"/>, you might use <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Pause(System.Boolean)"/> to unpause (and really start the encoder).</param>
            <returns>Returns <see langword="true"/>, if the encoder was successfully started - else <see langword="false"/> is returned.</returns>
            <remarks>This method calls <see cref="M:Un4seen.Bass.AddOn.Enc.BassEnc.BASS_Encode_Start(System.Int32,System.String,Un4seen.Bass.AddOn.Enc.BASSEncode,Un4seen.Bass.AddOn.Enc.ENCODEPROC,System.IntPtr)"/> internally using the <see cref="P:Un4seen.Bass.Misc.EncoderOPUS.EncoderCommandLine"/>.
            After the encoder was started successfully the <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns a valid HENCODE handle. 
            If the encoder was not started successfully or was stopped <see cref="P:Un4seen.Bass.Misc.BaseEncoder.EncoderHandle"/> returns 0 (zero).
            <para>This implementation starts the encoder with the BASS_ENCODE_NOHEAD flag.</para>
            <para>If an encoder stops running prematurely, <see cref="M:Un4seen.Bass.Misc.BaseEncoder.Stop"/> should still be called to release resources that were allocated for the encoding.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.EncoderOPUS.SettingsString">
            <summary>
            Returns the string representation of the current encoder settings.
            </summary>
            <returns>The descriptive settings string.</returns>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_UseCustomOptionsOnly">
            <summary>
            Use the <see cref="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_CustomOptions"/> parameter string only (default=<see langword="false"/>).
            </summary>
            <remarks>Caution: If set to <see langword="true"/> no other OPUS_xxx options will be evaluated and ONLY the <see cref="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_CustomOptions"/> parameter string will be used!</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_CustomOptions">
            <summary>
            The custom parameter string, which should be used, if the <see cref="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_UseCustomOptionsOnly"/> property is set to <see langword="true"/>.
            </summary>
            <remarks>This property string will be appended to all other OPUS_xxx options, if the <see cref="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_UseCustomOptionsOnly"/> property is set to <see langword="false"/> (default).</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_Bitrate">
            <summary>
            -bitrate: Encoding bitrate in kbit/sec (6-256 per channel, default is 128 kpbs).
            </summary>
            <remarks>
            Depending on the <see cref="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_Mode"/> option this defines the managed target bitrate.
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_Mode">
            <summary>
            --vbr, --cvbr, --hard-cbr: The bitrate encoding mode to use (default is VBR).
            </summary>
            <remarks>For streaming the HardCBR mode is recommended.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_Complexity">
            <summary>
            --comp: Encoding computational complexity (0-10, default: 10).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_Framesize">
            <summary>
            --framesize: Maximum frame size in milliseconds (2.5, 5, 10, 20, 40, 60, default: 20).
            </summary>
            <remarks>
            Smaller framesizes achieve lower latency but less quality at a given bitrate.
            Sizes greater than 20ms are only interesting at fairly low bitrates. 
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_ExpectLoss">
            <summary>
            --expect-loss: Percentage packet loss to expect (0-100, default: 0).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_Downmix">
            <summary>
            --downmix-mono, --downmix-stereo: Downmix option? (default is None).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_MaxDelay">
            <summary>
            --max-delay: Maximum container delay in milliseconds (0-1000, default: 1000).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUS_Uncoupled">
            <summary>
            --uncoupled: Use one mono stream per channel (default is false).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderOPUS.OPUSDownmix">
            <summary>
            The OPUS downmix mode (None, Mono, Stereo).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSDownmix.None">
            <summary>
            No downmix.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSDownmix.Mono">
            <summary>
            --downmix-mono: Downmix to mono.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSDownmix.Stereo">
            <summary>
            --downmix-stereo : Downmix to stereo (if &gt;2 channels input).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderOPUS.OPUSFramesize">
            <summary>
            The OPUS framesize in milliseconds (2.5, 5, 10, 20, 40, or 60).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSFramesize.f2_5ms">
            <summary>
            Framesize 2.5
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSFramesize.f5ms">
            <summary>
            Framesize 5
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSFramesize.f10ms">
            <summary>
            Framesize 10
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSFramesize.f20ms">
            <summary>
            Framesize 20
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSFramesize.f40ms">
            <summary>
            Framesize 40
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSFramesize.f60ms">
            <summary>
            Framesize 60
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.EncoderOPUS.OPUSMode">
            <summary>
            The OPUS bitrate encoding mode (VBR, CVBR, CBR).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSMode.VBR">
            <summary>
            --vbr: Use variable bitrate encoding (default).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSMode.CVBR">
            <summary>
            --cvbr: Use constrained variable bitrate encoding.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.EncoderOPUS.OPUSMode.CBR">
            <summary>
            --hard-cbr: Use hard constant bitrate encoding.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.BaseDSP">
            <summary>
            Base class for all user defined DSP classes (e.g. <see cref="T:Un4seen.Bass.Misc.DSP_PeakLevelMeter"/>, <see cref="T:Un4seen.Bass.Misc.DSP_Gain"/> or your own DSP implementations).
            </summary>
            <remarks>This base class is not intended for direct use, but defines all abstract properties and methods which needs to be implemented by an actual DSP class.
            A derived class must implement: <see cref="M:Un4seen.Bass.Misc.BaseDSP.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>.
            <para>The properties <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelBitwidth"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelSampleRate"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelNumChans"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPHandle"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPProc"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.IsBypassed"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.IsAssigned"/>
            as well as the methods <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>, <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> and <see cref="M:Un4seen.Bass.Misc.BaseDSP.SetBypass(System.Boolean)"/> have been already implemented.</para>
            <para>You might use this base class to derive your own DSP implementations.
            In this case a derived class must implement the <see cref="M:Un4seen.Bass.Misc.BaseDSP.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method and might override the <see cref="M:Un4seen.Bass.Misc.BaseDSP.OnChannelChanged"/> method (e.g. in order to reset an internal buffer etc.).</para>
            <para>The whole DSP framework is based on the standard BASS DSP functionality.
            So as with all DSP's - the DSP is automatically freed whenever the source stream is freed, e.g. when calling <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/> or when using the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_AUTOFREE"/> flag.</para>
            </remarks>
            <example>
            This example shows a basic implementation of an own DSP class:
            <code lang="C#">
            public class DSP_MyDsp : BaseDSP
            {
            	// First Constructor overload
            	public DSP_MyDsp() : base()
            	{
            	}
            	// Second Constructor overload
            	public DSP_MyDsp(int channel, int priority) : base(channel, priority, 0)
            	{
            	}
            	
            	// example implementation of the DSPCallback method
            	unsafe public override void DSPCallback(int handle, int channel, IntPtr buffer, int length, IntPtr user)
            	{
            		if (IsBypassed)
            			return;
            			
            		if (ChannelBitwidth == 16)
            		{
            			// process the data
            			short *data = (short*)buffer;
            			for (int a = 0; a &lt; length/2; a++)
            			{
            				// your work goes here (16-bit sample data)
            			}
            		}
            		else if (ChannelBitwidth == 32)
            		{
            			// process the data
            			float *data = (float*)buffer;
            			for (int a = 0; a &lt; length/4; a++)
            			{
            				// your work goes here (32-bit sample data)
            			}
            		}
            		else
            		{
            			// process the data
            			byte *data = (byte*)buffer;
            			for (int a = 0; a &lt; length; a++)
            			{
            				// your work goes here (8-bit sample data)
            			}
            		}
            		// if you have calculated UI relevant data you might raise the event
            		// else comment out the following line
            		RaiseNotification();
            	}
            	
            	public override void OnChannelChanged()
            	{
            		// override this method if you need to react on channel changes
            		// e.g. usefull, if an internal buffer needs to be reset etc.
            	}
            	
            	public override string ToString()
            	{
            		return "My DSP";
            	}
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.#ctor">
            <summary>
            Default constructor. Not assigning a DSP yet.
            </summary>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            <para>If an instance of a derived class s being disposed, an already assigned DSP will automatically be removed from the channel.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.#ctor(System.Int32,System.Int32,System.IntPtr)">
            <summary>
            Default constructor, which already evaluates the channel handle and assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>If an instance of a derived class s being disposed, an already assigned DSP will automatically be removed from the channel.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid channel used.</exception>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.Dispose">
            <summary>
            Implement IDisposable.
            </summary>
            <remarks>Do not make this method virtual. A derived class should not be able to override this method.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.Finalize">
            <summary>
            Finalization code.
            </summary>
            <remarks>This destructor will run only if the Dispose method does not get called.
            It gives your base class the opportunity to finalize. Do not provide destructors in types derived from this class.</remarks>
        </member>
        <member name="E:Un4seen.Bass.Misc.BaseDSP.Notification">
            <summary>
            Event handler used to notify that the DSP has processed some data.
            </summary>
            <remarks>This event might be used to get notified, that the DSP has processed some data and that for example a UI needs to be updated in order to reflect this.
            <para>Note: This implementation ensures, that the event will be executed in the main thread the subscriber executes in!
            So when subscribing to this event from UI thread, the specified event delegate will also be called in that UI thread.</para>
            <para>In a DSP implementation you need to call <see cref="M:Un4seen.Bass.Misc.BaseDSP.RaiseNotification"/> in order to fire this event.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle">
            <summary>
            Gets or Sets the channel that the DSP is being applied to.
            </summary>
            <remarks>If the DSP has already been assigned, changing the channel will automatically reassign the DSP to the new channel.
            <para>A DSP will automatically be removed, if the channel is being freed.
            Therefore this member might return a channel handle which is not active anymore. You might use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> to check, if a channel is still active.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid channel used.</exception>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.ChannelInfo">
            <summary>
            Gets the <see cref="T:Un4seen.Bass.BASS_CHANNELINFO"/> of the assigned <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.ChannelBitwidth">
            <summary>
            This property returns the actual bitwidth of the sample data of the channel (e.g. 8, 16, 32).
            </summary>
            <remarks>BASS supports 8/16/32-bit sample data, so if a WAV file, for example, uses another sample resolution, it'll have to be converted by BASS.
            This bitwidth represents the bitwidth which is used by BASS (e.g. in a DSP callback delegate) and does not represent the original bitwidth of the channel.
            The bitwidth used by BASS is determined how the underlying channel handle was created (e.g. using <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/> with the <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_8BITS"/> or <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_FLOAT"/> flag)
            and if the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_FLOATDSP"/> option has been set.
            If non of the above was used, by default 16 bits per sample are used.
            <para>However this bitwidth is the bitwidth in use when sending sample data to the <see cref="M:Un4seen.Bass.Misc.BaseDSP.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>.
            If for example the <see cref="F:Un4seen.Bass.BASSConfig.BASS_CONFIG_FLOATDSP"/> or the <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_FLOAT"/> option have been used, the DSP would receive 32-bit float samples.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.ChannelSampleRate">
            <summary>
            This property returns the actual sample rate in Hz of the sample data BASS is using with the channel (e.g. 44100).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.ChannelNumChans">
            <summary>
            This property returns the actual number of channles of the sample data BASS is using with the channel (e.g. 1=mono, 2=stereo, etc.).
            </summary>
            <remarks>BASS supports multi-channel sample data, so make sure the actual DSP implementation supports multi-channel too.
            If the DSP does not support multi-channel make sure that you are using non-multi-channel handles only.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority">
            <summary>
            Sets or reassigns the priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.
            </summary>
            <remarks>If the DSP has already been assigned, changing the priority will immediately reassig the DSP to the new priority.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.User">
            <summary>
            Gets or Sets the value of the user instance data to pass to the callback function (see <see cref="M:Un4seen.Bass.Misc.BaseDSP.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.DSPHandle">
            <summary>
            Returns the actual DSP handle (or 0, if the DSP has not been assigned to the channel).
            </summary>
            <remarks>Caution: This member is not intended for direct use - but has more of an informal character.
            <para>A DSP will automatically be removed, if the channel is being freed.
            Therefore this member might return a dsp handle which is not active anymore. You might use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> to check, if a channel is still active.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.DSPProc">
            <summary>
            Returns the actual <see cref="T:Un4seen.Bass.DSPPROC"/> (callback delegate) which is used by the DSP.
            </summary>
            <remarks>This callback delegate is being created when a DSP instance is being created.
            <para>Caution: This member is not intended for direct use - but has more of an informal character.
            However, you might use the delegate, if you want to manually make use of the implementation of the DSP, but want to handle the entire DSP assignement yourself.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.IsBypassed">
            <summary>
            Returns if the DSP is currently bypassed (<see langword="true"/>=bypass).
            </summary>
            <remarks>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.SetBypass(System.Boolean)"/> to change the current bypass mode.
            <para>Bypassing a DSP is not done automatically! 
            The actual implementation of the <see cref="M:Un4seen.Bass.Misc.BaseDSP.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method in a derived class must support this feature (e.g. the <see cref="P:Un4seen.Bass.Misc.BaseDSP.IsBypassed"/> member has to be evaluated there).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.BaseDSP.IsAssigned">
            <summary>
            Is the DSP assigned to an active channel? (<see langword="true"/>=assigned, <see langword="false"/>=not assigned).
            </summary>
            <remarks>This property will also return <see langword="false"/>, if the underlying <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> has been freed in the meantime.
            In this case the DSP will be removed automatically.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.Start">
            <summary>
            Assigns the DSP to the channel (actually starts using the DSP).
            </summary>
            <returns><see langword="true"/>, if started successfully - else <see langword="false"/> will be returned.</returns>
            <remarks>
            <para>Depending on which constructor you used to create an instance of the DSP, this method might have already being called.</para>
            <para>Calling this method again, if the DSP has already being assigned will have no effect. You must call <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> before you can call <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> again.</para>
            <para>Internally this method simply calls <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/> and thereby uses the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPProc"/>, <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> members.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.Stop">
            <summary>
            Stops (removes) the DSP from the channel.
            </summary>
            <returns><see langword="true"/>, if the DSP was removed successfully - else <see langword="false"/> will be returned (e.g. in case that the DSP has already been removed).</returns>
            <remarks>
            <para>A DSP will automatically be removed, if the channel is being freed. So there is not an explicit need of calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> at the end of stream.
            However, the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPHandle"/> might return invalid handle in such case. You might use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelIsActive(System.Int32)"/> to check, if a channel is still active.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.SetBypass(System.Boolean)">
            <summary>
            Sets the Bypass mode.
            </summary>
            <param name="bypass">Bypass?</param>
            <remarks>If Bypass is set, a DSP function should actually return immediately and not process the sample data. 
            You might check the actual Bypass mode with the <see cref="P:Un4seen.Bass.Misc.BaseDSP.IsBypassed"/> property.
            <para>If the DSP function should be bypassed, this needs to be implemented in the <see cref="M:Un4seen.Bass.Misc.BaseDSP.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> function of a derived class.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.OnChannelChanged">
            <summary>
            This method will be called every time the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> changed.
            </summary>
            <remarks>In the default implementation this method does nothing. 
            It might be overridden in a derived class to reflect a channel change, e.g. to reset an internal buffer etc.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.OnStarted">
            <summary>
            This method will be called every time the <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> method had been called.
            </summary>
            <remarks>In the default implementation this method does nothing. 
            It might be overridden in a derived class to perform some addition setup calculations whenever the DSP was started, e.g. to reset an internal buffer etc.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.OnStopped">
            <summary>
            This method will be called every time the <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> method had been called.
            </summary>
            <remarks>In the default implementation this method does nothing. 
            It might be overridden in a derived class to perform some addition cleanup calculations whenever the DSP was stopped, e.g. to reset an internal buffer etc.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.OnBypassChanged">
            <summary>
            This method will be called every time the <see cref="M:Un4seen.Bass.Misc.BaseDSP.SetBypass(System.Boolean)"/> method had been called.
            </summary>
            <remarks>In the default implementation this method does nothing. 
            It might be overridden in a derived class to reflect a change of the bypass status, e.g. to reset an internal buffer etc.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which needs to be implemented in the derived class.
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>A DSP function should obviously be as quick as possible... playing streams, MOD musics and other DSP functions can not be processed until it has finished.
            <para>You might use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelBitwidth"/> to determine if the sample data received is 8-, 16- or 32-bit. <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelNumChans"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelSampleRate"/> might be used to retrieve additional information about the channel being used.</para>
            <para>Make sure to handle the <see cref="P:Un4seen.Bass.Misc.BaseDSP.IsBypassed"/> property in order to support a bypass feature.</para>
            <para>Some functions can cause problems if called from within a DSP (or stream) function. Do not call these functions from within a DSP callback:</para>
            <para><see cref="M:Un4seen.Bass.Bass.BASS_Stop"/>, <see cref="M:Un4seen.Bass.Bass.BASS_Free"/>, <see cref="M:Un4seen.Bass.Bass.BASS_MusicLoad(System.String,System.Int64,System.Int32,Un4seen.Bass.BASSFlag,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.STREAMPROC,System.IntPtr)"/> (or any other stream creation functions).</para>
            <para>Also, do not call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelRemoveDSP(System.Int32,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelStop(System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_MusicFree(System.Int32)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/> with the same channel handle as received by the callback.</para>
            <para>
            It is clever to NOT alloc buffer data (e.g. a float[]) everytime within the callback method, since ALL callbacks should be really fast!
            And if you would do a 'float[] data = new float[]' every time here...the GarbageCollector would never really clean up that memory.
            Sideeffects might occure, due to the fact, that BASS will call this callback too fast and too often...you might also declare the callback function as 'unsafe' and use native pointer assignements for fast processing.
            However, this is not always the case, so in most examples it'll work just fine - but if you got problems - try moving any memory allocation things outside any callbacks.
            </para>
            <para>In a derived class you might call <see cref="M:Un4seen.Bass.Misc.BaseDSP.RaiseNotification"/> at the end of your processing, in order to fire the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/>.
            By doing so all subscribers will get notified, that the DSP processing has been done - e.g. in order to update a UI thread.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.RaiseNotification">
            <summary>
            Fires the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event.
            </summary>
            <remarks>Call this method to fire the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event.
            <para>This event might be used to notified the subscriber, that the DSP has processed some data and that for an example a UI needs to be updated in order to reflect this.
            However, if a DSP implementation does not have any UI relevant data to show, there will be no need to call this method in your DSP implementation and can simply be omitted.</para>
            <para>Note: On Windows this implementation ensures, that the event will be executed in the main thread the subscriber executes in!
            So when subscribing to this event from UI thread, the specified event delegate will also be called in that UI thread.
            On other platforms it might be invoked from within the DSP thread!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.BaseDSP.ToString">
            <summary>
            Returns the name of the DSP implementation.
            </summary>
            <returns>Returns the name of the DSP implementation.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.DSP_PeakLevelMeter">
            <summary>
            Peak Level Meter DSP.
            </summary>
            <remarks>Calculates the volume (amplitude) of the channel signal in volts or dB.
            <para>The DSP automatically converts 8-, 16- or 32-bit sample data accordingly.</para>
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).
            Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> when the DSP is already assigned will automatically reassign the DSP.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> property to change the channel assignment at any time. If the DSP has already been assigned, the DSP will immediately be reassigned to the new channel.</para>
            <para>The peak levels (Left channel=<see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.LevelL"/> and Right channel=<see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.LevelR"/>) are integer values between 0 (-inf.dB) and 32768 (0dB) - or higher, if the channel is floating-point.
            Use the <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.LevelL_dBV"/> and <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.LevelR_dBV"/> properties, if you want these integer peak values already converted into dBV values (to a reference voltage of 1.0).</para>
            </remarks>
            <example>
            Set up a PeakLevelMeter DSP on a recording channel:
            <code lang="C#">
            private DSP_PeakLevelMeter _plm;
            public delegate void UpdatePeakMeterCallback();
            ...
            Bass.BASS_RecordInit(-1);
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, _recProc, 0);
            ...
            // set up a ready-made DSP (here the PeakLevelMeter)
            _plm = new DSP_PeakLevelMeter(_recHandle, 1);
            _plm.CalcRMS = true;
            _plm.Notification += new EventHandler(UpdatePeakMeterDisplay);
            ...
            private void UpdatePeakMeterDisplay(object sender, EventArgs e)
            {
            	this.progressBarRecL.Value = _plm.LevelL;
            	this.progressBarRecR.Value = _plm.LevelR;
            	this.labelRMS.Text = String.Format( "RMS: {0:#00.0} dB - AVG: {1:#00.0} dB - Peak: {2:#00.0} dB", 
            				_plm.RMS_dBV, 
            				_plm.AVG_dBV, 
            				Math.Max(_plm.PeakHoldLevelL_dBV, _plm.PeakHoldLevelR_dBV) );
            }
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.#ctor">
            <summary>
            Creates a new instance of the PeakMeterLevel DSP, not assigning the DSP yet.
            </summary>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.#ctor(System.Int32,System.Int32)">
            <summary>
            Creates a new instance of the PeakMeterLevel DSP, which already assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.LevelL">
            <summary>
            Returns the current level signal (in linear voltage steps) of the left-channel as an integer value (between 0 and 32768, or above, if a floating-point channel was selected).
            </summary>
            <remarks>The voltage steps are between 0 and 32768 or above.
            Meaning a level signal of 1.0 volt is equivalent to a value of 32768 which means 0 dBV. A level signal of 0.0 volt is equivalent to 0 which means -Infinity dBV (-0.5 volt is approx. 16384 as an integer value or -6 dbV).
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelL">
            <summary>
            Returns the peak level signal (in linear voltage steps) of the left-channel since the last channel change or <see cref="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.ResetPeakHold"/>.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.LevelL_dBV">
            <summary>
            Returns the current level signal of the left-channel as a dBV value (between -Infinity and 0.0 - or above, if a floating-point channel was selected).
            </summary>
            <remarks>The reference voltage for dBV is exactly 1.0 volt.
            <para>Meaning a level signal of 0.0 dbV is equivalent to 1.0 volt or a level signal of -Infinity dBV is equivalent to 0.0 volt (and -6 dBV is approx. -0.5 volt).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelL_dBV">
            <summary>
            Returns the peak level signal of the left-channel as a dBV value (between -Infinity and 0.0 - or above, if a floating-point channel was selected) since the last channel change or <see cref="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.ResetPeakHold"/>.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.LevelR">
            <summary>
            Returns the current level signal (in linear voltage steps) of the right-channel as an integer value (between 0 and 32768, or above, if a floating-point channel was selected).
            </summary>
            <remarks>The voltage steps are between 0 and 32768 or above.
            Meaning a level signal of 1.0 volt is equivalent to a value of 32768 which means 0 dBV. A level signal of 0.0 volt is equivalent to 0 which means -Infinity dBV (-0.5 volt is approx. 16384 as an integer value or -6 dbV).
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelR">
            <summary>
            Returns the peak level signal (in linear voltage steps) of the right-channel since the last channel change or <see cref="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.ResetPeakHold"/>.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.LevelR_dBV">
            <summary>
            Returns the current level signal of the right-channel as a dBV value (between -Infinity and 0.0 - or above, if a floating-point channel was selected).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelR_dBV">
            <summary>
            Returns the peak level signal of the right-channel as a dBV value (between -Infinity and 0.0 - or above, if a floating-point channel was selected) since the last channel change or <see cref="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.ResetPeakHold"/>.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.CalcRMS">
            <summary>
            Gets or Sets if the AVG and RMS values should be calculated.
            </summary>
            <remarks>The AVG (average value) and RMS (root mean square error) might be retrieved using the <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.AVG"/> and <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.RMS"/> property.
            If CalcRMS is turned off (<see langword="false"/>, default) the <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.AVG"/> and <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.RMS"/> property would always return 0.0.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.AVG">
            <summary>
            Returns the current AVG value (average, in linear voltage steps, between 0...32768...N) of the signal.
            </summary>
            <remarks>If CalcRMS is turned off (<see langword="false"/>, default) this property would always return 0.0.
            Use <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.CalcRMS"/> to turn AVG calculation on or off.
            <para>The AVG is calculated based on the samples received in each DSP call.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.AVG_dBV">
            <summary>
            Returns the current AVG value (average, in dBV) of the signal.
            </summary>
            <remarks>If CalcRMS is turned off (<see langword="false"/>, default) this property would always return -Infinity.
            Use <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.CalcRMS"/> to turn AVG calculation on or off.
            <para>The reference voltage for dBV is exactly 1.0 volt.</para>
            <para>The AVG is calculated based on the samples received in each DSP call.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.RMS">
            <summary>
            Returns the current RMS value (root mean square, in voltage steps, between 0...32768...N) of the signal.
            </summary>
            <remarks>If CalcRMS is turned off (<see langword="false"/>, default) this property would always return 0.0.
            Use <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.CalcRMS"/> to turn RMS calculation on or off.
            <para>The RMS is calculated based on the samples received in each DSP call.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.RMS_dBV">
            <summary>
            Returns the current RMS value (root mean square, in dBV) of the signal.
            </summary>
            <remarks>If CalcRMS is turned off (<see langword="false"/>, default) this property would always return -Infinity.
            Use <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.CalcRMS"/> to turn RMS calculation on or off.
            <para>The reference voltage for dBV is exactly 1.0 volt.</para>
            <para>The RMS is calculated based on the samples received in each DSP call.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.UpdateTime">
            <summary>
            Gets or Sets the update time in seconds (default is 0.1 = 100ms, max. is 60 seconds) which is the timespan being used to measure RMS and PeakLevels and is also used for Notification trigges.
            </summary>
            <remarks>This timespan controls the following:
            <para>1. How often the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event should be raised.</para>
            <para>2. How many samples should be used to calculate the <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.RMS"/> and <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.AVG"/> values.</para>
            <para>3. How many samples should be used to calculate the <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelL"/> and <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelR"/> values.</para>
            <para>If you set the value to 0.0 (zero) immediate update is triggered, meaning with each DSP processing step the above is being triggered/calculated.</para>
            <para>Depending on what you want to do, good values are between 0.02 (20ms, realtime), 0.08 (80ms, user-interface) and 0.5 (500ms, RMS).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.OnChannelChanged">
            <summary>
            Resets the <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelL"/> and <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelR"/> values when a channel change occurred.
            </summary>
            <remarks>If you want to reset the peak hold values more ofen, call the <see cref="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.ResetPeakHold"/> method manually.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.ResetPeakHold">
            <summary>
            Resets the <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelL"/> and <see cref="P:Un4seen.Bass.Misc.DSP_PeakLevelMeter.PeakHoldLevelR"/> values when a channel change occurred.
            </summary>
            <remarks>If you want to reset the peak hold values more ofen, call the <see cref="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.ResetPeakHold"/> method manually.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which does the peak level calculation. Not for direct use in your application!
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>Not for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_PeakLevelMeter.ToString">
            <summary>
            Returns the name of the DSP.
            </summary>
            <returns>The name of the DSP.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.DSP_Gain">
            <summary>
            Gain DSP (amplification).
            </summary>
            <remarks>Amplifies the channel signal by a given factor (either specified as a double <see cref="P:Un4seen.Bass.Misc.DSP_Gain.Gain"/> factor or in dB via the <see cref="P:Un4seen.Bass.Misc.DSP_Gain.Gain_dBV"/> property).
            <para>The DSP automatically handles 8-, 16- or 32-bit sample data accordingly. 8- and 16-bit sample data will be clipped if needed, 32-bit floating-point values will not be clipped.</para>
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).
            Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> when the DSP is already assigned will automatically reassign the DSP.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> property to change the channel assignment at any time. If the DSP has already been assigned, the DSP will immediately be reassigned to the new channel.</para>
            <para>The gain to be applied is defined via <see cref="P:Un4seen.Bass.Misc.DSP_Gain.Gain"/> (factor, Min.: 0.0, Max.: 1024.0, no amplification at a value of 1.0) or <see cref="P:Un4seen.Bass.Misc.DSP_Gain.Gain_dBV"/> (dB, Min.: -Infinity, Max.: +60, no amplification at a value of 0.0).</para>
            <para>NOTE: This DSP does NOT support the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Gain.#ctor">
            <summary>
            Creates a new instance of the Gain DSP, not assigning the DSP yet.
            </summary>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Gain.#ctor(System.Int32,System.Int32)">
            <summary>
            Creates a new instance of the Gain DSP, which already assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Gain.Gain">
            <summary>
            Gets or Sets the amplification level (factor, Min.: 0.0, Max.: 1024.0, no amplification at 1.0).
            </summary>
            <remarks>The sample data is actually multiplied by this factory. 
            <para>Values between 0.0 and less than 1.0 will actually be an attenuation of the signal level.</para>
            <para>Values above 1.0 will actually be an amplification of the signal level, whereas a value of exactly 1.0 will leave the signal level unmodified.</para>
            <para>The gain can also be applied via <see cref="P:Un4seen.Bass.Misc.DSP_Gain.Gain_dBV"/> (dB, Min.: -Infinity, Max.: +60, no amplification at a value of 0.0).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Gain.Gain_dBV">
            <summary>
            Gets or Sets the amplification level (in dBV, Min.: -Infinity, Max.: +60, no amplification at a value of 0.0 dB).
            </summary>
            <remarks>Using this property will actually convert the specified dB value into a factor (see <see cref="P:Un4seen.Bass.Misc.DSP_Gain.Gain"/>) internally. 
            The sample data is then multiplied by this factory. The reference voltage for dBV is exactly 1.0 volt.
            <para>Values between -Infinity and less than 0.0 dB will actually be an attenuation of the signal level.</para>
            <para>Values above 0.0 dB will actually be an amplification of the signal level, whereas a value of exactly 0.0 will leave the signal level unmodified.</para>
            <para>The gain can also be applied directly via <see cref="P:Un4seen.Bass.Misc.DSP_Gain.Gain"/> (factor, Min.: 0.0, Max.: 1024.0, no amplification at 1.0).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Gain.UseDithering">
            <summary>
            Gets or Sets, if Dithering should be used (default is <see langword="false"/>).
            </summary>
            <remarks>
            Dithering adds a low level white noise to the sample data before truncating for the purpose of minimizing quantization error.
            <para>Dither only applies when processing 8- or 16-bit sample data (since here the <see cref="P:Un4seen.Bass.Misc.DSP_Gain.Gain"/> factor might result in computation 'errors') - for 32-bit (float) sample data dither will never be applied here.</para>
            <para>Dithering is implemented here as a triangular probability density function (TPDF), actually a "<see cref="P:Un4seen.Bass.Misc.DSP_Gain.DitherFactor"/> bit triangular dither" (default is 0.7).</para>
            <para>If Dithering is disabled, the sample value will be rounded to the nearest value.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Gain.DitherFactor">
            <summary>
            Gets or Sets the dithering bitdepth of the triangular probability density function (TPDF) - default is 0.7.
            </summary>
            <remarks>The TPDF is implemented as a "<see cref="P:Un4seen.Bass.Misc.DSP_Gain.DitherFactor"/> bit triangular dither", ie. by default a "0.7 bit triangular dither" is used.
            <para>Dithering only applies here when processing 8- or 16-bit sample data and when the <see cref="P:Un4seen.Bass.Misc.DSP_Gain.UseDithering"/> property has been set to <see langword="true"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Gain.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which does the gain amplification. Not for direct use in your application!
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>Not for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Gain.ToString">
            <summary>
            Returns the name of the DSP.
            </summary>
            <returns>The name of the DSP.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.DSP_Pan">
            <summary>
            Stereo Panning DSP (balance).
            </summary>
            <remarks>A stereo Panning DSP. Panning is controlled via the <see cref="P:Un4seen.Bass.Misc.DSP_Pan.Pan"/> property.
            <para>Note: This DSP only works on streams with a multiple of 2 channels (e.g. stereo, quadro, etc.).</para>
            <para>The DSP automatically handles 8-, 16- or 32-bit sample data accordingly. 8- and 16-bit sample data will be clipped if needed, 32-bit floating-point values will not be clipped.</para>
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).
            Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> when the DSP is already assigned will automatically reassign the DSP.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> property to change the channel assignment at any time. If the DSP has already been assigned, the DSP will immediately be reassigned to the new channel.</para>
            <para>NOTE: This DSP does NOT support the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Pan.#ctor">
            <summary>
            Creates a new instance of the Panning DSP, not assigning the DSP yet.
            </summary>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Pan.#ctor(System.Int32,System.Int32)">
            <summary>
            Creates a new instance of the Panning DSP, which already assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Pan.Pan">
            <summary>
            Defines the panning factor between -1.0 (pan left) and 1.0 (pan right), center is at 0.0 (default).
            </summary>
            <remarks>Assigning values outside the valid range [-1..1] will be capped automatically.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Pan.UseDithering">
            <summary>
            Gets or Sets, if Dithering should be used (default is <see langword="false"/>).
            </summary>
            <remarks>
            Dithering adds a low level white noise to the sample data before truncating for the purpose of minimizing quantization error.
            <para>Dither only applies when processing 8- or 16-bit sample data (since here the <see cref="P:Un4seen.Bass.Misc.DSP_Pan.Pan"/> factor might result in computation 'errors') - for 32-bit (float) sample data dither will never be applied here.</para>
            <para>Dithering is implemented here as a triangular probability density function (TPDF), actually a "<see cref="P:Un4seen.Bass.Misc.DSP_Pan.DitherFactor"/> bit triangular dither" (default is 0.7).</para>
            <para>If Dithering is disabled, the sample value will be rounded to the nearest value.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Pan.DitherFactor">
            <summary>
            Gets or Sets the dithering bitdepth of the triangular probability density function (TPDF) - default is 0.7.
            </summary>
            <remarks>The TPDF is implemented as a "<see cref="P:Un4seen.Bass.Misc.DSP_Pan.DitherFactor"/> bit triangular dither", ie. by default a "0.7 bit triangular dither" is used.
            <para>Dithering only applies here when processing 8- or 16-bit sample data and when the <see cref="P:Un4seen.Bass.Misc.DSP_Pan.UseDithering"/> property has been set to <see langword="true"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Pan.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which does the panning. Not for direct use in your application!
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>Not for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Pan.ToString">
            <summary>
            Returns the name of the DSP.
            </summary>
            <returns>The name of the DSP.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.DSP_Mono">
            <summary>
            Mono DSP (converts a stereo signal to a mono signal).
            </summary>
            <remarks>A stereo to mono DSP.
            <para>Note: This DSP only works on streams with a multiple of 2 channels (e.g. stereo, quadro, etc.).</para>
            <para>The DSP automatically handles 8-, 16- or 32-bit sample data accordingly. 8- and 16-bit sample data will be clipped if needed, 32-bit floating-point values will not be clipped.</para>
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).
            Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> when the DSP is already assigned will automatically reassign the DSP.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> property to change the channel assignment at any time. If the DSP has already been assigned, the DSP will immediately be reassigned to the new channel.</para>
            <para>NOTE: This DSP does NOT support the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Mono.#ctor">
            <summary>
            Creates a new instance of the Mono DSP, not assigning the DSP yet.
            </summary>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Mono.#ctor(System.Int32,System.Int32)">
            <summary>
            Creates a new instance of the Mono DSP, which already assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Mono.Invert">
            <summary>
            Gets or Sets, if the stereo signal should be inverted (forces inverted stereo information to be removed - default is <see langword="false"/>).
            </summary>
            <remarks>Forcing to remove any stereo information which often results in a kind of karaoce effect. Also might be used, if there is an inverted phase in the stereo signal, if a mono signal had been recorded in stereo.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Mono.UseDithering">
            <summary>
            Gets or Sets, if Dithering should be used (default is <see langword="false"/>).
            </summary>
            <remarks>
            Dithering adds a low level white noise to the sample data before truncating for the purpose of minimizing quantization error.
            <para>Dither only applies when processing 8- or 16-bit sample data (since here the mono calculation might result in computation 'errors') - for 32-bit (float) sample data dither will never be applied here.</para>
            <para>Dithering is implemented here as a triangular probability density function (TPDF), actually a "<see cref="P:Un4seen.Bass.Misc.DSP_Mono.DitherFactor"/> bit triangular dither" (default is 0.7).</para>
            <para>If Dithering is disabled, the sample value will be rounded to the nearest value.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_Mono.DitherFactor">
            <summary>
            Gets or Sets the dithering bitdepth of the triangular probability density function (TPDF) - default is 0.7.
            </summary>
            <remarks>The TPDF is implemented as a "<see cref="P:Un4seen.Bass.Misc.DSP_Mono.DitherFactor"/> bit triangular dither", ie. by default a "0.7 bit triangular dither" is used.
            <para>Dithering only applies here when processing 8- or 16-bit sample data and when the <see cref="P:Un4seen.Bass.Misc.DSP_Mono.UseDithering"/> property has been set to <see langword="true"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Mono.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which does the mono conversion. Not for direct use in your application!
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>Not for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_Mono.ToString">
            <summary>
            Returns the name of the DSP.
            </summary>
            <returns>The name of the DSP.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.DSP_StereoEnhancer">
            <summary>
            Stereo Enhancer DSP (actually also removes mono signals).
            </summary>
            <remarks>A simple stereo enhancer. Use the <see cref="P:Un4seen.Bass.Misc.DSP_StereoEnhancer.WideCoeff"/> property to contol the wideness of the stereo effect and the <see cref="P:Un4seen.Bass.Misc.DSP_StereoEnhancer.WetDry"/> property to control how much the effect should impact the original signal.
            <para>The DSP automatically handles 8-, 16- or 32-bit sample data accordingly. 8- and 16-bit sample data will be clipped if needed, 32-bit floating-point values will not be clipped.</para>
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).
            Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> when the DSP is already assigned will automatically reassign the DSP.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> property to change the channel assignment at any time. If the DSP has already been assigned, the DSP will immediately be reassigned to the new channel.</para>
            <para>NOTE: This DSP does NOT support the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StereoEnhancer.#ctor">
            <summary>
            Creates a new instance of the Stereo Enhancer DSP, not assigning the DSP yet.
            </summary>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StereoEnhancer.#ctor(System.Int32,System.Int32)">
            <summary>
            Creates a new instance of the Stereo Enhancer DSP, which already assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StereoEnhancer.WideCoeff">
            <summary>
            Gets or Sets the stereo wide (coefficient) controling the stereo enhancement between 0.0 (narrow, mono signal) and 10.0 (wide, enhanced stereo signal) - default is 2.0.
            </summary>
            <remarks>A values of 0.0 will result in a narrow mono signal and a value of 1.0 in a original stereo, whereas values above 1.0 will provide an enhanced wide stereo signal.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StereoEnhancer.WetDry">
            <summary>
            Gets or Sets the Wet/Dry ratio between 0.0 (dry, unprocessed signal only) and 1.0 (wet, processed signal only) - default is 0.5.
            </summary>
            <remarks>This property defines how much of the effect signal will be mixed into the original signal.
            <para>A values of 0.0 means, that only the dry (unprocessed, original) signal is used. A value of 1.0 means, that only the wet (processed) signal is used.</para>
            <para>If you assign values outside this range they will actually be capped to [0.0...1.0].</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StereoEnhancer.UseDithering">
            <summary>
            Gets or Sets, if Dithering should be used (default is <see langword="false"/>).
            </summary>
            <remarks>
            Dithering adds a low level white noise to the sample data before truncating for the purpose of minimizing quantization error.
            <para>Dither only applies when processing 8- or 16-bit sample data (since here the effect calculation might result in computation 'errors') - for 32-bit (float) sample data dither will never be applied here.</para>
            <para>Dithering is implemented here as a triangular probability density function (TPDF), actually a "<see cref="P:Un4seen.Bass.Misc.DSP_StereoEnhancer.DitherFactor"/> bit triangular dither" (default is 0.7).</para>
            <para>If Dithering is disabled, the sample value will be rounded to the nearest value.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StereoEnhancer.DitherFactor">
            <summary>
            Gets or Sets the dithering bitdepth of the triangular probability density function (TPDF) - default is 0.7.
            </summary>
            <remarks>The TPDF is implemented as a "<see cref="P:Un4seen.Bass.Misc.DSP_StereoEnhancer.DitherFactor"/> bit triangular dither", ie. by default a "0.7 bit triangular dither" is used.
            <para>Dithering only applies here when processing 8- or 16-bit sample data and when the <see cref="P:Un4seen.Bass.Misc.DSP_StereoEnhancer.UseDithering"/> property has been set to <see langword="true"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StereoEnhancer.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which does the stereo enhancement. Not for direct use in your application!
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>Not for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StereoEnhancer.ToString">
            <summary>
            Returns the name of the DSP.
            </summary>
            <returns>The name of the DSP.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.DSP_IIRDelay">
            <summary>
            IIR Delay Filter DSP.
            </summary>
            <remarks>An IIR Delay filer (flexible-time, non-sample quantized delay). Use the <see cref="P:Un4seen.Bass.Misc.DSP_IIRDelay.Delay"/> resp. the <see cref="P:Un4seen.Bass.Misc.DSP_IIRDelay.DelaySeconds"/> property to control the delay time. The <see cref="P:Un4seen.Bass.Misc.DSP_IIRDelay.WetDry"/> and <see cref="P:Un4seen.Bass.Misc.DSP_IIRDelay.Feedback"/> properties conrol the ratio between the original signal and the processed effect signal as well as the ratio of the processed delay which will be mixed into the delay buffer.
            <para>The DSP automatically handles 8-, 16- or 32-bit sample data accordingly. 8- and 16-bit sample data will be clipped if needed, 32-bit floating-point values will not be clipped.</para>
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).
            Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> when the DSP is already assigned will automatically reassign the DSP.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> property to change the channel assignment at any time. If the DSP has already been assigned, the DSP will immediately be reassigned to the new channel.</para>
            <para>NOTE: This DSP does NOT support the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_IIRDelay.#ctor(System.Single)">
            <summary>
            Creates a new instance of the IIR Delay Filter DSP, not assigning the DSP yet.
            </summary>
            <param name="maxDelay">The maximum delay buffer size in seconds.</param>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_IIRDelay.#ctor(System.Int32,System.Int32,System.Single)">
            <summary>
            Creates a new instance of the IIR Delay Filter DSP, which already assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <param name="maxDelay">The maximum delay buffer size in seconds (between 0.001 and 60.0).</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_IIRDelay.WetDry">
            <summary>
            Gets or Sets the Wet/Dry ratio between 0.0 (dry, unprocessed signal only) and 1.0 (wet, processed signal only) - default is 0.5.
            </summary>
            <remarks>This property defines how much of the effect signal will be mixed into the original signal.
            <para>A values of 0.0 means, that only the dry (unprocessed, original) signal is used. A value of 1.0 means, that only the wet (processed) signal is used.</para>
            <para>If you assign values outside this range they will actually be capped to [0.0...1.0].</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_IIRDelay.Feedback">
            <summary>
            Gets or Sets the feedback factor of the processed signal between 0.0 (none) and 1.0 (full) which should be stored in the delay buffer - default is 0.5.
            </summary>
            <remarks>This property defines how much of the processed signal will be feed back to the delay buffer.
            <para>A values of 0.0 means, that only the original signal is used and stored in the delay buffer. 
            A value of 1.0 means, that only the processed signal is used and stored in the delay buffer.</para>
            <para>If you assign values outside this range they will actually be capped to [0.0...1.0].</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_IIRDelay.Delay">
            <summary>
            Gets or Sets the Delay in number of samples (default is 4096).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_IIRDelay.DelaySeconds">
            <summary>
            Gets or Sets the Delay in seconds (e.g. 0.01 for 10ms - between 0.0 and 60.0).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_IIRDelay.Preset_Default">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_IIRDelay.Preset_Metallic">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_IIRDelay.Preset_Echo">
            <summary>
            Sets the instance members to a preset.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_IIRDelay.Reset">
            <summary>
            Clears the internal buffer.
            </summary>
            <remarks>It is a good idea to call this method whenever you change the position of the stream.
            <para>This will also automatically be called <see cref="M:Un4seen.Bass.Misc.DSP_IIRDelay.OnChannelChanged"/>.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_IIRDelay.UseDithering">
            <summary>
            Gets or Sets, if Dithering should be used (default is <see langword="false"/>).
            </summary>
            <remarks>
            Dithering adds a low level white noise to the sample data before truncating for the purpose of minimizing quantization error.
            <para>Dither only applies when processing 8- or 16-bit sample data (since here the effect calculation might result in computation 'errors') - for 32-bit (float) sample data dither will never be applied here.</para>
            <para>Dithering is implemented here as a triangular probability density function (TPDF), actually a "<see cref="P:Un4seen.Bass.Misc.DSP_IIRDelay.DitherFactor"/> bit triangular dither" (default is 0.7).</para>
            <para>If Dithering is disabled, the sample value will be rounded to the nearest value.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_IIRDelay.DitherFactor">
            <summary>
            Gets or Sets the dithering bitdepth of the triangular probability density function (TPDF) - default is 0.7.
            </summary>
            <remarks>The TPDF is implemented as a "<see cref="P:Un4seen.Bass.Misc.DSP_IIRDelay.DitherFactor"/> bit triangular dither", ie. by default a "0.7 bit triangular dither" is used.
            <para>Dithering only applies here when processing 8- or 16-bit sample data and when the <see cref="P:Un4seen.Bass.Misc.DSP_IIRDelay.UseDithering"/> property has been set to <see langword="true"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_IIRDelay.OnChannelChanged">
            <summary>
            This method will be called every time the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> changed.
            </summary>
            <remarks>It resets the internal buffer.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_IIRDelay.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which adds the delay effect. Not for direct use in your application!
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>Not for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_IIRDelay.ToString">
            <summary>
            Returns the name of the DSP.
            </summary>
            <returns>The name of the DSP.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.DSP_SoftSaturation">
            <summary>
            Soft Saturation DSP (a waveshaper).
            </summary>
            <remarks>A Soft Saturation DSP doing some wave sharping. Use the <see cref="P:Un4seen.Bass.Misc.DSP_SoftSaturation.Factor"/> property to play around with sharping effect.
            Basically it reduces/modifies the level signal, if above the <see cref="P:Un4seen.Bass.Misc.DSP_SoftSaturation.Factor"/> value. If the signal is below the <see cref="P:Un4seen.Bass.Misc.DSP_SoftSaturation.Factor"/> the signal will be left unchanged.
            The effect is a good combination with a gain effect to minimize distortion or clipping which might happen with loud signal peaks.
            <para>The DSP automatically handles 8-, 16- or 32-bit sample data accordingly. 8- and 16-bit sample data will be clipped if needed, 32-bit floating-point values will not be clipped.</para>
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).
            Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> when the DSP is already assigned will automatically reassign the DSP.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> property to change the channel assignment at any time. If the DSP has already been assigned, the DSP will immediately be reassigned to the new channel.</para>
            <para>NOTE: This DSP does NOT support the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_SoftSaturation.#ctor">
            <summary>
            Creates a new instance of the Soft Saturation DSP, not assigning the DSP yet.
            </summary>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_SoftSaturation.#ctor(System.Int32,System.Int32)">
            <summary>
            Creates a new instance of the Soft Saturation DSP, which already assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_SoftSaturation.Depth">
            <summary>
            Gets or Sets the Depth between 0.0 and 1.0 (default is 0.5, 0.0=off).
            </summary>
            <remarks>The signal will be warmed when set above 0.0.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_SoftSaturation.Factor">
            <summary>
            Gets or Sets the Soft Saturation factor between 0.0 and 0.99998848714 (default is 0.5).
            </summary>
            <remarks>The signal will be dynamically sharped, if the signal amplitude is above this given factor.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_SoftSaturation.Factor_dBV">
            <summary>
            Gets or Sets the Soft Saturation factor in dBV between NegativeInfinity and -0.0001 (default is -6 dB).
            </summary>
            <remarks>The signal will be dynamically sharped, if the signal amplitude is above this given factor.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_SoftSaturation.UseDithering">
            <summary>
            Gets or Sets, if Dithering should be used (default is <see langword="false"/>).
            </summary>
            <remarks>
            Dithering adds a low level white noise to the sample data before truncating for the purpose of minimizing quantization error.
            <para>Dither only applies when processing 8- or 16-bit sample data (since here the mono calculation might result in computation 'errors') - for 32-bit (float) sample data dither will never be applied here.</para>
            <para>Dithering is implemented here as a triangular probability density function (TPDF), actually a "<see cref="P:Un4seen.Bass.Misc.DSP_SoftSaturation.DitherFactor"/> bit triangular dither" (default is 0.7).</para>
            <para>If Dithering is disabled, the sample value will be rounded to the nearest value.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_SoftSaturation.DitherFactor">
            <summary>
            Gets or Sets the dithering bitdepth of the triangular probability density function (TPDF) - default is 0.7.
            </summary>
            <remarks>The TPDF is implemented as a "<see cref="P:Un4seen.Bass.Misc.DSP_SoftSaturation.DitherFactor"/> bit triangular dither", ie. by default a "0.7 bit triangular dither" is used.
            <para>Dithering only applies here when processing 8- or 16-bit sample data and when the <see cref="P:Un4seen.Bass.Misc.DSP_SoftSaturation.UseDithering"/> property has been set to <see langword="true"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_SoftSaturation.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which does the soft saturation wave sharping. Not for direct use in your application!
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>Not for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_SoftSaturation.ToString">
            <summary>
            Returns the name of the DSP.
            </summary>
            <returns>The name of the DSP.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.DSP_StreamCopy">
            <summary>
            Stream Copy DSP (to clone any BASS stream).
            </summary>
            <remarks>A Stream Copy DSP actually provides a synchronized clone of the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> which can for example be used to playout the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> to another device or spreakers.
            Use the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyDevice"/> property to specify the BASS device which should be used for the stream copy.
            Use the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyFlags"/> property to specify additional flags which should be used create the stream copy.
            <para>The <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> handles will be linked.
            So the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> channel will be started/stopped/paused/resumed together with the original <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>.</para>
            <para>When using with a mixer stream (see <see cref="N:Un4seen.Bass.AddOn.Mix"/>) you need to set the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.SourceMixerStream"/> and <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.TargetMixerStream"/> properties accordingly.
            It is possible to copy either a mixer source stream or the mixer stream itself (in both cases the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.SourceMixerStream"/> handle must be set - so the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> might be equal to the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>).
            If you specify a <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.TargetMixerStream"/> the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> handle will automatically be add as a new source channel to that mixer (in such case make sure to use BASS_STREAM_DECODE as a <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyFlags"/>).
            The <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.IsOutputBuffered"/> property will define, if the final output is a buffered stream or not (so if using with a <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.TargetMixerStream"/> you might still need to set this to <see langword="true"/>).
            </para>
            <para>The DSP automatically handles 8-, 16- or 32-bit sample data accordingly. 8- and 16-bit sample data will be clipped if needed, 32-bit floating-point values will not be clipped.</para>
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).
            Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> when the DSP is already assigned will automatically reassign the DSP.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> property to change the original channel assignment at any time. If the DSP has already been assigned, the DSP will immediately be reassigned to the new channel.</para>
            <para>NOTE: This DSP does NOT support the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event!</para>
            <para>Internally the <see cref="T:Un4seen.Bass.Misc.DSP_StreamCopy"/> implementation uses <see cref="M:Un4seen.Bass.Bass.BASS_StreamPutData(System.Int32,System.IntPtr,System.Int32)"/> to keep the sample data of the original stream in sync with the custom created push stream (the 'StreamCopy' is created via <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/> 
            and linked to the source stream via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetLink(System.Int32,System.Int32)"/>). 
            It is not recommended to use this DSP with ASIO sources (use the <see cref="T:Un4seen.Bass.Misc.DSP_BufferStream"/> DSP instead).</para>
            <para>So when you now call the <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> method on the DSP_StreamCopy instance the copied-stream will be freed (but not the source stream).
            The same is true, if the GarbageCollector disposes your DSP_StreamCopy instance, since within the dispose implementation the <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> method will be called.</para>
            <para>However, stopping the source stream will not reset the copied-stream! Also the copied-stream will not be freed automatically, if you simply free the original stream (only the DSP will be removed from it).</para>
            <para>So when you free your source stream (or the playback ends) it is advised to call the <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> method on your DSP_StreamCopy method as well. So that the DSP is removed and the copied-stream will be removed/freed!
            When you need to start the original stream again, simply call <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> again.</para>
            <para>Here is a full overview of all possible scenarios:</para>
            <para>A) Stopping/Releasing the source stream:
            -> call <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to also free the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> (and internal DSP).</para>
            <para>A.1) Restarting the same source stream:
            -> call <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> if you need to start the source stream again.</para>
            <para>A.2) Assigning a new source stream:
            -> set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> to the new source stream (see B).</para>
            <para>B) Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> of the DSP_StreamCopy instance:
            -> the current <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> (if existing) will be freed automatically (and internal DSP).
            A new <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> is created automatically for the new source stream.</para>
            <para>C) Changing the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyDevice"/> of the DSP_StreamCopy instance:
            -> the current <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> (if existing) will be freed automatically.
            A new <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> is created automatically on the new device.</para>
            <para>D) Disposing of the DSP_StreamCopy instance (e.g. via GC):
            -> the current <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> (if existing) will be freed automatically (and internal DSP).</para>
            </remarks>
            <example>
            Create a copy of a regular BASS stream and play it on another BASS device:
            <code lang="C#">
            private DSP_StreamCopy _streamCopy;
            ...
            Bass.BASS_Init(2, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            Bass.BASS_Init(1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            ...
            // create the original stream (on device 1)
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_FLOAT);
            // start playing it...
            Bass.BASS_ChannelPlay(stream, false);
            ...
            _streamCopy = new DSP_StreamCopy();
            BASS_INFO info = Bass.BASS_GetInfo();
            _streamCopy.OutputLatency = info.latency;
            // the stream to copy
            _streamCopy.ChannelHandle = stream;
            _streamCopy.DSPPriority = -1000;
            // use device 2 to create the copy on
            _streamCopy.StreamCopyDevice = 2;
            // use the exact same stream flags for the stream copy
            _streamCopy.StreamCopyFlags = _streamCopy.ChannelInfo.flags;
            _streamCopy.Start();
            </code>
            <code lang="VB">
            Private _streamCopy As DSP_StreamCopy
            ...
            Bass.BASS_Init(2, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            Bass.BASS_Init(1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            ...
            ' create the original stream (on device 1)
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_SAMPLE_FLOAT)
            ' start playing it...
            Bass.BASS_ChannelPlay(stream, False)
            ...
            _streamCopy = New DSP_StreamCopy()
            BASS_INFO info = Bass.BASS_GetInfo()
            _streamCopy.OutputLatency = info.latency
            ' the stream to copy
            _streamCopy.ChannelHandle = stream
            _streamCopy.DSPPriority = -1000
            ' use device 2 to create the copy on
            _streamCopy.StreamCopyDevice = 2
            ' use the exact same stream flags for the stream copy
            _streamCopy.StreamCopyFlags = _streamCopy.ChannelInfo.flags
            _streamCopy.Start()
            </code>
            Create a copy of a regular BASS stream and play it on other speakers:
            <code lang="C#">
            private DSP_StreamCopy _streamCopy;
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_SPEAKERS, IntPtr.Zero);
            ...
            // create the original stream (using front speakers)
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                              BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_SPEAKER_FRONT);
            // start playing it...
            Bass.BASS_ChannelPlay(stream, false);
            ...
            _streamCopy = new DSP_StreamCopy();
            BASS_INFO info = Bass.BASS_GetInfo();
            _streamCopy.OutputLatency = info.latency;
            // the stream to copy
            _streamCopy.ChannelHandle = stream;
            _streamCopy.DSPPriority = -1000;
            // use different speaker flags for the stream copy
            _streamCopy.StreamCopyFlags = BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_SPEAKER_REAR;
            _streamCopy.Start();
            </code>
            <code lang="VB">
            Private _streamCopy As DSP_StreamCopy
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_SPEAKERS, IntPtr.Zero)
            ...
            ' create the original stream (using front speakers)
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                                         BASSFlag.BASS_SAMPLE_FLOAT Or BASSFlag.BASS_SPEAKER_FRONT)
            ' start playing it...
            Bass.BASS_ChannelPlay(stream, False)
            ...
            _streamCopy = New DSP_StreamCopy()
            BASS_INFO info = Bass.BASS_GetInfo();
            _streamCopy.OutputLatency = info.latency;
            ' the stream to copy
            _streamCopy.ChannelHandle = stream
            _streamCopy.DSPPriority = -1000
            ' use different speaker flags for the stream copy
            _streamCopy.StreamCopyFlags = BASSFlag.BASS_SAMPLE_FLOAT Or BASSFlag.BASS_SPEAKER_REAR
            _streamCopy.Start()
            </code>
            Create a copy of a BASSmix source mixer stream and copy it to another BASSmix mixer as a source:
            <code lang="C#">
            private DSP_StreamCopy _streamCopy;
            ...
            _streamCopy = new DSP_StreamCopy();
            BASS_INFO info = Bass.BASS_GetInfo();
            _streamCopy.OutputLatency = info.latency;
            _streamCopy.DSPPriority = -9000;
            ...
            // assign the copy
            _streamCopy.ChannelHandle = _mixerSourceStream; // the stream to copy
            _streamCopy.StreamCopyDevice = 0;
            _streamCopy.StreamCopyFlags = BASSFlag.BASS_STREAM_DECODE;
            _streamCopy.SourceMixerStream = MixerStreamA;
            _streamCopy.TargetMixerStream = MixerStreamB;
            _streamCopy.IsOutputBuffered = true;
            _streamCopy.Start();
            ...
            // start playing the original source
            BassMix.BASS_Mixer_ChannelPlay(_mixerSourceStream);
            if (_streamCopy.IsAssigned)
              _streamCopy.ReSync();
            ...
            // pausing the original source
            BassMix.BASS_Mixer_ChannelPause(_mixerSourceStream);
            ...
            </code>
            <code lang="VB">
            Private _streamCopy As DSP_StreamCopy
            ...
            _streamCopy = New DSP_StreamCopy()
            BASS_INFO info = Bass.BASS_GetInfo();
            _streamCopy.OutputLatency = info.latency;
            _streamCopy.DSPPriority = -9000
            ...
            ' assign the copy
            _streamCopy.ChannelHandle = _mixerSourceStream ' the stream to copy
            _streamCopy.StreamCopyDevice = 0
            _streamCopy.StreamCopyFlags = BASSFlag.BASS_STREAM_DECODE
            _streamCopy.SourceMixerStream = MixerStreamA
            _streamCopy.TargetMixerStream = MixerStreamB
            _streamCopy.IsOutputBuffered = true
            _streamCopy.Start()
            ...
            ' start playing the original source
            BassMix.BASS_Mixer_ChannelPlay(_mixerSourceStream)
            If _streamCopy.IsAssigned Then
              _streamCopy.ReSync();
            End If
            ...
            ' pausing the original source
            BassMix.BASS_Mixer_ChannelPause(_mixerSourceStream)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StreamCopy.#ctor">
            <summary>
            Creates a new instance of the Stream Copy DSP, not assigning the DSP yet.
            </summary>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StreamCopy.#ctor(System.Int32,System.Int32)">
            <summary>
            Creates a new instance of the Stream Copy DSP, which already assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy">
            <summary>
            Gets the copied BASS stream (the created custom push stream).
            </summary>
            <remarks>Note: The <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> handles will be linked.
            So the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> channel will be started/stopped/paused/resumed together with the original <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyDevice"/> property to specify the BASS device which should be used for the stream copy. Use the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyFlags"/> property to specify additional flags which should be used create the stream copy.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyFlags">
            <summary>
            Gets or Sets the <see cref="T:Un4seen.Bass.BASSFlag"/> flags which should be used to create the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/>.
            </summary>
            <remarks>Note: Setting the stream copy flags while the DSP_StreamCopy is already assigned will automatically (re)start it.
            <para>By default no flags are used with the stream copy, so make sure to set these flags accordingly to your scenario.
            E.g. add a BASS_STREAM_DECODE flag, if you want to create a decoding copy which you might add to a mixer stream.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyDevice">
            <summary>
            Gets or Sets the BASS device, which should be used for the stream copy.
            </summary>
            <remarks>Note: Setting the BASS device while the DSP_StreamCopy is already assigned will automatically (re)start it.
            By default the current device is being used.
            <para>Make also sure, that the BASS device has been initializes (see <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>) before.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StreamCopy.OutputLatency">
            <summary>
            Gets or Sets the output latency in milliseconds (default = 0).
            </summary>
            <remarks>The output latency compensates for an additional delay of the DirectSound buffer.
            You should initialize this property with the <see cref="M:Un4seen.Bass.Bass.BASS_GetInfo(Un4seen.Bass.BASS_INFO)">BASS_INFO.latency</see> member when using with a buffered output.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StreamCopy.IsOutputBuffered">
            <summary>
            Gets or Sets, if the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> should be buffered or not (default is <see langword="true"/>).
            </summary>
            <remarks>If set to <see langword="true"/>, the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> will be (pre)buffered with the data available from the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>. 
            This option is useful, if you want to use this instance with a buffered output stream.
            If set to <see langword="false"/> the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> will not be (pre)buffered, which is usefull when used with unbuffered outputs (e.g. ASIO).
            <para>Note: Setting this member while the DSP_StreamCopy is already assigned will automatically (re)start it.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StreamCopy.SourceMixerStream">
            <summary>
            Gets or Sets the mixer handle of the mixer from which you are cloning (see <see cref="N:Un4seen.Bass.AddOn.Mix">BASSmix</see> addon).
            </summary>
            <remarks>
            It is possible to copy either a mixer's source stream or the mixer stream itself.
            In both cases you must specify the mixers channel handle - so if you clone the mixer itself the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> will be equal to this property.
            If you specify a <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.TargetMixerStream"/> the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> handle will automatically be add as a new source channel to that mixer (in such case make sure to use BASS_STREAM_DECODE as a <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyFlags"/>).
            The <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.IsOutputBuffered"/> property will define, if the final output is a buffered stream or not (so if using with a <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.TargetMixerStream"/> you might still need to set it to <see langword="true"/>).
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_StreamCopy.TargetMixerStream">
            <summary>
            Gets or Sets the mixer handle of the mixer to which the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> handle should be added (see <see cref="N:Un4seen.Bass.AddOn.Mix">BASSmix</see> addon).
            </summary>
            <remarks>
            If you specify a <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.TargetMixerStream"/> the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> handle will automatically be add as a new source channel to that mixer 
            (the BASS_STREAM_DECODE flag will automatically be added to the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopyFlags"/>).
            The <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.IsOutputBuffered"/> property will define, if the final output is a buffered stream or not (so if using with a <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.TargetMixerStream"/> you might still need to set it to <see langword="true"/>).
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StreamCopy.ReSync">
            <summary>
            Re-Synchronizes the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> with the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> when using BASSmix mixer channels.
            </summary>
            <remarks>
            Call this method right after you unpaused or start playing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>, and if you are using this instance with a <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.TargetMixerStream"/> in order to resync the stream copy after it was paused.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StreamCopy.OnChannelChanged">
            <summary>
            Occures when the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> has been changed. 
            </summary>
            <remarks>NOT for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StreamCopy.OnBypassChanged">
            <summary>
            Occures when the <see cref="M:Un4seen.Bass.Misc.BaseDSP.SetBypass(System.Boolean)"/> method was called.
            </summary>
            <remarks>NOT for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StreamCopy.OnStarted">
            <summary>
            Occures when the <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> method was called.
            Actually creates the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> custom push stream here.
            </summary>
            <remarks>NOT for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StreamCopy.OnStopped">
            <summary>
            Occures when the <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> method was called.
            Actually frees the <see cref="P:Un4seen.Bass.Misc.DSP_StreamCopy.StreamCopy"/> custom stream here.
            </summary>
            <remarks>NOT for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StreamCopy.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which does the stream copy operation. Not for direct use in your application!
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>Not for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_StreamCopy.ToString">
            <summary>
            Returns the name of the DSP.
            </summary>
            <returns>The name of the DSP.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.DSP_BufferStream">
            <summary>
            Stream Buffer DSP (to clone a BASS stream's current sample data to a decoding stream).
            </summary>
            <remarks>A Stream Buffer DSP actually provides a synchronized clone of the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>'s sample data in a new decoding channel which can for example be used to get FFT or level data. 
            Use the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> decoding channel with the <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> methods to do retrieve the cloned sample data.
            This DSP will always provide a decoding channel (<see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/>).
            <para>The DSP automatically handles 8-, 16- or 32-bit sample data accordingly. 8- and 16-bit sample data will be clipped if needed, 32-bit floating-point values will not be clipped.
            Note: The channel flags of the <seealso cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> being used are actually the same as from the original <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>, but if you have FLOATDSP enabled the FLOAT flag will be added automatically.</para>
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).
            Changing the <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> when the DSP is already assigned will automatically reassign the DSP.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> property to change the channel assignment at any time. If the DSP has already been assigned, the DSP will immediately be reassigned to the new channel.</para>
            <para>Use the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> property (which represents a custom decoding stream) to get the level or FFT data from it. 
            If the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> is attached to a buffered output stream (e.g. via BASSmix to a mixer stream) there will be a delay due to the additional output buffer. 
            Use the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.OutputHandle"/> property in order to compensate for that (or leave to it's default 0 value in order to simply use a non-synchronized direct buffer - in such case the internal buffer will return the data as being heard).</para>
            <para>In addition you might use the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.IsOutputBuffered"/> property to specify, if the created <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> will be used with a buffered output stream. 
            In such case the decoding <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> position will be aligned to the output buffer (default is <see langword="true"/>).</para>
            <para>By default the internal buffer size is determined from the current BASS_CONFIG_BUFFER setting. 
            However, that might not always be correct, since the buffer size must also be equal to the one used with the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>.
            So you might change that using the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.ConfigBuffer"/> property.</para>
            <para>NOTE: This DSP does NOT support the <see cref="E:Un4seen.Bass.Misc.BaseDSP.Notification"/> event!</para>
            </remarks>
            <example>
            Create an exact shadow copy of a decoding stream:
            <code lang="C#">
            private DSP_BufferStream _bufferStream;
            ...
            // create a mixer outout stream
            _mixer1 = BassMix.BASS_MIXER_StreamCreate(44100, 2, BASSFlag.BASS_DEFAULT);
            Bass.BASS_ChannelPlay(_mixer1, false);
            _mixer2 = BassMix.BASS_MIXER_StreamCreate(44100, 2, BASSFlag.BASS_DEFAULT);
            Bass.BASS_ChannelPlay(_mixer2, false);
            // create a source stream and add it to the mixer1
            _stream = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT | 
                                                                  BASSFlag.BASS_STREAM_DECODE);
            BassMix.BASS_Mixer_StreamAddChannel(_mixer1, _stream, BASSFlag.BASS_DEFAULT);
            ...
            // create a clone of the source stream to add it to mixer2
            _bufferStream = new DSP_BufferStream();
            _bufferStream.ChannelHandle = _stream; // the stream to copy
            _bufferStream.DSPPriority = -4000;
            _bufferStream.Start();
            BassMix.BASS_Mixer_StreamAddChannel(_mixer1, _bufferStream.BufferStream, BASSFlag.BASS_DEFAULT);
            </code>
            <code lang="VB">
            Private _bufferStream As DSP_BufferStream
            ...
            ' create a mixer outout stream
            _mixer1 = BassMix.BASS_MIXER_StreamCreate(44100, 2, BASSFlag.BASS_DEFAULT)
            Bass.BASS_ChannelPlay(_mixer1, False)
            _mixer2 = BassMix.BASS_MIXER_StreamCreate(44100, 2, BASSFlag.BASS_DEFAULT)
            Bass.BASS_ChannelPlay(_mixer2, False)
            ' create a source stream and add it to the mixer1
            _stream = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT Or 
                                                                  BASSFlag.BASS_STREAM_DECODE)
            BassMix.BASS_Mixer_StreamAddChannel(_mixer1, _stream, BASSFlag.BASS_DEFAULT)
            ...
            ' create a clone of the source stream to add it to mixer2
            _bufferStream = New DSP_BufferStream()
            _bufferStream.ChannelHandle = _stream ' the stream to copy
            _bufferStream.DSPPriority = - 4000
            _bufferStream.Start()
            BassMix.BASS_Mixer_StreamAddChannel(_mixer1, _bufferStream.BufferStream, BASSFlag.BASS_DEFAULT)
            </code>
            Create a buffered stream copy to sync a FFT or GetLevel call:
            <code lang="C#">
            private DSP_BufferStream _bufferStream;
            ...
            // create a mixer outout stream
            _mixer = BassMix.BASS_MIXER_StreamCreate(44100, 2, BASSFlag.BASS_DEFAULT);
            Bass.BASS_ChannelPlay(BASSFlag.BASS_DEFAULT, false);
            // create a source stream and add it to the mixer
            _stream = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT | 
                                                                  BASSFlag.BASS_STREAM_DECODE);
            BassMix.BASS_Mixer_StreamAddChannel(_mixer, _stream, BASSFlag.BASS_DEFAULT);
            ...
            // create a buffer of the source stream for level and/or FFT data retrival in sync with the mixer output
            _bufferStream = new DSP_BufferStream();
            _bufferStream.ChannelHandle = _stream; // the stream to copy
            _bufferStream.OutputHandle = _mixer; // the stream to sync with (what's being heard)
            _bufferStream.DSPPriority = -4000;
            _bufferStream.Start();
            ...
            float[] fft = new float[2048];
            Bass.BASS_ChannelGetData(_bufferStream.BufferStream, fft, (int)BASSData.BASS_DATA_FFT4096);
            </code>
            <code lang="VB">
            Private _bufferStream As DSP_BufferStream
            ...
            ' create a mixer outout stream
            _mixer = BassMix.BASS_MIXER_StreamCreate(44100, 2, BASSFlag.BASS_DEFAULT)
            Bass.BASS_ChannelPlay(BASSFlag.BASS_DEFAULT, False)
            ' create a source stream and add it to the mixer
            _stream = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT Or 
                                                                  BASSFlag.BASS_STREAM_DECODE)
            BassMix.BASS_Mixer_StreamAddChannel(_mixer, _stream, BASSFlag.BASS_DEFAULT)
            ...
            ' create a buffer of the source stream for level and/or FFT data retrival in sync with the mixer output
            _bufferStream = New DSP_BufferStream()
            _bufferStream.ChannelHandle = _stream ' the stream to copy
            _bufferStream.OutputHandle = _mixer ' the stream to sync with (what's being heard)
            _bufferStream.DSPPriority = - 4000
            _bufferStream.Start()
            ...
            Dim fft(2048) As Single
            Bass.BASS_ChannelGetData(_bufferStream.BufferStream, fft, CInt(BASSData.BASS_DATA_FFT4096))
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_BufferStream.#ctor">
            <summary>
            Creates a new instance of the Stream Buffer DSP, not assigning the DSP yet.
            </summary>
            <remarks>The DSP is not automatically assigned by this constructor! You must set the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> and <see cref="P:Un4seen.Bass.Misc.BaseDSP.DSPPriority"/> manually prior to assigning the DSP.
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> to assign the DSP to the channel. Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            <para>The channel does not have to be playing to set a DSP function, they can be set before and while playing.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_BufferStream.#ctor(System.Int32,System.Int32)">
            <summary>
            Creates a new instance of the Stream Buffer DSP, which already assigns the DSP (<see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> will be called automatically).
            </summary>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="priority">The priority of the DSP, which determines it's position in the DSP chain - DSPs with higher priority are called before those with lower.</param>
            <remarks>The DSP is automatically assigned by this constructor!
            <para>Use <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> to remove the DSP (you can (re)assign the DSP at any time again by calling <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream">
            <summary>
            Gets the buffered BASS stream (the created custom stream).
            </summary>
            <remarks>You might use this stream channel handle to call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> in order to retrive the FFT or level data.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStreamFlags">
            <summary>
            Gets the channel flags of the <seealso cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> being used.
            </summary>
            <remarks>The channel flags are actually being the same as from the original <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>, but if you have FLOATDSP enabled the FLOAT flag will be added automatically.
            In addition <seealso cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> will always be a decoding stream!</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_BufferStream.OutputHandle">
            <summary>
            Gets or Sets a buffered output BASS stream to synchronize the position with (0 = use a non-synchronized direct buffer).
            </summary>
            <remarks>When not setting this property (or setting to 0) the internal buffer position will not be synchronized, which means the buffer reflects the immediate sample data as received in the DSP.
            This is perfect, if you want to create an exact shadow copy (clone) of the decoding <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>. In this case use the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> member to e.g. feed it to another
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_BufferStream.IsOutputBuffered">
            <summary>
            Gets or Sets, if the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> should be buffered or not (default is <see langword="true"/>).
            </summary>
            <remarks>If set to <see langword="true"/>, the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> position will be buffered. This option is useful, if you want to use it with a buffered output stream.
            If set to <see langword="false"/> the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> will not be buffered, which is usefull when used with unbuffered outputs (e.g. ASIO).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_BufferStream.ConfigBuffer">
            <summary>
            Gets or Sets the buffer length in milliseconds to be used (between 1 and 5000).
            </summary>
            <remarks>The buffer length needs to be as big as the BASS_CONFIG_BUFFER setting used to create the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>.
            <para>Normally there is no need set this value, since it will be calculated accordingly to the current BASS_CONFIG_BUFFER setting.
            But this implies, that you haven't changed the BASS_CONFIG_BUFFER between the creation of the stream an using this DSP.
            So if you have changed the BASS_CONFIG_BUFFER setting in the meantime, you must provide the new BASS_CONFIG_BUFFER size.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_BufferStream.ConfigBufferLength">
            <summary>
            Gets the buffer length in bytes which is being used.
            </summary>
            <remarks>
            This is the translated <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.ConfigBuffer"/> value.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_BufferStream.ClearBuffer">
            <summary>
            Clears the internal buffer (zeros all elements) and resets the buffer pointer.
            </summary>
            <remarks>
            Use this method e.g. when you paused/stoped the original <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/>.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferPosition">
            <summary>
            Gets or Sets the current buffer position in bytes.
            </summary>
            <remarks>This member is maintained automatically depending on the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.IsOutputBuffered"/> property and the current buffer state.
            So normally there is no need to modify this value. However if you have a real need you might do so.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_BufferStream.OnChannelChanged">
            <summary>
            Occures when the <see cref="P:Un4seen.Bass.Misc.BaseDSP.ChannelHandle"/> has been changed. 
            </summary>
            <remarks>NOT for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_BufferStream.OnBypassChanged">
            <summary>
            Occures when the <see cref="M:Un4seen.Bass.Misc.BaseDSP.SetBypass(System.Boolean)"/> method was called.
            Actually clears the internal copy buffer.
            </summary>
            <remarks>NOT for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_BufferStream.OnStarted">
            <summary>
            Occures when the <see cref="M:Un4seen.Bass.Misc.BaseDSP.Start"/> method was called.
            Actually creates the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> custom stream here.
            </summary>
            <remarks>NOT for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_BufferStream.OnStopped">
            <summary>
            Occures when the <see cref="M:Un4seen.Bass.Misc.BaseDSP.Stop"/> method was called.
            Actually frees the <see cref="P:Un4seen.Bass.Misc.DSP_BufferStream.BufferStream"/> custom stream here.
            </summary>
            <remarks>NOT for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_BufferStream.DSPCallback(System.Int32,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            User defined DSP callback function which does the stream copy operation. Not for direct use in your application!
            </summary>
            <param name="handle">The DSP handle.</param>
            <param name="channel">Channel that the DSP is being applied to.</param>
            <param name="buffer">The buffer to apply the DSP to. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">The user instance data given (see <see cref="P:Un4seen.Bass.Misc.BaseDSP.User"/>).</param>
            <remarks>Not for direct use in your application!</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.DSP_BufferStream.ToString">
            <summary>
            Returns the name of the DSP.
            </summary>
            <returns>The name of the DSP.</returns>
        </member>
        <member name="T:Un4seen.Bass.Misc.Visuals">
            <summary>
            Provides general visualisation methods to generate spectrum analyzers etc.
            <para>Requires: bass.dll - available @ www.un4seen.com</para>
            </summary>
            <remarks>
            <para>The Visuals class is an internal implementation of the BASS.NET API and does not require any additional extension or add-on to the BASS audio library, meaning only bass.dll is required.</para>
            <para>There is the need to create an instance of the class in order to use it!</para>
            <para>Most create spectrum methods have two overloads. One which directly creates a bitmap image (e.g. to be used with a PictureBox) and one which receives a Graphics GDI+ object (e.g. to be used when you build your own custom components).</para>
            <para>Take a look at the Simple.cs demo code for a list of all spectrum graphs available. All methods accept a long list of parameters to even customize each spectrum graph.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.#ctor">
            <summary>
            Default constructor. Simply create an instance and use it.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.Visuals._fft">
            <summary>
            Global FFT sample buffer
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.Visuals.ChannelIsMixerSource">
            <summary>
            Gets or Sets, if the channel being used in one of the Create methods (e.g. <see cref="M:Un4seen.Bass.Misc.Visuals.CreateSpectrum(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Boolean,System.Boolean,System.Boolean)"/>) is a buffered mixer source channel. (Default=<see langword="false"/>).
            </summary>
            <remarks>When setting this property to <see langword="true"/>, the BASS_MIXER_CHAN_BUFFER flag must have been used on the channel.
            And such instead of call BASS_ChannelGetData, BASS_Mixer_ChannelGetData will be called internaly to query the FFT data.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear">
            <summary>
            Gets or Sets the scaling factor to apply when linear spectrum drawing is selected. (Default=9).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinearBoost">
            <summary>
            Gets or Sets the boost factor for higher frequencies to apply when linear spectrum drawing is selected. (Default=0.05).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr">
            <summary>
            Gets or Sets the scaling factor to apply when non-linear spectrum drawing is selected to make low values more visible. (Default=4).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqrBoost">
            <summary>
            Gets or Sets the boost factor for higher frequencies to apply when non-linear spectrum drawing is selected. (Default=0.005).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.Visuals.MaxFFTData">
            <summary>
            Gets the number of FFT data used (see <see cref="P:Un4seen.Bass.Misc.Visuals.MaxFFT"/> (Defaut is 4096).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.Visuals.MaxFFTSampleIndex">
            <summary>
            Gets the maximum FFT data index which can be used (according to <see cref="P:Un4seen.Bass.Misc.Visuals.MaxFFT"/>, default is 2047).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.Visuals.MaxFFT">
            <summary>
            Gets or Sets the number of FFT data to get (can be either <see cref="F:Un4seen.Bass.BASSData.BASS_DATA_FFT512"/>, <see cref="F:Un4seen.Bass.BASSData.BASS_DATA_FFT1024"/>, <see cref="F:Un4seen.Bass.BASSData.BASS_DATA_FFT2048"/>, <see cref="F:Un4seen.Bass.BASSData.BASS_DATA_FFT4096"/> or <see cref="F:Un4seen.Bass.BASSData.BASS_DATA_FFT8192"/> (Default is 4096).
            </summary>
            <remarks>The higher the resolution, the more sample data is needed and the more complex the FFT calculation is.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.Visuals.MaxFrequencySpectrum">
            <summary>
            Gets or Sets the maximum number of samples to use when the fullSpectrum option is used (Default=2047 - all).
            <para>By default the full spectrum is drawn, which are 2047 samples. With this option you might limit this, since very high frequencies are often not much relevant for a visual display.
            You might use the <see cref="M:Un4seen.Bass.Utils.FFTFrequency2Index(System.Int32,System.Int32,System.Int32)"/> method with a length value of <see cref="P:Un4seen.Bass.Misc.Visuals.MaxFFTData"/> here to calculate an index for a desired upper limit frequency.
            E.g. if you want to limit the full spectrum display to an upper limit of around 11843Hz with a stream having a sampling rate of 44100Hz you might set this value to 1100.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.GetFrequencyFromPosX(System.Int32,System.Int32)">
            <summary>
            Returns the frequency in Hz represented by the given X coordinate position of a visual control.
            </summary>
            <param name="x">The X coordinate from which to get the frequency (between 0 and control.Width-1).</param>
            <param name="samplerate">The current samplerate of the channel which was used to render the visual (e.g. use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetInfo(System.Int32,Un4seen.Bass.BASS_CHANNELINFO)"/> to retrieve the current samplerate of the respective channel).</param>
            <returns>The frequency in Hz which is represented by the X coordinate of the visual.</returns>
            <remarks>The X coordinate position represents the zero based pixel number of the visual control being rendered.</remarks>
            <example>
            In the following example a pictureBox control is assumed being used:
            <code lang="C#">
            private void pictureBoxSpectrum_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
            {
              if (_vis == null)
                 return;
              int freq = _vis.GetFrequencyFromPosX(e.X, 44100);
              float amp = _vis.GetAmplitudeFromPosY(e.Y, this.pictureBoxSpectrum.Height);
              this.labelVis.Text = String.Format( "Freq={0}Hz, Amp={1}", freq, amp );
            }
            </code>
            <code lang="VB">
            Private Sub pictureBoxSpectrum_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs)
              If _vis Is Nothing Then
                Return
              End If
              Dim freq As Integer = _vis.GetFrequencyFromPosX(e.X, 44100)
              Dim amp As Single = _vis.GetAmplitudeFromPosY(e.Y, Me.pictureBoxSpectrum.Height)
              Me.labelVis.Text = [String].Format("Freq={0}Hz, Amp={1}", freq, amp)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.GetAmplitudeFromPosY(System.Int32,System.Int32)">
            <summary>
            Returns the amplitude (power) as a float value which is represented by the given Y coordinate position of a visual control.
            </summary>
            <param name="y">The Y coordinate from which to get the amplitude (between 0 and control.Height-1).</param>
            <param name="height">The maximum height of the visual control which was used to display the visual (e.g. pictureBox.Height).</param>
            <returns>The amplitude or power as a float value (between 0.0 and 1.0) which is represented by the Y coordinate of the visual.</returns>
            <remarks>The Y coordinate position represents the zero based pixel number of the visual control being rendered.</remarks>
            <example>
            In the following example a pictureBox control is assumed being used:
            <code lang="C#">
            private void pictureBoxSpectrum_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
            {
              if (_vis == null)
                return;
              int freq = _vis.GetFrequencyFromPosX(e.X, 44100);
              float amp = _vis.GetAmplitudeFromPosY(e.Y, this.pictureBoxSpectrum.Height);
              this.labelVis.Text = String.Format( "Freq={0}Hz, Amp={1}", freq, amp );
            }
            </code>
            <code lang="VB">
            Private Sub pictureBoxSpectrum_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs)
              If _vis Is Nothing Then
                Return
              End If
              Dim freq As Integer = _vis.GetFrequencyFromPosX(e.X, 44100)
              Dim amp As Single = _vis.GetAmplitudeFromPosY(e.Y, Me.pictureBoxSpectrum.Height)
              Me.labelVis.Text = [String].Format("Freq={0}Hz, Amp={1}", freq, amp)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrum(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Creates a bitmap representing a FFT spectrum graph.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the spectrum.</returns>
            <example>
            Using the following code in a timer routine (e.g. updated every 50ms):
            <code lang="C#">
            this.pictureBoxSpectrum.Image = Un4seen.Bass.Misc.Visuals.CreateSpectrum(_stream, 
                                              this.pictureBoxSpectrum.Width, 
                                              this.pictureBoxSpectrum.Height, 
                                              Color.Lime, Color.Red, Color.Black, 
                                              false, false, false);
            </code>
            <code lang="VB">
            Me.pictureBoxSpectrum.Image = Un4seen.Bass.Misc.Visuals.CreateSpectrum(_stream, 
                                            Me.pictureBoxSpectrum.Width, 
                                            Me.pictureBoxSpectrum.Height, 
                                            Color.Lime, Color.Red, Color.Black, 
                                            False, False, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrum(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Draws the spectrum graph directly on the provided GDI+ graphics.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumLine(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Creates a bitmap representing a FFT spectrum line graph.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="distance">The distance between the lines (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the spectrum.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumLine(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Draws the spectrum line graph directly on the provided GDI+ graphics.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="distance">The distance between the lines (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumEllipse(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Creates a bitmap representing a FFT spectrum ellipse graph.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="distance">The distance between the ellipses (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the spectrum.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumEllipse(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Draws the spectrum ellipse graph directly on the provided GDI+ graphics.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="distance">The distance between the ellipses (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumDot(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Creates a bitmap representing a FFT spectrum dot graph.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="dotwidth">The thickness of the dot (in pixel).</param>
            <param name="distance">The distance between the dots (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the spectrum.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumDot(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Draws the spectrum line graph directly on the provided GDI+ graphics.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="dotwidth">The thickness of the dot (in pixel).</param>
            <param name="distance">The distance between the dots (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumLinePeak(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Creates a bitmap representing a FFT spectrum line graph with peak hold.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="color3">The peak hold color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="peakwidth">The thickness of the peak line (in pixel).</param>
            <param name="distance">The distance between the lines (in pixel).</param>
            <param name="peakdelay">The delay how fast the peaks should fall (0=no delay, the higher the value, the slower the peaks will fall).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the spectrum.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumLinePeak(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Draws the spectrum line graph with peak hold directly on the provided GDI+ graphics.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="color3">The peak hold color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="peakwidth">The thickness of the peak line (in pixel).</param>
            <param name="distance">The distance between the lines (in pixel).</param>
            <param name="peakdelay">The delay how fast the peaks should fall (0=no delay, the higher the value, the slower the peaks will fall).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.ClearPeaks">
            <summary>
            Clears all last peak values. This is needed, if you changed from one peak spectrum to another or if you change a channel, to make sure no old history data is present.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumWave(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Creates a bitmap representing a FFT spectrum wave graph.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the spectrum.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumWave(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Draws the spectrum wave graph directly on the provided GDI+ graphics.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateWaveForm(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Creates a bitmap representing a sample data wave form graph.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="color1">The left signal color for the sample data.</param>
            <param name="color2">The right signal color for the sample data.</param>
            <param name="color3">The median color (null line).</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="mono"><see langword="true"/>, if a mono signal show be used (else a stereo signal is being used).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the spectrum.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateWaveForm(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Draws the sample data wave form graph directly on the provided GDI+ graphics.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The left signal color for the sample data.</param>
            <param name="color2">The right signal color for the sample data.</param>
            <param name="color3">The median color (null line).</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="linewidth">The thickness of the line (in pixel).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="mono"><see langword="true"/>, if a mono signal show be used (else a stereo signal is being used).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumBean(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Creates a bitmap representing a FFT spectrum dancing beans graph.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="beanwidth">The thickness of the beans (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the spectrum.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumBean(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Draws the spectrum dancing beans graph directly on the provided GDI+ graphics.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="beanwidth">The thickness of the beans (in pixel).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumText(System.Int32,System.Int32,System.Int32,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.String,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Creates a bitmap representing a FFT spectrum dancing text graph.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="text">The text characters to draw.</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the spectrum.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrumText(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Color,System.String,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Draws the spectrum dancing text graph directly on the provided GDI+ graphics.
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The base color (normal) for the FFT data.</param>
            <param name="color2">The peak color for the FFT data.</param>
            <param name="background">The background color to be used when drawing the image.</param>
            <param name="text">The text characters to draw.</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.DetectFrequency(System.Int32,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Gets the interpolated amplification value for a given frequency band.
            </summary>
            <param name="channel">The channel for which to detect the presence of the frequency band.</param>
            <param name="freq1">The lower bound of the frequency band (in Hz).</param>
            <param name="freq2">The upper bound of the frequency band (in Hz).</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <returns>The interpolated amplification level of the given frequency band. Note: The level is scaled either linerar or by Sqr, meaning values above 1.0 can be returned.
            </returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.DetectPeakFrequency(System.Int32,System.Single@)">
            <summary>
            Returns the frequency (in Hz) containing the maximum energy within the current FFT data when calling this method.
            </summary>
            <param name="channel">The channel for which to detect the peak frequency.</param>
            <param name="energy">Returns the energy (amplitude level) of the detected peak frequency.</param>
            <returns>The frequency (in Hz) containing the most energy. Or 0, if an error occurred.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.Visuals.CreateSpectrum3DVoicePrint(System.Int32,System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Int32,System.Boolean,System.Boolean)">
            <summary>
            Draws one line of a 3D voice print spectrum at the given position.
            <para>horizontal=time, vertical=frequency, color=amplitude</para>
            </summary>
            <param name="channel">The channel for which to create the spectrum graph.</param>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/> or can be created using <see cref="M:System.Drawing.Graphics.FromHwnd(System.IntPtr)"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="color1">The base color of the 3D voice print (only the RED component is taken).</param>
            <param name="color2">The color of the position marker.</param>
            <param name="pos">The position where to plot the 3D line</param>
            <param name="linear"><see langword="true"/>, if linear scaling (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorLinear"/>) should be applied to the FFT data. <see langword="false"/>, to scale by Sqr (see <see cref="P:Un4seen.Bass.Misc.Visuals.ScaleFactorSqr"/>) to make low values more visible (recommended).</param>
            <param name="fullSpectrum"><see langword="true"/>, if the full frequency spectrum should be shown (across the whole width of the image).
            <see langword="false"/>, if the width of the image should be use (in this case as much frequencies are shown - starting with the lower values - as fit into the width).</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>You need to call this method frequently and increase the position by 1 every time in order to plot the voice print over time.
            <para>The amplitude color (GREEN and BLUE component) is calculated from the FFT sample data (RED component is taken from the color1 parameter).</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveForm">
            <summary>
            Provides general methods to generate a stereo or mono channel waveform graphic for an audio file or a decoding stream handle.
            <para>The WaveForm will be drawn as two independent stereo envelopes, a combined dual mono envelope or a mono envelope.</para>
            <para>Requires: bass.dll - available @ www.un4seen.com</para>
            </summary>
            <remarks>
            <para>The WaveForm class is an internal implementation of the BASS.NET API and does not require any additional extension or add-on to the BASS audio library, meaning only bass.dll is required.</para>
            <para>However, <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> must have been called before using any method within this class!</para>
            <para>NOTE: When using the WaveForm class with an already existing decoding channel (created with the BASS_STREAM_DECODE flag) the data will be retrieved from that channel, meaning the data will be 'stolen'.
            In such a case you must reset the position to the beginning of the stream afterwards, e.g. use <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> before rendering the WaveForm and call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> when rendering of the WaveForm has been completed.</para>
            <para>The typical use of this class is as followed:</para>
            <para>a) create an instance of this class (e.g. together with the filename)</para>
            <para>b) call <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/> to scan all peak levels</para>
            <para>c) call <see cref="M:Un4seen.Bass.Misc.WaveForm.CreateBitmap(System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean)"/> to generate a wave form image</para>
            <para>You might also use <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormSaveToFile(System.String)"/> and <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)"/> to save or load a rendered wave form.</para>
            <para>The methods <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/> and <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveMarker(System.String)"/> lets you manage named position markers within the WaveForm to be displayed, use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawMarker"/> property to specify how and if markers should be displayed.</para>
            <para>When the image of the rendered wave form or a zoomed window of it is created via <see cref="M:Un4seen.Bass.Misc.WaveForm.CreateBitmap(System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean)"/> the global properties <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorBackground"/>, <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorRight"/> and <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorLeft"/> as well as <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorMarker"/>are used.</para>
            <para>You might also access the scanned peak levels directly via the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> property.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.#ctor">
            <summary>
            Default constructor creating a new instance of the WaveForm class.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.#ctor(System.String)">
            <summary>
            Creates a new instance of the WaveForm class, initializing the file name.
            </summary>
            <param name="fileName">The file name to render.</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.#ctor(System.String,Un4seen.Bass.Misc.WAVEFORMPROC,System.Windows.Forms.Control)">
            <summary>
            Creates a new instance of the WaveForm class, initializing the file name and a notification handler.
            </summary>
            <param name="fileName">The file name to render.</param>
            <param name="proc">A <see cref="T:Un4seen.Bass.Misc.WAVEFORMPROC"/> callback delegate to be invoked during the rendering progress.</param>
            <param name="win">An optional window control which will be used to invoke the <see cref="T:Un4seen.Bass.Misc.WAVEFORMPROC"/> (if set), so that the callback will be executed in the 'correct' GUI thread.</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.#ctor(Un4seen.Bass.Misc.WaveForm,System.Boolean)">
            <summary>
            Creates a clone. 
            </summary>
            <param name="clone"></param>
            <param name="flat"></param>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.FileName">
            <summary>
            Gets or Sets the file name to render. Needs to be set before calling the RenderFile method.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.FrameResolution">
            <summary>
            Gets or Sets the rendering resolution in seconds. The resolution defines the length of one frame which is the smallest unit to display.
            <para>The minimum is 0.001 (1ms) and the maximum is 5.0 (5000ms, 5sec.).
            Default is 0.01 = 10ms.</para>
            </summary>
            <remarks>
            If <see cref="P:Un4seen.Bass.Misc.WaveForm.UseSimpleScan"/> is used, the frame resolution is fixed to 20ms!
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.CallbackFrequency">
            <summary>
            Gets or Sets the frequency in <see cref="P:Un4seen.Bass.Misc.WaveForm.FrameResolution"/> frames - how often the <see cref="T:Un4seen.Bass.Misc.WAVEFORMPROC"/> callback should be invoked (default=250, every 5sec. - if the FrameResolution is set to 20ms).
            <para>Specify 0, if you want to invoke the callback only at the end of the rendering process.</para>
            <para>Example: Specify 50, if you want the callback to be called for every second of the deconding stream (slow - if the FrameResolution is set to 20ms).
            Or specify 500 to invoke the callback for every 10 seconds (if the FrameResolution is set to 20ms) rendered.
            Default is 250 = every 5sec. (if the FrameResolution is set to 20ms default).</para>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.NotifyHandler">
            <summary>
            Gets or Sets the <see cref="T:Un4seen.Bass.Misc.WAVEFORMPROC"/> callback delegete which should be invoked during the rendering progress started with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.WinControl">
            <summary>
            Gets or Sets the application window control (use null for console applications).
            <para>This window control will be used to invoke the <see cref="T:Un4seen.Bass.Misc.WAVEFORMPROC"/> (if set), so that the callback will be executed in the 'correct' GUI thread, if the background option was set during <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.</para>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.PreScan">
            <summary>
            Gets or Sets, if the PRESCAN flag should be added by default when rendering the WaveForm.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.UseSimpleScan">
            <summary>
            Gets or Sets, if a faster simple scan algo should be used.
            </summary>
            <remarks>The simple scan is faster but limits the <see cref="P:Un4seen.Bass.Misc.WaveForm.FrameResolution"/> to fixed 10ms!</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.IsRendered">
            <summary>
            Gets, if the wave form has already been rendered.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.IsRenderingInProgress">
            <summary>
            Gets, if the wave form rendering process is still in progress.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.FramesToRender">
            <summary>
            Gets how many frames have to be rendered in total (one frame = <see cref="P:Un4seen.Bass.Misc.WaveForm.FrameResolution"/> ms).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.FramesRendered">
            <summary>
            Gets how many frames have been rendered (one frame = <see cref="P:Un4seen.Bass.Misc.WaveForm.FrameResolution"/> ms).
            <para>When rendering has finished this should be equal to <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesToRender"/>.</para>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.DetectBeats">
            <summary>
            Gets or Sets, if the beat positions should also be detected during the rendering process.
            </summary>
            <remarks>Note: If enabled BASS_FX is required!
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.TempoFactor">
            <summary>
            Gets or Sets the tempo adjustment factor in percent (e.g. 0.05 for +5% or -0.1 for -10%, default is 0).
            </summary>
            <remarks>Make sure to set this property after you have called <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> (when this is needed), since <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> will reset the tempo factor to 0.
            <para>Adjusting the tempo factor might be desired, if you want to display a zoomed wave form according to the current playback speed/tempo, if that was changes e.g. by a BASS_FX tempo stream.
            Normally this is only needed, if you display two or more partial (zoomed) wave forms in parallel.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.SyncFactor">
            <summary>
            Gets the current sync factor between rendering and playback.
            </summary>
            <remarks>The factor will reflect the difference between the resolution used during rendering and playback (e.g. because different stream flags have been used during rendering and during playback - for example rendering is done in 16-bit whereas the playback stream is using 32-bit float).
            In addition the sync factor also reflects the <see cref="P:Un4seen.Bass.Misc.WaveForm.TempoFactor"/> (as the rendering is always done in the original speed whereas playback might be done at a different speed).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.GainFactor">
            <summary>
            Gets or Sets a gain factor which should be used when creating the WaveForm image to amplify the amplitude (default is 1.0 = no amplification).
            </summary>
            <remarks>The gain factor amplifies the entire WaveForm amplitude.
            Values below 1.0 will lower the signal amplitude in the image, values above 1.0 will raise the signal amplitude in the image.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.Wave">
            <summary>
            Gets or Sets the rendered wave buffer instance, ie. lets you access the peak levels scanned.
            </summary>
            <remarks>Setting this property is not recommended, but possible e.g. if you want to create a reference copy of an already rendered WaveForm.
            Note, that when assigning a <see cref="T:Un4seen.Bass.Misc.WaveForm.WaveBuffer"/> from another instance a reference is create (not a full copy).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorBackground">
            <summary>
            Gets or Sets the background color to be used when drawing the wave form image (Default = SystemColors.Control).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorLeft">
            <summary>
            Gets or Sets the base color (left channel) to be used when drawing the wave form image (Default = Color.Gainsboro).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorLeft2">
            <summary>
            Gets or Sets the gradient color (left channel) to be used when drawing the wave form image (Default = Color.Gainsboro).
            </summary>
            <remarks>This property is only used if <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawGradient"/> is set to <see langword="true"/>.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorLeftEnvelope">
            <summary>
            Gets or Sets the envelope color (left channel) to be used when drawing the wave form image (Default = Color.Gray).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.DrawEnvelope">
            <summary>
            Gets or Sets a flag if the envelope should be drawn in the wave form image (Default = <see langword="true"/>).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.DrawCenterLine">
            <summary>
            Gets or Sets a flag if the center line should be drawn in the wave form image (Default = <see langword="true"/>).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorMiddleLeft">
            <summary>
            Gets or Sets the center line color (left channel) to be used when drawing the wave form image (Default = Color.Empty).
            </summary>
            <remarks>When Color.Empty is selected the <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorLeft"/> is used instead (which is the default).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorMiddleRight">
            <summary>
            Gets or Sets the center line color (right channel) to be used when drawing the wave form image (Default = Color.Empty).
            </summary>
            <remarks>When Color.Empty is selected the <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorRight"/> is used instead (which is the default).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.DrawGradient">
            <summary>
            Gets or Sets a flag if the wave form should be drawn in gradient mode (Default = <see langword="false"/>).
            </summary>
            <remarks>If set to <see langword="true"/> the <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorLeft"/> and <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorLeftEnvelope"/> resp. the <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorRight"/> and <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorRightEnvelope"/></remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorRight">
            <summary>
            Gets or Sets the base color (right channel) to be used when drawing the wave form image (Default = Color.LightGray).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorRight2">
            <summary>
            Gets or Sets the gradient color (right channel) to be used when drawing the wave form image (Default = Color.White).
            </summary>
            <remarks>This property is only used if <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawGradient"/> is set to <see langword="true"/>.</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorRightEnvelope">
            <summary>
            Gets or Sets the envelope color (right channel) to be used when drawing the wave form image (Default = Color.DimGray).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorVolume">
            <summary>
            Gets or Sets the color to be used when drawing volume curve (Default = Color.IndianRed).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.PixelFormat">
            <summary>
            Gets or Sets the pixel format to use for drawing a bitmap (Default = Format32bppArgb).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.DrawVolume">
            <summary>
            Gets or Sets if and how a volume curve should be drawn in the WaveForm (Default = None).
            </summary>
            <remarks>
            Volume Curve Drawing Type: Defines how the volume curve should be drawn with the WaveForm:
            <list type="table">
            <item><term>None</term><description>No volume curve will be drawn at all.</description></item>
            <item><term>Solid</term><description>A solid volume curve will be drawn over the WaveForm.</description></item>
            <item><term>Dotted</term><description>A dotted volume curve will be drawn over the WaveForm.</description></item>
            <item><term>NoPoints</term><description>Add this flag to suppress drawing the volume point markers (eg. Solid | NoPoints).</description></item>
            </list>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.VolumeCurveZeroLevel">
            <summary>
            Gets or Sets if the initial level when drawing a volume curve should be silent (default is <see langword="false"/>).
            </summary>
            <remarks>If <see langword="true"/> the initial level at the beginning and end of the wave form is 0 (silent) - else it is at maximum (0dB).</remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorBeat">
            <summary>
            Gets or Sets the color to be used when drawing beat position marker (Default = Color.CornflowerBlue).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.DrawBeat">
            <summary>
            Gets or Sets if and how beat position should be drawn in the WaveForm (Default = None).
            </summary>
            <remarks>
            Beat Drawing Type: use one of the  <see cref="T:Un4seen.Bass.Misc.WaveForm.BEATDRAWTYPE"/> flags:
            <list type="table">
            <item><term>None</term><description>No beat positions will be drawn at all.</description></item>
            <item><term>Top</term><description>The beat position lines will be drawn at the top of the WaveForm.</description></item>
            <item><term>Bottom</term><description>The beat position lines will be drawn at the bottom of the WaveForm.</description></item>
            <item><term>Middle</term><description>The beat position lines will be drawn in the middle of the WaveForm.</description></item>
            <item><term>TopBottom</term><description>The beat position lines will be drawn at the top and bottom of the WaveForm.</description></item>
            </list>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.BeatLength">
            <summary>
            Gets or Sets the length of the beat position line to be drawn in percentage of the total height (default is 0.05 = 5%).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.BeatWidth">
            <summary>
            Gets or Sets the width in pixel of the beat position line to be drawn (default is 1px).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.ColorMarker">
            <summary>
            Gets or Sets the color to be used when drawing a marker (Default = Color.DarkBlue).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.MarkerFont">
            <summary>
            Gets or Sets the font to be used when drawing a marker (Default = Arial, 7.5, regular).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.DrawMarker">
            <summary>
            Gets or Sets if and how markers should be drawn in the WaveForm (Default = None).
            </summary>
            <remarks>
            Marker Drawing Type: use any combination of the <see cref="T:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE"/> flags:
            <list type="table">
            <item><term>None</term><description>No markers will be drawn at all.</description></item>
            <item><term>Line</term><description>The markers lines will be drawn.</description></item>
            <item><term>Name</term><description>The name of the markers will be drawn.</description></item>
            <item><term>NamePositionAlternate</term><description>When marker names are drawn, they are drawn in an alternate way (top, bottom, top, bottom, ...).</description></item>
            <item><term>NamePositionTop</term><description>When marker names are drawn, they are drawn on top of the marker lines.</description></item>
            <item><term>NamePositionBottom</term><description>When marker names are drawn, they are drawn on top of the marker lines.</description></item>
            <item><term>NamePositionMiddle</term><description>When marker names are drawn, they are drawn in the middle of the marker lines.</description></item>
            </list>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.MarkerLength">
            <summary>
            Gets or Sets the length of the marker line to be drawn in percentage of the total height (default is 0.1 = 10%).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE">
            <summary>
            Marker Drawing Type: Defines how markers should be drawn with the WaveForm - any combination of the following flags:
            <list type="table">
            <item><term>None</term><description>No markers will be drawn at all.</description></item>
            <item><term>Line</term><description>The markers lines will be drawn.</description></item>
            <item><term>Name</term><description>The name of the markers will be drawn.</description></item>
            <item><term>NamePositionAlternate</term><description>When marker names are drawn, they are drawn in an alternate way (top, bottom, top, bottom, ...) - default.</description></item>
            <item><term>NamePositionTop</term><description>When marker names are drawn, they are drawn on top of the marker lines.</description></item>
            <item><term>NamePositionBottom</term><description>When marker names are drawn, they are drawn on top of the marker lines.</description></item>
            <item><term>NamePositionMiddle</term><description>When marker names are drawn, they are drawn in the middle of the marker lines.</description></item>
            </list>
            </summary>
            <remarks>Used in the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawMarker"/> property.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE.None">
            <summary>
            No markers will be drawn at all.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE.Line">
            <summary>
            The markers lines will be drawn.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE.Name">
            <summary>
            The name of the markers will be drawn.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE.NamePositionAlternate">
            <summary>
            When marker names are drawn, they are drawn in an alternate way (top, bottom, top, bottom, ...) - default.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE.NamePositionTop">
            <summary>
            When marker names are drawn, they are drawn on top of the marker lines.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE.NamePositionBottom">
            <summary>
            When marker names are drawn, they are drawn on top of the marker lines.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE.NamePositionMiddle">
            <summary>
            When marker names are drawn, they are drawn in the middle of the marker lines.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE.NameBoxFilled">
            <summary>
            A box will be drawn around the marker name, filled with the <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorBackground"/> color.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.MARKERDRAWTYPE.NameBoxFillInverted">
            <summary>
            A box will be drawn around the marker name, filled with the <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorMarker"/> color.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveForm.VOLUMEDRAWTYPE">
            <summary>
            Volume Curve Drawing Type: Defines how the volume curve should be drawn with the WaveForm:
            <list type="table">
            <item><term>None</term><description>No volume curve will be drawn at all.</description></item>
            <item><term>Solid</term><description>A solid volume curve will be drawn over the WaveForm.</description></item>
            <item><term>Dotted</term><description>A dotted volume curve will be drawn over the WaveForm.</description></item>
            <item><term>NoPoints</term><description>Add this flag to suppress drawing the volume point markers (eg. Solid | NoPoints).</description></item>
            </list>
            </summary>
            <remarks>Used in the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawVolume"/> property.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.VOLUMEDRAWTYPE.None">
            <summary>
            No volume curve will be drawn at all.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.VOLUMEDRAWTYPE.Solid">
            <summary>
            A solid volume curve will be drawn over the WaveForm.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.VOLUMEDRAWTYPE.Dotted">
            <summary>
            A dotted volume curve will be drawn over the WaveForm.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.VOLUMEDRAWTYPE.NoPoints">
            <summary>
            The volume point markers will not be drawn.
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveForm.BEATDRAWTYPE">
            <summary>
            Beat Drawing Type: Defines how beat positions should be drawn with the WaveForm:
            <list type="table">
            <item><term>None</term><description>No beat positions will be drawn at all.</description></item>
            <item><term>Top</term><description>The beat position lines will be drawn at the top of the WaveForm.</description></item>
            <item><term>Bottom</term><description>The beat position lines will be drawn at the bottom of the WaveForm.</description></item>
            <item><term>Middle</term><description>The beat position lines will be drawn in the middle of the WaveForm.</description></item>
            <item><term>TopBottom</term><description>The beat position lines will be drawn at the top and bottom of the WaveForm.</description></item>
            </list>
            </summary>
            <remarks>Used in the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawBeat"/> property.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.BEATDRAWTYPE.None">
            <summary>
            No beat position will be drawn at all.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.BEATDRAWTYPE.Top">
            <summary>
            The beat position lines will be drawn at the top of the WaveForm.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.BEATDRAWTYPE.Bottom">
            <summary>
            The beat position lines will be drawn at the bottom of the WaveForm.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.BEATDRAWTYPE.Middle">
            <summary>
            The beat position lines will be drawn in the middle of the WaveForm.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.BEATDRAWTYPE.TopBottom">
            <summary>
            The beat position lines will be drawn at the top and bottom of the WaveForm.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.DrawWaveForm">
            <summary>
            Gets or Sets how the wave form should be drawn (Default = Stereo).
            </summary>
            <remarks>
            WaveForm Drawing Type: use one of the following <see cref="T:Un4seen.Bass.Misc.WaveForm.WAVEFORMDRAWTYPE"/>:
            <list type="table">
            <item><term>Stereo</term><description>Two independent wave forms will be drawn (upper=left channel, lower=right channel).</description></item>
            <item><term>Mono</term><description>One combined mono wave form will be drawn.</description></item>
            <item><term>DualMono</term><description>Two overloaded mono wave forms (left, right) will be drawn.</description></item>
            <item><term>HalfMono</term><description>One combined mirrored half mono wave form will be drawn.</description></item>
            </list>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveForm.WAVEFORMDRAWTYPE">
            <summary>
            WaveForm Drawing Type: Defines how the wave form should be drawn:
            <list type="table">
            <item><term>Stereo</term><description>Two independent wave forms will be drawn (upper=left channel, lower=right channel).</description></item>
            <item><term>Mono</term><description>One combined mono wave form will be drawn.</description></item>
            <item><term>DualMono</term><description>Two overloaded mono wave forms (left, right both centered) will be drawn.</description></item>
            <item><term>HalfMono</term><description>One combined mirrored half mono wave form will be drawn (using <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorLeft"/>, 0db at bottom).</description></item>
            <item><term>HalfMonoFlipped</term><description>One combined mirrored half mono wave form will be drawn (using <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorLeft"/>, 0db at top).</description></item>
            </list>
            </summary>
            <remarks>Used in the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawMarker"/> property.</remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WAVEFORMDRAWTYPE.Stereo">
            <summary>
            Two independent wave forms will be drawn (upper=left channel, lower=right channel).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WAVEFORMDRAWTYPE.Mono">
            <summary>
            One combined mono wave form will be drawn (using <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorLeft"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WAVEFORMDRAWTYPE.DualMono">
            <summary>
            Two overloaded mono wave forms (left, right both centered) will be drawn.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WAVEFORMDRAWTYPE.HalfMono">
            <summary>
            One combined mirrored half mono wave form will be drawn (using <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorLeft"/>, 0db at bottom).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WAVEFORMDRAWTYPE.HalfMonoFlipped">
            <summary>
            One combined mirrored half mono wave form will be drawn (using <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorLeft"/>, 0db at top).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveForm.WaveBuffer">
            <summary>
            The internal class containing the rended wave buffer data (in frames).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveBuffer.#ctor">
            <summary>
            Internal Constructor.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.fileName">
            <summary>
            Will keep the related stream file name (if set). Only used internally for serialization.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.flags">
            <summary>
            Will keep the stream create flags (as an int), see <see cref="T:Un4seen.Bass.BASSFlag"/>.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.chans">
            <summary>
            Number of channels (1=mono, 2=stereo, ...).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.bpf">
            <summary>
            Bytes per frame (one frame is a window with the length defined in <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.resolution"/>).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.resolution">
            <summary>
            Frame resolution in milliseconds
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.data">
            <summary>
            Data buffer containing the rendered peak levels of the right and left channel (one element represents the data of one frame).
            <para>The <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.Level.left"/> and <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.Level.right"/> values represent each the absolute signed maximum value of the left resp. right channel' sample data within the rendered frame (e.g. -10000 would be kept instead of +8000).
            If the channel is mono, then the left and right value of the <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.data"/> would contain the same value.</para>
            <para>Structure of one <see cref="T:Un4seen.Bass.Misc.WaveForm.WaveBuffer.Level"/> element:
            <code lang="C#">
            |       32-bit      |
            |   left  |  right  |
            </code>
            </para>
            <para>Each level ranges linearly from -32768 to 0 (silent) to +32767.</para>
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.marker">
            <summary>
            List of optional markers within the WaveForm (or <see langword="null"/>, if no markers are defined).
            <para>Key (string) = Name of the marker, Value (long) = Position of the marker (in bytes of the rendering resolution).</para>
            </summary>
            <remarks>Markers might be used to highlight certain positions within a WaveForm, e.g. Cue-, Ramp-, Fade- or Mix-Points.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawMarker"/> property to define if and how markers should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorMarker"/> property will be used as the the drawing color.</para>
            <para>Markers can be get, set or removed by using the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarker(System.String)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveMarker(System.String)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllMarker"/> methods.</para>
            <para>Note: When using the <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/> method the position (in byte) will be converted to the original rendering resolution.
            And when using the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarker(System.String)"/> method the position will automatically be converted according to the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> stream.
            However, if you try to access this member directly keep in mind, that marker positions should be according to it's original rendering resolution!</para>
            </remarks>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.beats">
            <summary>
            List of optional beat positions within the WaveForm (or <see langword="null"/>, if no beat positions have been detected).
            <para>Each Element reflects one beat position (long value, in bytes of the original rendering resolution).</para>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveForm.WaveBuffer.bps">
            <summary>
            Returns the bytes per sample (16-bit samples will return 2, 32-bit samples will return 4 and 8-bit samples will return 1).
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveForm.WaveBuffer.Level">
            <summary>
            This structure represents one element of a <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.data"/> array.
            It consists of a <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.Level.left"/> and <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.Level.right"/> value (both in the range of -32768 and +32767).
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.Level.left">
            <summary>
            The signed maximum value of the left channel of the the wave buffer data at this point.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.Level.right">
            <summary>
            The signed maximum value of the right channel of the the wave buffer data at this point.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveBuffer.Level.#ctor(System.Int16,System.Int16)">
            <summary>
            Creates a new instance of the Level structure taking the given values.
            </summary>
            <param name="levelL">The left level value.</param>
            <param name="levelR">The right level value.</param>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveForm.VolumePoint">
            <summary>
            The class represents a volume point to be used to draw a volume curve within the wave form.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.VolumePoint.Position">
            <summary>
            Original position of the volume point.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveForm.VolumePoint.Level">
            <summary>
            0f=silent, 1f=0dB.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.VolumePoint.#ctor(System.Int64,System.Single)">
            <summary>
            Creates a new volume point instance.
            </summary>
            <param name="position">The byte position.</param>
            <param name="level">The volume level between 0f (silent) and 1f (max=0dB).</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.VolumePoint.ToString">
            <summary>
            Returns the string representation of a wave form volume point.
            </summary>
            <returns>The string of this instance representation.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.VolumePoint.CompareTo(System.Object)">
            <summary>
            Compares the current <see cref="T:Un4seen.Bass.Misc.WaveForm.VolumePoint"/> object to another object based on it's <see cref="F:Un4seen.Bass.Misc.WaveForm.VolumePoint.Position"/>.
            </summary>
            <param name="obj">The VolumePoint object to compare to.</param>
            <returns>If the two objects are of the type VolumePoint, the method behaves exactly like long.CompareTo, and the returned values are: -1 if the position value is greater than the position value of the current object. 
            0 if the two positions are identical. 1 if the position value is less than the position value of the current object.
            </returns>
            <exception cref="T:System.ArgumentException"><paramref name="obj"/> is not a VolumePoint.</exception>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Clone(System.Boolean)">
            <summary>
            Returns a new WaveForm instance which is a clone of the current one.
            </summary>
            <param name="flat">Set this to <see langword="false"/> if you also want the <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.data"/> and <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.beats"/> array to be cloned - else they will be referenced.</param>
            <returns>The new (cloned) WaveForm - or <see langword="null"/> on error.</returns>
            <remarks>
            Note: The WaveForm must have been rendered before it might be cloned (i.e. <see cref="P:Un4seen.Bass.Misc.WaveForm.IsRendered"/> must return <see langword="true"/> and <see cref="P:Un4seen.Bass.Misc.WaveForm.IsRenderingInProgress"/> must return <see langword="false"/>).
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Reset">
            <summary>
            Resets the wave form.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)">
            <summary>
            Start the rendering process for the specified decoding stream (peak levels will be scanned).
            </summary>
            <param name="decodingStream">A prepared decoding channel to use for rendering.</param>
            <param name="background"><see langword="true"/>, if rendering should be performed in an independent threadpool thread (using a Normal priority). <see langword="false"/>, if rendering should be executed synchronious.</param>
            <returns><see langword="true"/>, if rendering was started successfully, else <see langword="false"/>.</returns>
            <remarks>This overload uses the specified decoding channel. It's position will be set to 0 first. The channel can not and should not be used by your application in the meantime until rendering has been finished!
            <para>The decoding channel will be freed automatically by this method after rendering has been finished!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean,System.Boolean)">
            <summary>
            Start the rendering process for the specified decoding stream (peak levels will be scanned).
            </summary>
            <param name="decodingStream">A prepared decoding channel to use for rendering.</param>
            <param name="background"><see langword="true"/>, if rendering should be performed in an independent threadpool thread (using a Normal priority). <see langword="false"/>, if rendering should be executed synchronious.</param>
            <param name="freeStream"><see langword="true"/>, if the <paramref name="decodingStream"/> should be freed after rendering.</param>
            <returns><see langword="true"/>, if rendering was started successfully, else <see langword="false"/>.</returns>
            <remarks>This overload uses the specified decoding channel. It's position will be set to 0 first. The channel can not and should not be used by your application in the meantime until rendering has been finished!
            <para>The decoding channel will be freed automatically by this method after rendering has been finished!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean,System.Threading.ThreadPriority,System.Boolean)">
            <summary>
            Start the rendering process for the specified decoding stream (peak levels will be scanned).
            </summary>
            <param name="decodingStream">A prepared decoding channel to use for rendering.</param>
            <param name="background"><see langword="true"/>, if rendering should be performed in an independent background thread. <see langword="false"/>, if rendering should be executed synchronious.</param>
            <param name="prio">The thread priority to be used with the background thread (note, that when using a Normal priority a ThreadPool thread will be used).</param>
            <param name="freeStream"><see langword="true"/>, if the <paramref name="decodingStream"/> should be freed after rendering.</param>
            <returns><see langword="true"/>, if rendering was started successfully, else <see langword="false"/>.</returns>
            <remarks>This overload uses the specified decoding channel. It's position will be set to 0 first. The channel can not and should not be used by your application in the meantime until rendering has been finished!
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Boolean,Un4seen.Bass.BASSFlag)">
            <summary>
            Start the rendering process for the <see cref="P:Un4seen.Bass.Misc.WaveForm.FileName"/> given (peak levels will be scanned).
            </summary>
            <param name="background"><see langword="true"/>, if rendering should be performed in an independent threadpool thread (using a Normal priority). <see langword="false"/>, if rendering should be executed synchronious.</param>
            <param name="flags">A combination of the <see cref="T:Un4seen.Bass.BASSFlag"/> flags on how to create the decoding stream. The <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> and <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_PRESCAN"/> flags will be added automatically here, if not already set!</param>
            <returns><see langword="true"/>, if rendering was started successfully, else <see langword="false"/>.</returns>
            <remarks>This overload creates an internal decoding channel allowing to render the peak levels independently.
            <para>If you intend to use this overload to render the wave form in parallel while already playing out the file, it is recommended to specify the same flags as for your playing stream.
            This is because <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(System.Int32,System.Int64)"/> etc. would return different values if you specified different resolutions for your playing stream and your rendering stream (eg. a stream with BASS_SAMPLE_FLOAT would return twice as much bytes as a stream created with the default 16-bit resolution).</para>
            <para>If your playing stream and this call uses different flags, you might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method, so that the members <see cref="M:Un4seen.Bass.Misc.WaveForm.Position2Frames(System.Int64)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.Frame2Bytes(System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.GetBytePositionFromX(System.Int32,System.Int32,System.Int32,System.Int32)"/>
            will return converted values according to your playing stream.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Boolean,System.Threading.ThreadPriority,Un4seen.Bass.BASSFlag)">
            <summary>
            Start the rendering process for the <see cref="P:Un4seen.Bass.Misc.WaveForm.FileName"/> given (peak levels will be scanned).
            </summary>
            <param name="background"><see langword="true"/>, if rendering should be performed in an independent background thread. <see langword="false"/>, if rendering should be executed synchronious.</param>
            <param name="prio">The thread priority to be used with the background thread (note, that when using a Normal priority a ThreadPool thread will be used).</param>
            <param name="flags">A combination of the <see cref="T:Un4seen.Bass.BASSFlag"/> flags on how to create the decoding stream. The <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> and <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_PRESCAN"/> flags will be added automatically here, if not already set!</param>
            <returns><see langword="true"/>, if rendering was started successfully, else <see langword="false"/>.</returns>
            <remarks>This overload creates an internal decoding channel allowing to render the peak levels independently.
            <para>If you intend to use this overload to render the wave form in parallel while already playing out the file, it is recommended to specify the same flags as for your playing stream.
            This is because <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(System.Int32,System.Int64)"/> etc. would return different values if you specified different resolutions for your playing stream and your rendering stream (eg. a stream with BASS_SAMPLE_FLOAT would return twice as much bytes as a stream created with the default 16-bit resolution).</para>
            <para>If your playing stream and this call uses different flags, you might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method, so that the members <see cref="M:Un4seen.Bass.Misc.WaveForm.Position2Frames(System.Int64)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.Frame2Bytes(System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.GetBytePositionFromX(System.Int32,System.Int32,System.Int32,System.Int32)"/>
            will return converted values according to your playing stream.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Boolean,Un4seen.Bass.BASSFlag,System.IntPtr,System.Int64)">
            <summary>
            Start the rendering process for audio data located at the <paramref name="memory"/> position (peak levels will be scanned).
            Note: The <see cref="P:Un4seen.Bass.Misc.WaveForm.FileName"/> will be ignored.
            </summary>
            <param name="background"><see langword="true"/>, if rendering should be performed in an independent background thread (using a Normal priority). <see langword="false"/>, if rendering should be executed synchronious.</param>
            <param name="flags">A combination of the <see cref="T:Un4seen.Bass.BASSFlag"/> flags on how to create the decoding stream. The <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> and <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_PRESCAN"/> flags will be added automatically here, if not already set!</param>
            <param name="memory">Set to <see cref="F:System.IntPtr.Zero"/> to render from the file location given by <see cref="P:Un4seen.Bass.Misc.WaveForm.FileName"/> - 
            else rendering will be performed</param>
            <param name="length">The length of the <paramref name="memory"/> block (if specified).</param>
            <returns><see langword="true"/>, if rendering was started successfully, else <see langword="false"/>.</returns>
            <remarks>This overload creates an internal decoding channel from the memory location given by <paramref name="memory"/> allowing to render the peak levels independently.
            <para>If you intend to use this overload to render the wave form in parallel while already playing out the audio, it is recommended to specify the same flags as for your playing stream.
            This is because <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(System.Int32,System.Int64)"/> etc. would return different values if you specified different resolutions for your playing stream and your rendering stream (eg. a stream with BASS_SAMPLE_FLOAT would return twice as much bytes as a stream created with the default 16-bit resolution).</para>
            <para>If your playing stream and this call uses different flags, you might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method, so that the members <see cref="M:Un4seen.Bass.Misc.WaveForm.Position2Frames(System.Int64)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.Frame2Bytes(System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.GetBytePositionFromX(System.Int32,System.Int32,System.Int32,System.Int32)"/>
            will return converted values according to your playing stream.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Boolean,System.Threading.ThreadPriority,Un4seen.Bass.BASSFlag,System.IntPtr,System.Int64)">
            <summary>
            Start the rendering process for the <see cref="P:Un4seen.Bass.Misc.WaveForm.FileName"/> given (peak levels will be scanned).
            </summary>
            <param name="background"><see langword="true"/>, if rendering should be performed in an independent background thread. <see langword="false"/>, if rendering should be executed synchronious.</param>
            <param name="prio">The thread priority to be used with the background thread (note, that when using a Normal priority a ThreadPool thread will be used).</param>
            <param name="flags">A combination of the <see cref="T:Un4seen.Bass.BASSFlag"/> flags on how to create the decoding stream. The <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> and <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_PRESCAN"/> flags will be added automatically here, if not already set!</param>
            <param name="memory">Set to <see cref="F:System.IntPtr.Zero"/> to render from the file location given by <see cref="P:Un4seen.Bass.Misc.WaveForm.FileName"/> - 
            else rendering will be performed by the audio data located at the <paramref name="memory"/> position.</param>
            <param name="length">The length of the <paramref name="memory"/> block (if specified).</param>
            <returns><see langword="true"/>, if rendering was started successfully, else <see langword="false"/>.</returns>
            <remarks>This overload creates an internal decoding channel allowing to render the peak levels independently.
            <para>If you intend to use this overload to render the wave form in parallel while already playing out the file, it is recommended to specify the same flags as for your playing stream.
            This is because <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(System.Int32,System.Int64)"/> etc. would return different values if you specified different resolutions for your playing stream and your rendering stream (eg. a stream with BASS_SAMPLE_FLOAT would return twice as much bytes as a stream created with the default 16-bit resolution).</para>
            <para>If your playing stream and this call uses different flags, you might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method, so that the members <see cref="M:Un4seen.Bass.Misc.WaveForm.Position2Frames(System.Int64)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.Frame2Bytes(System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.GetBytePositionFromX(System.Int32,System.Int32,System.Int32,System.Int32)"/>
            will return converted values according to your playing stream.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStop">
            <summary>
            Stops a currently running rendering process.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)">
            <summary>
            Start a live recording rendering process for the specified non-decoding handle (peak levels will not be scanned at this point).
            </summary>
            <param name="recordingStream">The HRECORD or HSTREAM stream for which to render the WaveForm (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/>).</param>
            <param name="initLength">The initial rendering buffer length in seconds (e.g. 10sec. - minimum is 1sec.).</param>
            <param name="nextLength">The next block in seconds when the recording buffer length needs to be increased (e.g. 5sec. - minimum is 1sec. or specify 0 to define a cycle buffer).</param>
            <returns><see langword="true"/>, if live recording rendering was started successfully, else <see langword="false"/>.</returns>
            <remarks>The <paramref name="recordingStream"/> handle might be any stream channel. Just make sure, that you DO NOT use the <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderRecording"/> method overload (which takes no parameters) with a decoding stream.
            <para>When rendering a WaveForm for live recording the total length of the recording is unknown. 
            Therefore a dynamic buffer is used internally which is initialized with a length of <paramref name="initLength"/> seconds. 
            When the buffer needs to be extended (e.g. the recording exceeds the initial length) it is incremented <paramref name="nextLength"/> seconds.
            When you finally stop the live rendering recording with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStopRecording"/> the total buffer size is at least <paramref name="initLength"/> seconds big or a multiple of <paramref name="nextLength"/> seconds.</para>
            <para>Make sure you started recording via <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/> before calling any live rendering recording method.</para>
            <para>After live rendering recorded has been started you might call <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderRecording"/> to actual render the recorded sample data.</para>
            <para>When you specify 0 (zero) for the <paramref name="nextLength"/> parameter a cycle buffer is created. Meaning the rendered WaveForm buffer size will only be <paramref name="initLength"/> long.
            When the buffer is filled, it starts at the beginning again (position 0)- overwriting the oldest rendered data.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Single,System.Single)">
            <summary>
            Start a live recording rendering process for the specified stream handle (peak levels will not be scanned at this point).
            </summary>
            <param name="recordingStream">The HRECORD or HSTREAM stream for which to render the WaveForm (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/>).</param>
            <param name="initLength">The initial rendering buffer length in seconds (e.g. 10sec. - minimum is 1sec.).</param>
            <param name="nextLength">The next block in seconds when the recording buffer length needs to be increased (e.g. 5sec. - minimum is 1sec. or specify 0 to define a cycle buffer).</param>
            <returns><see langword="true"/>, if live recording rendering was started successfully, else <see langword="false"/>.</returns>
            <remarks>The <paramref name="recordingStream"/> handle might be any stream channel. Just make sure, that you DO NOT use the <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderRecording"/> method overload (which takes no parameters) with a decoding stream.
            <para>When rendering a WaveForm for live recording the total length of the recording is unknown. 
            Therefore a dynamic buffer is used internally which is initialized with a length of <paramref name="initLength"/> seconds. 
            When the buffer needs to be extended (e.g. the recording exceeds the initial length) it is incremented <paramref name="nextLength"/> seconds.
            When you finally stop the live rendering recording with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStopRecording"/> the total buffer size is at least <paramref name="initLength"/> seconds big or a multiple of <paramref name="nextLength"/> seconds.</para>
            <para>Make sure you started recording via <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/> before calling any live rendering recording method.</para>
            <para>After live rendering recorded has been started you might call <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderRecording"/> to actual render the recorded sample data.</para>
            <para>When you specify 0 (zero) for the <paramref name="nextLength"/> parameter a cycle buffer is created. Meaning the rendered WaveForm buffer size will only be <paramref name="initLength"/> long.
            When the buffer is filled, it starts at the beginning again (position 0)- overwriting the oldest rendered data.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderStopRecording">
            <summary>
            Stops live recording rendering.
            </summary>
            <remarks>This just stops the live recording rendering of the WaveForm, but it does not stop the actual recording itself.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderRecording">
            <summary>
            Renders live recorded data and generates the WaveForm data for it.
            </summary>
            <remarks>Call this method subsequently and often enough to get the actual recording data and perform the rendering of that data.
            <para>You must have started live rendering recording with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> before calling this method.</para>
            <para>You might use the method either within a <see cref="T:Un4seen.Bass.RECORDPROC"/> or via your own timer callback at any time when new sample data is available.
            This overload actually calls <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> internally, so it is not recommended to use this with a stream channel (but only with buffered recording channels), since it will steal sample from the stream.</para>
            <para>This overload only exists for backwards compatibility it is advised to use this overload only when needed, since the 'other' overload of this method might be faster and more accurate.</para>
            <para>Calling this method after you have stopped live recording rendering with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStopRecording"/> has no effect anymore.</para>
            </remarks>
            <example>
            <code lang="C#">
            private WaveForm WF = null;
            private RECORDPROC _myRecProc; // make it global, so that the GC can not remove it
            private int _recHandle = 0;
            ...
            _myRecProc = new RECORDPROC(MyRecording);
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero);
            // create a live recording WaveForm
            WF = new WaveForm();
            WF.FrameResolution = 0.01f; // 10ms are nice
            // start a live recording waveform with 10sec. init size and 5sec. next size
            WF.RenderStartRecording(_recHandle, 10, 5);
            // really start recording
            Bass.BASS_ChannelPlay(_recHandle, false);
            ...
            // stops recording
            Bass.BASS_ChannelStop(_recHandle);
            // stop the live recording waveform
            if (WF != null)
            {
              WF.RenderStopRecording();
              DrawWave();
            }
            ...
            // the recording callback in which we will render the WaveForm
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              if (length &gt; 0 &amp;&amp; buffer != IntPtr.Zero)
              {
                // get and draw our live recording waveform
                WF.RenderRecording(buffer, length);
                DrawWave();
              }
              return true; // always continue recording
            }
            ...
            // draws a rendered WaveForm to a PictureBox
            private void DrawWave()
            {
              if (WF != null)
                this.pictureBoxLiveWave.BackgroundImage = WF.CreateBitmap(this.pictureBoxLiveWave.Width, 
                                                                          this.pictureBoxLiveWave.Height, 
                                                                          -1, -1, false);
              else
                this.pictureBoxLiveWave.BackgroundImage = null;
            }
            </code>
            <code lang="VB">
            Private WF As WaveForm = Nothing
            Private _myRecProc As RECORDPROC ' make it global, so that the GC can not remove it
            Private _recHandle As Integer = 0
            ...
            _myRecProc = New RECORDPROC(AddressOf MyRecording)
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero)
            ' create a live recording WaveForm
            WF = New WaveForm()
            WF.FrameResolution = 0.01F ' 10ms are nice
            ' start a live recording waveform with 10sec. init size and 5sec. next size
            WF.RenderStartRecording(_recHandle, 10, 5)
            ' really start recording
            Bass.BASS_ChannelPlay(_recHandle, False)
            ...
            ' stops recording
            Bass.BASS_ChannelStop(_recHandle)
            ' stop the live recording waveform
            If Not (WF Is Nothing) Then
              WF.RenderStopRecording()
              DrawWave()
            End If
            ...
            ' the recording callback in which we will render the WaveForm
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              If length &gt; 0 AndAlso buffer &lt;&gt; IntPtr.Zero Then
                ' get and draw our live recording waveform
                WF.RenderRecording(buffer, length)
                DrawWave()
              End If
              Return True ' always continue recording
            End Function
            
            ' draws a rendered WaveForm to a PictureBox
            Private Sub DrawWave()
              If Not (WF Is Nothing) Then
                Me.pictureBoxLiveWave.BackgroundImage = WF.CreateBitmap(Me.pictureBoxLiveWave.Width, 
                                                                        Me.pictureBoxLiveWave.Height, 
                                                                        -1, -1, False)
              Else
                Me.pictureBoxLiveWave.BackgroundImage = Nothing
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RenderRecording(System.IntPtr,System.Int32)">
            <summary>
            Renders live recorded data and generates the WaveForm data for it.
            </summary>
            <param name="buffer">The pointer to the sample data to render (e.g. as received within a <see cref="T:Un4seen.Bass.RECORDPROC"/>).</param>
            <param name="length">The length of the data with the buffer.</param>
            <remarks>Call this method subsequently and often enough to get the actual recording data and perform the rendering of that data - typically with a <see cref="T:Un4seen.Bass.RECORDPROC"/>.
            <para>You must have started live rendering recording with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> before calling this method.</para>
            <para>You might use the method either within a <see cref="T:Un4seen.Bass.RECORDPROC"/> or any other BASS callback in which you receive sample data (a <see cref="T:Un4seen.Bass.DSPPROC"/> for example).</para>
            <para>Use this overload, if you want to render live sample data even from a decoding stream!</para>
            <para>Calling this method after you have stopped live recording rendering with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStopRecording"/> has no effect anymore.</para>
            </remarks>
            <example>
            <code lang="C#">
            private WaveForm WF = null;
            private RECORDPROC _myRecProc; // make it global, so that the GC can not remove it
            private int _recHandle = 0;
            ...
            _myRecProc = new RECORDPROC(MyRecording);
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero);
            // create a live recording WaveForm
            WF = new WaveForm();
            WF.FrameResolution = 0.01f; // 10ms are nice
            // start a live recording waveform with 10sec. init size and 5sec. next size
            WF.RenderStartRecording(_recHandle, 10, 5);
            // really start recording
            Bass.BASS_ChannelPlay(_recHandle, false);
            ...
            // stops recording
            Bass.BASS_ChannelStop(_recHandle);
            // stop the live recording waveform
            if (WF != null)
            {
              WF.RenderStopRecording();
              DrawWave();
            }
            ...
            // the recording callback in which we will render the WaveForm
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              if (length &gt; 0 &amp;&amp; buffer != IntPtr.Zero)
              {
                // get and draw our live recording waveform
                WF.RenderRecording(buffer, length);
                DrawWave();
              }
              return true; // always continue recording
            }
            
            // draws a rendered WaveForm to a PictureBox
            private void DrawWave()
            {
              if (WF != null)
                this.pictureBoxLiveWave.BackgroundImage = WF.CreateBitmap(this.pictureBoxLiveWave.Width, 
                                                                          this.pictureBoxLiveWave.Height, 
                                                                          -1, -1, false);
              else
                this.pictureBoxLiveWave.BackgroundImage = null;
            }
            </code>
            <code lang="VB">
            Private WF As WaveForm = Nothing
            Private _myRecProc As RECORDPROC ' make it global, so that the GC can not remove it
            Private _recHandle As Integer = 0
            ...
            _myRecProc = New RECORDPROC(AddressOf MyRecording)
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero)
            ' create a live recording WaveForm
            WF = New WaveForm()
            WF.FrameResolution = 0.01F ' 10ms are nice
            ' start a live recording waveform with 10sec. init size and 5sec. next size
            WF.RenderStartRecording(_recHandle, 10, 5)
            ' really start recording
            Bass.BASS_ChannelPlay(_recHandle, False)
            ...
            ' stops recording
            Bass.BASS_ChannelStop(_recHandle)
            ' stop the live recording waveform
            If Not (WF Is Nothing) Then
              WF.RenderStopRecording()
              DrawWave()
            End If
            ...
            ' the recording callback in which we will render the WaveForm
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              If length &gt; 0 AndAlso buffer &lt;&gt; IntPtr.Zero Then
                ' get and draw our live recording waveform
                WF.RenderRecording(buffer, length)
                DrawWave()
              End If
              Return True ' always continue recording
            End Function
            
            ' draws a rendered WaveForm to a PictureBox
            Private Sub DrawWave()
              If Not (WF Is Nothing) Then
                Me.pictureBoxLiveWave.BackgroundImage = WF.CreateBitmap(Me.pictureBoxLiveWave.Width, 
                                                                        Me.pictureBoxLiveWave.Height, 
                                                                        -1, -1, False)
              Else
                Me.pictureBoxLiveWave.BackgroundImage = Nothing
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)">
            <summary>
            Sets a playback channel to synchronize the wave form positions.
            </summary>
            <param name="channel">The playback channel which should be used to synchronize the WaveForm position members.</param>
            <returns><see langword="true"/> on success - else <see langword="false"/> (e.g. channel is an invalid stream) will be returned.</returns>
            <remarks>
            <para>If you intend to use the wave form in parallel while already playing out a stream, it is recommended to specify the same flags as for your playing stream (see e.g. <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>).
            This is because <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLength(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>, <see cref="M:Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(System.Int32,System.Int64)"/> etc. would return different values if you specified different resolutions for your playing stream and your rendering stream (eg. a stream with BASS_SAMPLE_FLOAT would return twice as much bytes as a stream created with the default 16-bit resolution).</para>
            <para>If your playing stream and and the rendering process uses different flags, you might use this method, so that the members <see cref="M:Un4seen.Bass.Misc.WaveForm.Position2Frames(System.Int64)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.Frame2Bytes(System.Int32)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.GetBytePositionFromX(System.Int32,System.Int32,System.Int32,System.Int32)"/> <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/> and <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarker(System.String)"/>
            will return converted values according to your playing stream.</para>
            <para>Note: The <see cref="P:Un4seen.Bass.Misc.WaveForm.TempoFactor"/> will be reset to 0% when calling this method!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Position2Rendering(System.Int64)">
            <summary>
            Converts a given playback position to the rendering position according to the <see cref="P:Un4seen.Bass.Misc.WaveForm.SyncFactor"/>.
            </summary>
            <param name="bytes">The playback position (in bytes) to convert.</param>
            <returns>The converted rendering position.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Position2Rendering(System.Double)">
            <summary>
            Converts a given playback position to the rendering position according to the <see cref="P:Un4seen.Bass.Misc.WaveForm.SyncFactor"/>.
            </summary>
            <param name="seconds">The playback position (in seconds) to convert.</param>
            <returns>The converted rendering position or -1 on error.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Position2Playback(System.Int64)">
            <summary>
            Converts a given rendering position to the playback position according to the <see cref="P:Un4seen.Bass.Misc.WaveForm.SyncFactor"/>.
            </summary>
            <param name="bytes">The rendering position (in bytes) to convert.</param>
            <returns>The converted playback position.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Position2Playback(System.Double)">
            <summary>
            Converts a given rendering position to the playback position according to the <see cref="P:Un4seen.Bass.Misc.WaveForm.SyncFactor"/>.
            </summary>
            <param name="seconds">The rendering position (in seconds) to convert.</param>
            <returns>The converted playback position or -1 on error.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Position2Frames(System.Int64)">
            <summary>
            Converts a given position (in bytes) to the frame number.
            </summary>
            <param name="bytes">The position (in bytes) which should be translated to a frame number.</param>
            <returns>The frame number which represents the position. Or -1, if an error occured or the wave form has not been rendered yet.</returns>
            <remarks>The wave form must have been rendered already before you can use this method.
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            this method would return the frame according to the rendering process, meaning the position would reflect a different value.</para>
            <para>You might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the position will automatically be converted accordingly.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Position2Frames(System.Double)">
            <summary>
            Converts a given position (in seconds) to the frame number.
            </summary>
            <param name="seconds">The position (in seconds) which should be translated to a frame number.</param>
            <returns>The frame number which represents the position. Or -1, if an error occured or the wave form has not been rendered yet.</returns>
            <remarks>The wave form must have been rendered already before you can use this method.
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            this method would return the frame according to the rendering process, meaning the position would reflect a different value.</para>
            <para>You might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the position will automatically be converted accordingly.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Frame2Bytes(System.Int32)">
            <summary>
            Converts a given frame to the position (in bytes).
            </summary>
            <param name="frame">The frame number which should be converted.</param>
            <returns>The position (in bytes) or -1, if an error occured or the wave form has not been rendered yet.</returns>
            <remarks>The wave form must have been rendered already before you can use this method.
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            this method would return the frame according to the rendering process, meaning the position would reflect a different value.</para>
            <para>You might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the position will automatically be converted accordingly.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Frame2Seconds(System.Int32)">
            <summary>
            Converts a given frame to the position (in seconds).
            </summary>
            <param name="frame">The frame number which should be converted.</param>
            <returns>The position (in seconds) or -1, if an error occured or the wave form has not been rendered yet.</returns>
            <remarks>The wave form must have been rendered already before you can use this method.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)">
            <summary>
            Add or replace a marker to the WaveForm.
            </summary>
            <param name="name">The name of the marker to add or replace.
            <para>You might specify an optional marker color by adding the following string to the end of the name: "{Color=colorname}" or "{Color=0xhexcolor}"
            Example: "My Marker1{Color=Gray}", "My Marker2{Color=0x78FF0000}"</para>
            <para>Note: On the CE version of BASS.NET you can only specify a hex color value.</para>
            <para>You might specify an optional marker alignment by adding the following string to the end of the name: "{Align=Left|Right|Center|Auto} (the default is Auto)."
            Example: "My Marker1{Align=Center}", "My Marker2{Color=0x78FF0000}{Align=Right}"</para>
            </param>
            <param name="position">The position (in bytes) of the marker (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>).</param>
            <returns><see langword="true"/>, if the marker was added or replaced successfully, else <see langword="false"/>.</returns>
            <remarks>Markers might be used to highlight certain positions within a WaveForm, e.g. Cue-, Ramp-, Fade- or Mix-Points.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawMarker"/> property to define if and how markers should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorMarker"/> property will be used as the the drawing color.</para>
            <para>In order to remove a marker use the <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveMarker(System.String)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllMarker"/> methods.</para>
            <para>Before adding markers the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> buffer must have been created. So make sure this method is only called after <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.</para>
            <para>Use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarker(System.String)"/> method to retrive a certain marker position. To obtain a list of all markers you might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarkers"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarkerCount"/> methods.</para>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            adding markers might result in a different position, meaning the position would reflect a different value during playback.
            In such case call the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the position will be converted accordingly.</para>
            <para>Note: The byte position will be converted to the original rendering resolution according the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.
            So if your playback stream has a different resolution never add marker positions without first calling <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.</para>
            </remarks>
            <example>
            <code lang="C#">
            private Un4seen.Bass.Misc.WaveForm WF = null;
            ...
            // render a wave form
            WF = new WaveForm(_fileName, new WAVEFORMPROC(MyWaveFormCallback), this);
            WF.FrameResolution = 0.01f; // 10ms are nice
            WF.CallbackFrequency = 500; // every 5 seconds rendered (500*10ms=5sec)
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line | 
                            WaveForm.MARKERDRAWTYPE.Name | 
                            WaveForm.MARKERDRAWTYPE.NamePositionAlternate;
            // it is important to use the same resolution flags as for the playing stream!
            // our already playing stream is 32-bit float - so this one will also need to be...
            WF.RenderStart( false, BASSFlag.BASS_SAMPLE_FLOAT );
            // from here on we might add markers...just examples here...
            WF.AddMarker( "CueIn", Bass.BASS_ChannelSeconds2Bytes(_stream, 2.0) );
            WF.AddMarker( "RampUp", Bass.BASS_ChannelSeconds2Bytes(_stream, 17.5));
            WF.AddMarker( "Outro", Bass.BASS_ChannelSeconds2Bytes(_stream, 100.7));
            WF.AddMarker( "Mix", Bass.BASS_ChannelSeconds2Bytes(_stream, 130.3));
            WF.AddMarker( "End", Bass.BASS_ChannelSeconds2Bytes(_stream, 136.9));
            ...
            // this will replace the 'RampUp' marker
            WF.AddMarker( "RampUp", Bass.BASS_ChannelSeconds2Bytes(_stream, 19.2));
            </code>
            <code lang="VB">
            Private WF As Un4seen.Bass.Misc.WaveForm = Nothing
            ...
            ' render a wave form
            WF = New WaveForm(_fileName, New WAVEFORMPROC(AddressOf MyWaveFormCallback), Me)
            WF.FrameResolution = 0.01F ' 10ms are nice
            WF.CallbackFrequency = 500 ' every 5 seconds rendered (500*10ms=5sec)
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line Or 
                            WaveForm.MARKERDRAWTYPE.Name Or 
                            WaveForm.MARKERDRAWTYPE.NamePositionAlternate
            ' it is important to use the same resolution flags as for the playing stream!
            ' our already playing stream is 32-bit float - so this one will also need to be...
            WF.RenderStart(False, BASSFlag.BASS_SAMPLE_FLOAT)
            ' from here on we might add markers...just examples here...
            WF.AddMarker("CueIn", Bass.BASS_ChannelSeconds2Bytes(_stream, 2.0))
            WF.AddMarker("RampUp", Bass.BASS_ChannelSeconds2Bytes(_stream, 17.5))
            WF.AddMarker("Outro", Bass.BASS_ChannelSeconds2Bytes(_stream, 100.7))
            WF.AddMarker("Mix", Bass.BASS_ChannelSeconds2Bytes(_stream, 130.3))
            WF.AddMarker("End", Bass.BASS_ChannelSeconds2Bytes(_stream, 136.9))
            ...
            ' this will replace the 'RampUp' marker
            WF.AddMarker("RampUp", Bass.BASS_ChannelSeconds2Bytes(_stream, 19.2))
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Double)">
            <summary>
            Add or replace a marker to the WaveForm.
            </summary>
            <param name="name">The name of the marker to add or replace.
            <para>You might specify an optional marker color by adding the following string to the end of the name: "{Color=colorname}" or "{Color=0xhexcolor}"
            Example: "My Marker1{Color=Gray}", "My Marker2{Color=0x78FF0000}"</para>
            <para>Note: On the CE version of BASS.NET you can only specify a hex color value.</para>
            <para>You might specify an optional marker alignment by adding the following string to the end of the name: "{Align=Left|Right|Center|Auto} (the default is Auto)."
            Example: "My Marker1{Align=Center}", "My Marker2{Color=0x78FF0000}{Align=Right}"</para>
            </param>
            <param name="position">The position (in seconds) of the marker (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>).</param>
            <returns><see langword="true"/>, if the marker was added or replaced successfully, else <see langword="false"/>.</returns>
            <remarks>Markers might be used to highlight certain positions within a WaveForm, e.g. Cue-, Ramp-, Fade- or Mix-Points.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawMarker"/> property to define if and how markers should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorMarker"/> property will be used as the the drawing color.</para>
            <para>In order to remove a marker use the <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveMarker(System.String)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllMarker"/> methods.</para>
            <para>Before adding markers the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> buffer must have been created. So make sure this method is only called after <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.</para>
            <para>Use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarker(System.String)"/> method to retrive a certain marker position. To obtain a list of all markers you might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarkers"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarkerCount"/> methods.</para>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            adding markers might result in a different position, meaning the position would reflect a different value during playback.
            In such case call the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the position will be converted accordingly.</para>
            <para>Note: The seconds position will be converted to the original rendering resolution according the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.
            So if your playback stream has a different resolution never add marker positions without first calling <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.</para>
            </remarks>
            <example>
            <code lang="C#">
            private Un4seen.Bass.Misc.WaveForm WF = null;
            ...
            // render a wave form
            WF = new WaveForm(_fileName, new WAVEFORMPROC(MyWaveFormCallback), this);
            WF.FrameResolution = 0.01f; // 10ms are nice
            WF.CallbackFrequency = 500; // every 5 seconds rendered (500*10ms=5sec)
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line | 
                            WaveForm.MARKERDRAWTYPE.Name | 
                            WaveForm.MARKERDRAWTYPE.NamePositionAlternate;
            // it is important to use the same resolution flags as for the playing stream!
            // our already playing stream is 32-bit float - so this one will also need to be...
            WF.RenderStart( false, BASSFlag.BASS_SAMPLE_FLOAT );
            // from here on we might add markers...just examples here...
            WF.AddMarker( "CueIn", 2.0 );
            WF.AddMarker( "RampUp", 17.5);
            WF.AddMarker( "Outro", 100.7);
            WF.AddMarker( "Mix", 130.3);
            WF.AddMarker( "End", 136.9);
            ...
            // this will replace the 'RampUp' marker
            WF.AddMarker( "RampUp", 19.2);
            </code>
            <code lang="VB">
            Private WF As Un4seen.Bass.Misc.WaveForm = Nothing
            ...
            ' render a wave form
            WF = New WaveForm(_fileName, New WAVEFORMPROC(AddressOf MyWaveFormCallback), Me)
            WF.FrameResolution = 0.01F ' 10ms are nice
            WF.CallbackFrequency = 500 ' every 5 seconds rendered (500*10ms=5sec)
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line Or 
                            WaveForm.MARKERDRAWTYPE.Name Or 
                            WaveForm.MARKERDRAWTYPE.NamePositionAlternate
            ' it is important to use the same resolution flags as for the playing stream!
            ' our already playing stream is 32-bit float - so this one will also need to be...
            WF.RenderStart(False, BASSFlag.BASS_SAMPLE_FLOAT)
            ' from here on we might add markers...just examples here...
            WF.AddMarker("CueIn", 2.0)
            WF.AddMarker("RampUp", 17.5)
            WF.AddMarker("Outro", 100.7)
            WF.AddMarker("Mix", 130.3)
            WF.AddMarker("End", 136.9)
            ...
            ' this will replace the 'RampUp' marker
            WF.AddMarker("RampUp", 19.2)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetMarker(System.String)">
            <summary>
            Returns a given marker position.
            </summary>
            <param name="name">The name of the marker to get.</param>
            <returns>The marker position in bytes or -1 if the marker name does not exist.</returns>
            <remarks>This is the complementary method of <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/>.
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            this method would return the position according to the rendering process, meaning the position would reflect a different value.
            In this case make sure to call <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> before getting any markers. This will ensure that the position will be converted accordingly to the playback.</para>
            </remarks>
            <example>
            <code lang="C#">
            private Un4seen.Bass.Misc.WaveForm WF = null;
            ...
            // render a wave form
            WF = new WaveForm(_fileName, new WAVEFORMPROC(MyWaveFormCallback), this);
            WF.FrameResolution = 0.01f; // 10ms are nice
            WF.CallbackFrequency = 500; // every 5 seconds rendered (500*10ms=5sec)
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line | 
                            WaveForm.MARKERDRAWTYPE.Name | 
                            WaveForm.MARKERDRAWTYPE.NamePositionAlternate;
            WF.RenderStart( false, BASSFlag.BASS_SAMPLE_FLOAT );
            // from here on we might add markers...just examples here...
            WF.AddMarker( "CueIn", Bass.BASS_ChannelSeconds2Bytes(_stream, 2.0) );
            ...
            // this will get the 'CueIn' marker
            long position = WF.GetMarker( "CueIn" );
            </code>
            <code lang="VB">
            Private WF As Un4seen.Bass.Misc.WaveForm = Nothing
            ...
             ' render a wave form
             WF = New WaveForm(_fileName, New WAVEFORMPROC(AddressOf MyWaveFormCallback), Me)
             WF.FrameResolution = 0.01F ' 10ms are nice
             WF.CallbackFrequency = 500 ' every 5 seconds rendered (500*10ms=5sec)
             WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line Or 
                             WaveForm.MARKERDRAWTYPE.Name Or 
                             WaveForm.MARKERDRAWTYPE.NamePositionAlternate
             WF.RenderStart(False, BASSFlag.BASS_SAMPLE_FLOAT)
             ' from here on we might add markers...just examples here...
             WF.AddMarker("CueIn", Bass.BASS_ChannelSeconds2Bytes(_stream, 2.0))
             ...
             ' this will get the 'CueIn' marker
             Dim position As Long = WF.GetMarker("CueIn")
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetMarkerSec(System.String)">
            <summary>
            Returns a given marker position.
            </summary>
            <param name="name">The name of the marker to get.</param>
            <returns>The marker position in seconds or -1 if the marker name does not exist.</returns>
            <remarks>This is the complementary method of <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/>.
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            this method would return the position according to the rendering process, meaning the position would reflect a different value.
            In this case make sure to call <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> before getting any markers. This will ensure that the position will be converted accordingly to the playback.</para>
            </remarks>
            <example>
            <code lang="C#">
            private Un4seen.Bass.Misc.WaveForm WF = null;
            ...
            // render a wave form
            WF = new WaveForm(_fileName, new WAVEFORMPROC(MyWaveFormCallback), this);
            WF.FrameResolution = 0.01f; // 10ms are nice
            WF.CallbackFrequency = 500; // every 5 seconds rendered (500*10ms=5sec)
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line | 
                            WaveForm.MARKERDRAWTYPE.Name | 
                            WaveForm.MARKERDRAWTYPE.NamePositionAlternate;
            WF.RenderStart( false, BASSFlag.BASS_SAMPLE_FLOAT );
            // from here on we might add markers...just examples here...
            WF.AddMarker( "CueIn", 2.0 );
            ...
            // this will get the 'CueIn' marker
            double position = WF.GetMarkerSec( "CueIn" );
            </code>
            <code lang="VB">
            Private WF As Un4seen.Bass.Misc.WaveForm = Nothing
            ...
             ' render a wave form
             WF = New WaveForm(_fileName, New WAVEFORMPROC(AddressOf MyWaveFormCallback), Me)
             WF.FrameResolution = 0.01F ' 10ms are nice
             WF.CallbackFrequency = 500 ' every 5 seconds rendered (500*10ms=5sec)
             WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line Or 
                             WaveForm.MARKERDRAWTYPE.Name Or 
                             WaveForm.MARKERDRAWTYPE.NamePositionAlternate
             WF.RenderStart(False, BASSFlag.BASS_SAMPLE_FLOAT)
             ' from here on we might add markers...just examples here...
             WF.AddMarker("CueIn", 2.0)
             ...
             ' this will get the 'CueIn' marker
             Dim position As Double = WF.GetMarkerSec("CueIn")
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetMarkerCount">
            <summary>
            Returns the number of markers within the wave form.
            </summary>
            <returns>The number of markers present.</returns>
            <remarks>You might add new markers with <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/> and get existing markers with <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarker(System.String)"/>.
            <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarkers"/> will provide you with a list of marker names. <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveMarker(System.String)"/> will remove a certain marker from the list and <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllMarker"/> will remove all markers.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetMarkers">
            <summary>
            Returns an array of strings containing all marker names.
            </summary>
            <returns>A string array with all marker names or an empty array if no markers are present.</returns>
            <remarks>You might add new markers with <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/> and get existing markers with <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarker(System.String)"/>.
            <see cref="M:Un4seen.Bass.Misc.WaveForm.GetMarkerCount"/> will provide you with the total number of markers present. <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveMarker(System.String)"/> will remove a certain marker from the list and <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllMarker"/> will remove all markers.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RemoveMarker(System.String)">
            <summary>
            Removes an existing marker from the WaveForm.
            </summary>
            <param name="name">The name of the marker to remove.</param>
            <returns><see langword="true"/>, if the marker was removed successfully, else <see langword="false"/>.</returns>
            <remarks>Markers might be used to highlight certain positions within a WaveForm, e.g. Cue-, Ramp-, Fade- or Mix-Points.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawMarker"/> property to define if and how markers should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorMarker"/> property will be used as the the drawing color.</para>
            <para>In order to remove all markers use the <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllMarker"/> method. If you need to add new markers or replace an existing marker use the <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/> method.</para>
            <para>Before removing markers the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> buffer must have been created. So make sure this method is only called after <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.</para>
            <para>To obtain a list of all markers you might use the <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.marker"/> dictionary member (Key=name, Value=position) of the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> property.</para>
            </remarks>
            <example>
            <code lang="C#">
            private Un4seen.Bass.Misc.WaveForm WF = null;
            ...
            // render a wave form
            WF = new WaveForm(this._fileName, new WAVEFORMPROC(MyWaveFormCallback), this);
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line;
            WF.RenderStart( true, BASSFlag.BASS_SAMPLE_FLOAT );
            // from here on we might add markers...just examples here...
            WF.AddMarker( "CueIn", Bass.BASS_ChannelSeconds2Bytes(_stream, 2.0) );
            WF.AddMarker( "RampUp", Bass.BASS_ChannelSeconds2Bytes(_stream, 17.5));
            WF.AddMarker( "Outro", Bass.BASS_ChannelSeconds2Bytes(_stream, 100.7));
            WF.AddMarker( "Mix", Bass.BASS_ChannelSeconds2Bytes(_stream, 130.3));
            WF.AddMarker( "End", Bass.BASS_ChannelSeconds2Bytes(_stream, 136.9));
            ...
            // this will remove the 'CueIn' marker
            WF.RemoveMarker( "CueIn" );
            </code>
            <code lang="VB">
            Private WF As Un4seen.Bass.Misc.WaveForm = Nothing
            ...
            ' render a wave form
            WF = New WaveForm(Me._fileName, New WAVEFORMPROC(AddressOf MyWaveFormCallback), Me)
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line
            WF.RenderStart(True, BASSFlag.BASS_SAMPLE_FLOAT)
            ' from here on we might add markers...just examples here...
            WF.AddMarker("CueIn", Bass.BASS_ChannelSeconds2Bytes(_stream, 2.0))
            WF.AddMarker("RampUp", Bass.BASS_ChannelSeconds2Bytes(_stream, 17.5))
            WF.AddMarker("Outro", Bass.BASS_ChannelSeconds2Bytes(_stream, 100.7))
            WF.AddMarker("Mix", Bass.BASS_ChannelSeconds2Bytes(_stream, 130.3))
            WF.AddMarker("End", Bass.BASS_ChannelSeconds2Bytes(_stream, 136.9))
            ...
            ' this will remove the 'CueIn' marker
            WF.RemoveMarker("CueIn")
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.ClearAllMarker">
            <summary>
            Removes all markers from the WaveForm.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>Markers might be used to highlight certain positions within a WaveForm, e.g. Cue-, Ramp-, Fade- or Mix-Points.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawMarker"/> property to define if and how markers should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorMarker"/> property will be used as the the drawing color.</para>
            <para>In order to remove all markers use the <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllMarker"/> method. If you need to add new markers or replace an existing marker use the <see cref="M:Un4seen.Bass.Misc.WaveForm.AddMarker(System.String,System.Int64)"/> method.</para>
            <para>Before removing markers the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> buffer must have been created. So make sure this method is only called after <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.</para>
            <para>To obtain a list of all markers you might use the <see cref="F:Un4seen.Bass.Misc.WaveForm.WaveBuffer.marker"/> dictionary member (Key=name, Value=position) of the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> property.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.SearchVolumePoint(System.Int64)">
            <summary>
            Searches for a certain volume point.
            </summary>
            <param name="position">The position (in bytes) of the volume point to search.</param>
            <returns>If the position is present the zero-based index will be returned; otherwise, a negative number, which is the bitwise complement of the index of the next element that is larger than value or, if there is no larger element, the bitwise complement of Count.</returns>
            <example>
            // return the exact or next volume point
            int startIdx = wf.SearchVolumePoint(pos);
            if (startIdx &lt; 0)
                startIdx = ~startIdx;
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.SearchVolumePoint(System.Double)">
            <summary>
            Searches for a certain volume point.
            </summary>
            <param name="position">The position (in seconds) of the volume point to search.</param>
            <returns>If the position is present the zero-based index will be returned; otherwise, a negative number, which is the bitwise complement of the index of the next element that is larger than value or, if there is no larger element, the bitwise complement of Count.</returns>
            <example>
            // return the exact or next volume point
            int startIdx = wf.SearchVolumePoint(pos);
            if (startIdx &lt; 0)
                startIdx = ~startIdx;
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.SearchVolumePoint(System.Int64,Un4seen.Bass.Misc.WaveForm.VolumePoint@,Un4seen.Bass.Misc.WaveForm.VolumePoint@)">
            <summary>
            Searches for a certain volume point.
            </summary>
            <param name="position">The position (in bytes) of the volume point to search.</param>
            <param name="prev">The previous or exact VolumePoint at the requested position.</param>
            <param name="next">The next VolumePoint at the requested position or <see langword="null"/>, if no next point exists.</param>
            <returns>If the position is present the zero-based index will be returned; otherwise, a negative number, which is the bitwise complement of the index of the next element that is larger than value or, if there is no larger element, the bitwise complement of Count.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.SearchVolumePoint(System.Double,Un4seen.Bass.Misc.WaveForm.VolumePoint@,Un4seen.Bass.Misc.WaveForm.VolumePoint@)">
            <summary>
            Searches for a certain volume point.
            </summary>
            <param name="position">The position (in seconds) of the volume point to search.</param>
            <param name="prev">The previous or exact VolumePoint at the requested position.</param>
            <param name="next">The next VolumePoint at the requested position or <see langword="null"/>, if no next point exists.</param>
            <returns>If the position is present the zero-based index will be returned; otherwise, a negative number, which is the bitwise complement of the index of the next element that is larger than value or, if there is no larger element, the bitwise complement of Count.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.AddVolumePoint(System.Int64,System.Single)">
            <summary>
            Add or replace a volume point to the WaveForm.
            </summary>
            <param name="position">The position (in bytes) of the volume point (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/>).</param>
            <param name="level">The volume level of the point to add or replace (0=silent, 1.0=maximum=0dB).</param>
            <returns><see langword="true"/>, if the volume point was added or replaced successfully, else <see langword="false"/>.</returns>
            <remarks>Volume points might be used to draw a volume curve within a WaveForm.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawVolume"/> property to define if and how the volume curve should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorVolume"/> property will be used as the the drawing color.</para>
            <para>In order to remove a volume point use the <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveVolumePoint(System.Int64)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllVolumePoints"/> methods.</para>
            <para>Before adding a volume point the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> buffer must have been created. So make sure this method is only called after <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.</para>
            <para>Use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumePoint(System.Int64)"/> method to retrive a certain volume point. Via <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumeLevel(System.Int64,System.Boolean,System.Int64@,System.Single@)"/> you might retrieve the volume level of the curve at any point.</para>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            adding volume points might result in a different position, meaning the position would reflect a different value during playback.
            In such case call the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the position will be converted accordingly.</para>
            <para>Note: The byte position will be converted to the original rendering resolution according the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.
            So if your playback stream has a different resolution never add volume points without first calling <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.AddVolumePoint(System.Double,System.Single)">
            <summary>
            Add or replace a volume point to the WaveForm.
            </summary>
            <param name="position">The position (in seconds) of the volume point (e.g. as returned by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> converted to seconds).</param>
            <param name="level">The volume level of the point to add or replace (0=silent, 1.0=maximum=0dB).</param>
            <returns><see langword="true"/>, if the volume point was added or replaced successfully, else <see langword="false"/>.</returns>
            <remarks>Volume points might be used to draw a volume curve within a WaveForm.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawVolume"/> property to define if and how the volume curve should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorVolume"/> property will be used as the the drawing color.</para>
            <para>In order to remove a volume point use the <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveVolumePoint(System.Int64)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllVolumePoints"/> methods.</para>
            <para>Before adding a volume point the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> buffer must have been created. So make sure this method is only called after <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.</para>
            <para>Use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumePoint(System.Int64)"/> method to retrive a certain volume point. Via <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumeLevel(System.Int64,System.Boolean,System.Int64@,System.Single@)"/> you might retrieve the volume level of the curve at any point.</para>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            adding volume points might result in a different position, meaning the position would reflect a different value during playback.
            In such case call the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the position will be converted accordingly.</para>
            <para>Note: The byte position will be converted to the original rendering resolution according the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.
            So if your playback stream has a different resolution never add volume points without first calling <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetVolumePoint(System.Int64)">
            <summary>
            Returns the level of a given volume point.
            </summary>
            <param name="position">The position (in bytes) of the volume point to get.</param>
            <returns>The level of the volume point (0=silent, 1.0=maximum=0dB) or -1 if the volume points does not exist.</returns>
            <remarks>This is the complementary method of <see cref="M:Un4seen.Bass.Misc.WaveForm.AddVolumePoint(System.Int64,System.Single)"/>.
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            this method would return the position according to the rendering process, meaning the position would reflect a different value.
            In this case make sure to call <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> before getting any markers. This will ensure that the position will be converted accordingly.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetVolumePoint(System.Double)">
            <summary>
            Returns the level of a given volume point.
            </summary>
            <param name="position">The position (in seconds) of the volume point to get.</param>
            <returns>The level of the volume point (0=silent, 1.0=maximum=0dB) or -1 if the volume points does not exist.</returns>
            <remarks>This is the complementary method of <see cref="M:Un4seen.Bass.Misc.WaveForm.AddVolumePoint(System.Int64,System.Single)"/>.
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            this method would return the position according to the rendering process, meaning the position would reflect a different value.
            In this case make sure to call <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> before getting any markers. This will ensure that the position will be converted accordingly.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetVolumePoint(System.Int32)">
            <summary>
            Returns a certain volume point at the given index.
            </summary>
            <param name="index">The index of the volume point to get.</param>
            <returns>The volume point at the given index - or <see langword="null"/> if the index is not present.</returns>
            <remarks>Use <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumePointCount"/> to get the total number of volume points present.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetVolumeLevel(System.Int64,System.Boolean,System.Int64@,System.Single@)">
            <summary>
            Returns the volume level at the given position of the volume curve.
            </summary>
            <param name="position">The position (in bytes) of the volume point to get.</param>
            <param name="reverse"><see langword="true"/>, if to search in reverse direction - else <see langword="false"/>.</param>
            <param name="duration">Returns the duration (in bytes) to the next volume point in bytes.</param>
            <param name="nextLevel">Returns the volume level at the next volume point.</param>
            <returns>The volume level (0=silent, 1.0=maximum=0dB) at the given position.</returns>
            <remarks>Note: This method always returns a volume level, even if the position does not reflect a volume point. In such case the volume level of the volume curve at this position will be returned.
            If no volume points have been defined at all this method will return 1.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetVolumeLevel(System.Double,System.Boolean,System.Double@,System.Single@)">
            <summary>
            Returns the volume level at the given position of the volume curve.
            </summary>
            <param name="position">The position (in seconds) of the volume point to get.</param>
            <param name="reverse"><see langword="true"/>, if to search in reverse direction - else <see langword="false"/>.</param>
            <param name="duration">Returns the duration (in seconds) to the next volume point in bytes.</param>
            <param name="nextLevel">Returns the volume level at the next volume point.</param>
            <returns>The volume level (0=silent, 1.0=maximum=0dB) at the given position.</returns>
            <remarks>Note: This method always returns a volume level, even if the position does not reflect a volume point. In such case the volume level of the volume curve at this position will be returned.
            If no volume points have been defined at all this method will return 1.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetVolumePointCount">
            <summary>
            Returns the number of volume points within the wave form.
            </summary>
            <returns>The number of volume points present.</returns>
            <remarks>You might add new volume points with <see cref="M:Un4seen.Bass.Misc.WaveForm.AddVolumePoint(System.Int64,System.Single)"/> and get existing volume points with <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumePoint(System.Int64)"/> or return the volume level at any point via <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumeLevel(System.Int64,System.Boolean,System.Int64@,System.Single@)"/>.
            <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumePoint(System.Int64)"/> will provide you with a list of volume points. <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveVolumePoint(System.Int64)"/> will remove a certain volume point from the list and <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllVolumePoints"/> will remove all volume points.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RemoveVolumePoint(System.Int64)">
            <summary>
            Removes an existing volume point from the WaveForm.
            </summary>
            <param name="position">The position (in bytes) of the volume point to remove.</param>
            <returns><see langword="true"/>, if the volume point was removed successfully, else <see langword="false"/>.</returns>
            <remarks>Volume points might be used to draw a volume curve within a WaveForm.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawVolume"/> property to define if and how the volume curve should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorVolume"/> property will be used as the the drawing color.</para>
            <para>In order to remove a volume point use the <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveVolumePoint(System.Int64)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllVolumePoints"/> methods.</para>
            <para>Before adding a volume point the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> buffer must have been created. So make sure this method is only called after <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.</para>
            <para>Use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumePoint(System.Int64)"/> method to retrive a certain volume point. To get the volume level at any given position of the volume curve use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumeLevel(System.Int64,System.Boolean,System.Int64@,System.Single@)"/> method.</para>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            adding volume points might result in a different position, meaning the position would reflect a different value during playback.
            In such case call the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the position will be converted accordingly.</para>
            <para>Note: The byte position will be converted to the original rendering resolution according the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.
            So if your playback stream has a different resolution never add volume points without first calling <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RemoveVolumePoint(System.Double)">
            <summary>
            Removes an existing volume point from the WaveForm.
            </summary>
            <param name="position">The position (in seconds) of the volume point to remove.</param>
            <returns><see langword="true"/>, if the volume point was removed successfully, else <see langword="false"/>.</returns>
            <remarks>Volume points might be used to draw a volume curve within a WaveForm.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawVolume"/> property to define if and how the volume curve should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorVolume"/> property will be used as the the drawing color.</para>
            <para>In order to remove a volume point use the <see cref="M:Un4seen.Bass.Misc.WaveForm.RemoveVolumePoint(System.Int64)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllVolumePoints"/> methods.</para>
            <para>Before adding a volume point the <see cref="P:Un4seen.Bass.Misc.WaveForm.Wave"/> buffer must have been created. So make sure this method is only called after <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)"/>, <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStartRecording(System.Int32,System.Int32,System.Int32)"/> or <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.</para>
            <para>Use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumePoint(System.Int64)"/> method to retrive a certain volume point. To get the volume level at any given position of the volume curve use the <see cref="M:Un4seen.Bass.Misc.WaveForm.GetVolumeLevel(System.Int64,System.Boolean,System.Int64@,System.Single@)"/> method.</para>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            adding volume points might result in a different position, meaning the position would reflect a different value during playback.
            In such case call the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the position will be converted accordingly.</para>
            <para>Note: The byte position will be converted to the original rendering resolution according the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.
            So if your playback stream has a different resolution never add volume points without first calling <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RemoveVolumePointsBetween(System.Int64,System.Int64)">
            <summary>
            Removes all volume points between the two given points exclusive.
            </summary>
            <param name="from">The volume point position (in bytes) from which to remove (exclusive, this point is not removed).</param>
            <param name="to">The volume point position (in bytes) to which to remove (exclusive, this point is not removed).</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.RemoveVolumePointsBetween(System.Double,System.Double)">
            <summary>
            Removes all volume points between the two given points exclusive.
            </summary>
            <param name="from">The volume point position (in seconds) from which to remove (exclusive, this point is not removed).</param>
            <param name="to">The volume point position (in seconds) to which to remove (exclusive, this point is not removed).</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.ClearAllVolumePoints">
            <summary>
            Removes all volume points from the WaveForm.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>Volume points might be used to draw a volume curve within a WaveForm.
            <para>Use the <see cref="P:Un4seen.Bass.Misc.WaveForm.DrawVolume"/> property to define if and how volume points should be drawn within the WaveForm. The <see cref="P:Un4seen.Bass.Misc.WaveForm.ColorVolume"/> property will be used as the the drawing color.</para>
            <para>In order to remove all volume points use the <see cref="M:Un4seen.Bass.Misc.WaveForm.ClearAllVolumePoints"/> method. If you need to add new volume points or replace an existing volume point use the <see cref="M:Un4seen.Bass.Misc.WaveForm.AddVolumePoint(System.Int64,System.Single)"/> method.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.CreateBitmap(System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Creates a bitmap from a rendered wave form.
            </summary>
            <param name="width">The width (in pixel) of the image to create.</param>
            <param name="height">The height (in pixel) of the image to create.</param>
            <param name="frameStart">The rendered frame from where to start creating the image (specify 0 or -1 to start from the beginning).</param>
            <param name="frameEnd">The rendered frame til where to creating the image (specify -1 to create til the end). This value must be greater than frameStart.</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns>The created bitmap image representing the wave form.</returns>
            <example>
            <code lang="C#">
            private Un4seen.Bass.Misc.WaveForm WF = null;
            
            private void GetWaveForm()
            {
              // render a wave form
              WF = new Un4seen.Bass.Misc.WaveForm("test.mp3", 
                                    new Un4seen.Bass.Misc.WAVEFORMPROC(MyWaveFormCallback), this);
              WF.CallbackFrequency = 500; // every 10 seconds rendered
              WF.ColorBackground = Color.Black;
              WF.ColorBase = Color.Lime;
              WF.ColorPeak = Color.Red;
              // it is important to use the same resolution flags as for the playing stream
              // e.g. if an already playing stream is 32-bit float, so this should also be
              // or use 'SyncPlayback' as shown below
              WF.RenderStart(true, BASSFlag.BASS_DEFAULT);
            }
            
            private void MyWaveFormCallback(int framesDone, int framesTotal, TimeSpan elapsedTime, bool finished)
            {
              // will be called during rendering...
              DrawWave();
              if (finished)
              {
                Console.WriteLine("Finished rendering in {0}sec.", elapsedTime);
                Console.WriteLine("FramesRendered={0} of {1}", WF.FramesRendered, WF.FramesToRender);
                // if your playback stream uses a different resolution than the WF
                // use this to sync them
                WF.SyncPlayback(_stream);
              }
            }
            
            private void DrawWave()
            {
              if (WF != null)
                this.pictureBox1.BackgroundImage = WF.CreateBitmap(this.pictureBox1.Width, 
                                                                   this.pictureBox1.Height, 
                                                                   -1, -1, false);
              else
                this.pictureBox1.BackgroundImage = null;
            }
            </code>
            <code lang="VB">
            Private WF As Un4seen.Bass.Misc.WaveForm = Nothing
            ...
            Private Sub GetWaveForm()
              ' render a wave form
              WF = New Un4seen.Bass.Misc.WaveForm("test.mp3", New Un4seen.Bass.Misc.WAVEFORMPROC(AddressOf MyWaveFormCallback), Me)
              WF.CallbackFrequency = 500 ' every 10 seconds rendered
              WF.ColorBackground = Color.Black
              WF.ColorBase = Color.Lime
              WF.ColorPeak = Color.Red
              ' it is important to use the same resolution flags as for the playing stream
              ' e.g. if an already playing stream is 32-bit float, so this should also be
              ' or use 'SyncPlayback' as shown below
              WF.RenderStart(True, BASSFlag.BASS_SAMPLE_FLOAT)
            End Sub
            
            Private Sub MyWaveFormCallback(framesDone As Integer, framesTotal As Integer, 
                                           elapsedTime As TimeSpan, finished As Boolean)
              ' will be called during rendering...
              DrawWave()
              If finished Then
                Console.WriteLine("Finished rendering in {0}sec.", elapsedTime)
                Console.WriteLine("FramesRendered={0} of {1}", WF.FramesRendered, WF.FramesToRender)
                ' if your playback stream uses a different resolution than the WF
                ' use this to sync them
                WF.SyncPlayback(_stream)
              End If
            End Sub
            
            Private Sub DrawWave()
              If Not (WF Is Nothing) Then
                Me.pictureBox1.BackgroundImage = WF.CreateBitmap(Me.pictureBox1.Width, 
                                                                 Me.pictureBox1.Height, 
                                                                 -1, -1, False)
              Else
                Me.pictureBox1.BackgroundImage = Nothing
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.CreateBitmap(System.Drawing.Graphics,System.Drawing.Rectangle,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Draws the rendered wave form directly on the provided GDI+ graphics.
            </summary>
            <param name="g">The GDI+ graphics object where to draw the wave form (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="clipRectangle">The rectangle describing the size of the wave form to draw (ie. can be taken directly from a <see cref="T:System.Windows.Forms.PaintEventArgs"/>).</param>
            <param name="frameStart">The rendered frame from where to start creating the image (specify 0 or -1 to start from the beginning).</param>
            <param name="frameEnd">The rendered frame til where to creating the image (specify -1 to create til the end).</param>
            <param name="highQuality"><see langword="true"/>, if anti alias should be used when drawing. <see langword="false"/> will draw in high speed mode.</param>
            <returns><see langword="true"/>, if successfully painted, else <see langword="false"/>.</returns>
            <remarks>This overload is most useful when you are developing your own custom control. You might use it directly within your paint overload implementation.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetBytePositionFromX(System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            Translates a X coordinate of a drawn WaveForm graphic to the related byte position within the rendered stream.
            </summary>
            <param name="x">The X coordinate from which to get the byte position (between 0 and graphicsWidth-1).</param>
            <param name="graphicsWidth">The total width of the drawn WaveForm graphic (e.g. use pictureBox.Width).</param>
            <param name="frameStart">The rendered frame which was used to start creating the image (specify 0 or -1 if the start was from the beginning).</param>
            <param name="frameEnd">The rendered frame which was used to end creating the image (specify -1 for the end of the WaveForm).</param>
            <returns>The converted byte position of the stream which relates to the given X coordinate, else -1.</returns>
            <remarks>This method might be used to translate a graphics coordinate to a byte position within a stream. The return value might for example be used by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> to set a new playback position.
            <para>Note: The byte position relates to the resolution you used with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>!
            So if you for example used the BASS_SAMPLE_FLOAT with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/> the byte position relates to 32-bit sample data.
            However, if your playing stream uses only a 16-bit resolution (e.g. you used BASS_DEFAULT with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreateFile(System.String,System.Int64,System.Int64,Un4seen.Bass.BASSFlag)"/>), the returned byte position will not match!
            So make sure when you are calling <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/> with this return value, that your stream resolution is the same as the resolution used with <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/>.
            Otherwise you must convert the returned byte position (e.g. from 32-bit to 16-bit: pos = returnvalue/2).
            Or for ease of use you might use the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method to ensure, that the return value of this method will already be converted accordingly for you!
            </para>
            </remarks>
            <example>
            Using a pictureBox and the MouseDown event handler:
            <code lang="C#">
            // assuming the WaveForm is fully displayed in the pictureBox...
            private void DrawWave()
            {
              if (WF != null)
                this.pictureBox1.BackgroundImage = WF.CreateBitmap(this.pictureBox1.Width, 
                                                                   this.pictureBox1.Height, 
                                                                   -1, -1, false);
              else
                this.pictureBox1.BackgroundImage = null;
            }
            
            private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
            {
              if (WF == null)
                return;
              long pos = WF.GetBytePositionFromX(e.X, this.pictureBox1.Width, -1, -1);
              Console.WriteLine("Position = {0}, Seconds = {1}", pos, Bass.BASS_ChannelBytes2Seconds(_stream, pos));
              Bass.BASS_ChannelSetPosition(_stream, pos);
            }
            </code>
            <code lang="VB">
            ' assuming the WaveForm is fully displayed in the pictureBox...
            Private Sub DrawWave()
              If Not (WF Is Nothing) Then
                Me.pictureBox1.BackgroundImage = WF.CreateBitmap(Me.pictureBox1.Width, 
                                                                 Me.pictureBox1.Height, 
                                                                 -1, -1, False)
              Else
                Me.pictureBox1.BackgroundImage = Nothing
              End If
            End Sub
            
            Private Sub pictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs)
              If WF Is Nothing Then
                Return
              End If
              Dim pos As Long = WF.GetBytePositionFromX(e.X, Me.pictureBox1.Width, - 1, - 1)
              Console.WriteLine("Position = {0}, Seconds = {1}", pos, Bass.BASS_ChannelBytes2Seconds(_stream, pos))
              Bass.BASS_ChannelSetPosition(_stream, pos)
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Int64@,System.Int64@,System.Double)">
            <summary>
            Determines silence positions at the beginning and end of a rendered wave form.
            </summary>
            <param name="startpos">Returns the position in bytes where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in bytes where the sound ends (cue-out position).</param>
            <param name="threshold">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning and end of the track.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            long startpos = 0;
            long endpos   = 0;
            WF.GetCuePoints(ref startpos, ref endpos, -30.0);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Long = 0
            Dim endpos As Long = 0
            WF.GetCuePoints(startpos, endpos, -30.0)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Int64@,System.Int64@,System.Double,System.Double)">
            <summary>
            Determines silence positions at the beginning and end of a rendered wave form.
            </summary>
            <param name="startpos">Returns the position in bytes where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in bytes where the sound ends (cue-out position).</param>
            <param name="thresholdIn">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning of the track.</param>
            <param name="thresholdOut">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the end of the track.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            long startpos = 0;
            long endpos   = 0;
            WF.GetCuePoints(ref startpos, ref endpos, -30.0, -50.0);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Long = 0
            Dim endpos As Long = 0
            WF.GetCuePoints(startpos, endpos, -30.0, -50.0)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Int64@,System.Int64@,System.Double,System.Double,System.Boolean)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in bytes where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in bytes where the sound ends (cue-out position).</param>
            <param name="thresholdIn">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning of the track.</param>
            <param name="thresholdOut">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the end of the track.</param>
            <param name="findZeroCrossing">If set to <see langword="true"/> the cue points will be adjusted to the next resp. previous zero crossing in order to avoid clicks (if set to <see langword="false"/> the cue points will be adjusted to a quiter sample only).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            long startpos = 0;
            long endpos   = 0;
            WF.GetCuePoints(ref startpos, ref endpos, -24.0, -42.0, true);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Long = 0
            Dim endpos As Long = 0
            WF.GetCuePoints(startpos, endpos, -24.0, -42.0, True)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Int64@,System.Int64@,System.Double,System.Int32,System.Int32)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in bytes where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in bytes where the sound ends (cue-out position).</param>
            <param name="threshold">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning and end of the track.</param>
            <param name="frameStart">The frame position where to start the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan from the beginning).</param>
            <param name="frameEnd">The frame position til where to perform the silence detection  (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan til the end; must be bigger than frameStart).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            long startpos = 0;
            long endpos   = 0;
            WF.GetCuePoints(ref startpos, ref endpos, -40.0, -1, -1);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Long = 0
            Dim endpos As Long = 0
            WF.GetCuePoints(startpos, endpos, -40.0, -1, -1)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Int64@,System.Int64@,System.Double,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in bytes where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in bytes where the sound ends (cue-out position).</param>
            <param name="threshold">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning and end of the track.</param>
            <param name="frameStart">The frame position where to start the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan from the beginning).</param>
            <param name="frameEnd">The frame position til where to perform the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan til the end; must be bigger than frameStart).</param>
            <param name="findZeroCrossing">If set to <see langword="true"/> the cue points will be adjusted to the next resp. previous zero crossing in order to avoid clicks (if set to <see langword="false"/> the cue points will be adjusted to a quiter sample only).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            long startpos = 0;
            long endpos   = 0;
            WF.GetCuePoints(ref startpos, ref endpos, -42.0, -1, -1, true);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Long = 0
            Dim endpos As Long = 0
            WF.GetCuePoints(startpos, endpos, -42.0, -1, -1, True)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Int64@,System.Int64@,System.Double,System.Double,System.Int32,System.Int32)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in bytes where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in bytes where the sound ends (cue-out position).</param>
            <param name="thresholdIn">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning of the track.</param>
            <param name="thresholdOut">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the end of the track.</param>
            <param name="frameStart">The frame position where to start the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan from the beginning).</param>
            <param name="frameEnd">The frame position til where to perform the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan til the end; must be bigger than frameStart).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            long startpos = 0;
            long endpos   = 0;
            WF.GetCuePoints(ref startpos, ref endpos, -24.0, -50.0, -1, -1);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Int64@,System.Int64@,System.Double,System.Double,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in bytes where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in bytes where the sound ends (cue-out position).</param>
            <param name="thresholdIn">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning of the track.</param>
            <param name="thresholdOut">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the end of the track.</param>
            <param name="frameStart">The frame position where to start the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan from the beginning).</param>
            <param name="frameEnd">The frame position til where to perform the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan til the end; must be bigger than frameStart).</param>
            <param name="findZeroCrossing">If set to <see langword="true"/> the cue points will be adjusted to the next resp. previous zero crossing in order to avoid clicks (if set to <see langword="false"/> the cue points will be adjusted to a quiter sample only).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            long startpos = 0;
            long endpos   = 0;
            WF.GetCuePoints(ref startpos, ref endpos, -30.0, -50.0, -1, -1, true);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Long = 0
            Dim endpos As Long = 0
            WF.GetCuePoints(startpos, endpos, -30.0, -50.0, -1, -1, True)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Double@,System.Double@,System.Double)">
            <summary>
            Determines silence positions at the beginning and end of a rendered wave form.
            </summary>
            <param name="startpos">Returns the position in seconds where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in seconds where the sound ends (cue-out position).</param>
            <param name="threshold">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning and end of the track.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            double startpos = 0.0;
            double endpos   = 0.0;
            WF.GetCuePoints(ref startpos, ref endpos, -30.0);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Double = 0.0
            Dim endpos As Double = 0.0
            WF.GetCuePoints(startpos, endpos, -30.0)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Double@,System.Double@,System.Double,System.Double)">
            <summary>
            Determines silence positions at the beginning and end of a rendered wave form.
            </summary>
            <param name="startpos">Returns the position in seconds where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in seconds where the sound ends (cue-out position).</param>
            <param name="thresholdIn">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning of the track.</param>
            <param name="thresholdOut">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the end of the track.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            double startpos = 0.0;
            double endpos   = 0.0;
            WF.GetCuePoints(ref startpos, ref endpos, -30.0, -50.0);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Double = 0.0
            Dim endpos As Double = 0.0
            WF.GetCuePoints(startpos, endpos, -30.0, -50.0)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Double@,System.Double@,System.Double,System.Double,System.Boolean)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in seconds where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in seconds where the sound ends (cue-out position).</param>
            <param name="thresholdIn">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning of the track.</param>
            <param name="thresholdOut">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the end of the track.</param>
            <param name="findZeroCrossing">If set to <see langword="true"/> the cue points will be adjusted to the next resp. previous zero crossing in order to avoid clicks (if set to <see langword="false"/> the cue points will be adjusted to a quiter sample only).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            double startpos = 0.0;
            double endpos   = 0.0;
            WF.GetCuePoints(ref startpos, ref endpos, -24.0, -42.0, true);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Double = 0.0
            Dim endpos As Double = 0.0
            WF.GetCuePoints(startpos, endpos, -24.0, -42.0, True)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Double@,System.Double@,System.Double,System.Int32,System.Int32)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in seconds where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in seconds where the sound ends (cue-out position).</param>
            <param name="threshold">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning and end of the track.</param>
            <param name="frameStart">The frame position where to start the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan from the beginning).</param>
            <param name="frameEnd">The frame position til where to perform the silence detection  (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan til the end; must be bigger than frameStart).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            double startpos = 0.0;
            double endpos   = 0.0;
            WF.GetCuePoints(ref startpos, ref endpos, -40.0, -1, -1);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Double = 0.0
            Dim endpos As Double = 0.0
            WF.GetCuePoints(startpos, endpos, -40.0, -1, -1)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Double@,System.Double@,System.Double,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in seconds where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in seconds where the sound ends (cue-out position).</param>
            <param name="threshold">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning and end of the track.</param>
            <param name="frameStart">The frame position where to start the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan from the beginning).</param>
            <param name="frameEnd">The frame position til where to perform the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan til the end; must be bigger than frameStart).</param>
            <param name="findZeroCrossing">If set to <see langword="true"/> the cue points will be adjusted to the next resp. previous zero crossing in order to avoid clicks (if set to <see langword="false"/> the cue points will be adjusted to a quiter sample only).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            double startpos = 0.0;
            double endpos   = 0.0;
            WF.GetCuePoints(ref startpos, ref endpos, -42.0, -1, -1, true);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Double = 0.0
            Dim endpos As Double = 0.0
            WF.GetCuePoints(startpos, endpos, -42.0, -1, -1, True)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Double@,System.Double@,System.Double,System.Double,System.Int32,System.Int32)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in seconds where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in seconds where the sound ends (cue-out position).</param>
            <param name="thresholdIn">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning of the track.</param>
            <param name="thresholdOut">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the end of the track.</param>
            <param name="frameStart">The frame position where to start the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan from the beginning).</param>
            <param name="frameEnd">The frame position til where to perform the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan til the end; must be bigger than frameStart).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>
            <para>If your rendering method and your playback stream used different flags during creation (e.g. rendering was done using the BASS_DEFAULT flag whereas your playback stream uses BASS_SAMPLE_FLOAT)
            getting the cue points might result in different positions, meaning the positions would reflect a different value during playback.
            But if you called the <see cref="M:Un4seen.Bass.Misc.WaveForm.SyncPlayback(System.Int32)"/> method this will ensure, that the position will be converted accordingly.</para>
            </remarks>
            <example>
            <code lang="C#">
            double startpos = 0.0;
            double endpos   = 0.0;
            WF.GetCuePoints(ref startpos, ref endpos, -24.0, -50.0, -1, -1);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Double = 0.0
            Dim endpos As Double = 0.0
            WF.GetCuePoints(startpos, endpos, -24.0, -50.0, -1, -1)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetCuePoints(System.Double@,System.Double@,System.Double,System.Double,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Determines silence positions of a rendered wave form within a given range.
            </summary>
            <param name="startpos">Returns the position in seconds where the sound begins (cue-in position).</param>
            <param name="endpos">Returns the position in seconds where the sound ends (cue-out position).</param>
            <param name="thresholdIn">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the beginning of the track.</param>
            <param name="thresholdOut">The threshold in dB (e.g. -24.0dB) which should be used to detect silence resp. sound at the end of the track.</param>
            <param name="frameStart">The frame position where to start the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan from the beginning).</param>
            <param name="frameEnd">The frame position til where to perform the silence detection (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan til the end; must be bigger than frameStart).</param>
            <param name="findZeroCrossing">If set to <see langword="true"/> the cue points will be adjusted to the next resp. previous zero crossing in order to avoid clicks (if set to <see langword="false"/> the cue points will be adjusted to a quiter sample only).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <example>
            <code lang="C#">
            double startpos = 0.0;
            double endpos   = 0.0;
            WF.GetCuePoints(ref startpos, ref endpos, -30.0, -50.0, -1, -1, true);
            WF.AddMarker( "CUE", startpos );
            WF.AddMarker( "END", endpos );
            ...
            </code>
            <code lang="VB">
            Dim startpos As Double = 0.0
            Dim endpos As Double = 0.0
            WF.GetCuePoints(startpos, endpos, -30.0, -50.0, -1, -1, True)
            WF.AddMarker("CUE", startpos)
            WF.AddMarker("END", endpos)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.GetNormalizationGain(System.Int32,System.Int32,System.Single@)">
            <summary>
            Determines a gain factor (normalization), so that the maximum peak level of the sample data will be at 0 dB.
            </summary>
            <param name="frameStart">The frame position where to start the calculation (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan from the beginning).</param>
            <param name="frameEnd">The frame position til where to perform the calculation (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>, or -1 to scan til the end; must be bigger than frameStart).</param>
            <param name="peak">Returns the maximum peak level as a float value between 0.0 (silence) and 1.0 (0dB).</param>
            <returns>The gain factor as a float value.</returns>
            <remarks>
            You might use the gain factor as a multiplier to the sample data to apply a volume adjustment, so that the maximum peak level of the audio samples is at 0 dB.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.DetectNextLevel(System.Int64,System.Double,System.Boolean,System.Boolean)">
            <summary>
            Finds the next position with a certain volume level.
            </summary>
            <param name="startpos">The position in bytes where to start the search.</param>
            <param name="threshold">The threshold in dB (e.g. -12.0dB) which should be searched.</param>
            <param name="reverse">Search forward (<see langword="false"/>) or backward (<see langword="true"/>).</param>
            <param name="findZeroCrossing">If set to <see langword="true"/> the returned position will be adjusted to the next resp. previous zero crossing in order to avoid clicks.</param>
            <returns>The position with the respective volume level (if the level could not be detected, then startpos will be returned).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.DetectNextLevel(System.Double,System.Double,System.Boolean,System.Boolean)">
            <summary>
            Finds the next position with a certain volume level.
            </summary>
            <param name="startpos">The position in seconds where to start the search.</param>
            <param name="threshold">The threshold in dB (e.g. -12.0dB) which should be searched.</param>
            <param name="reverse">Search forward (<see langword="false"/>) or backward (<see langword="true"/>).</param>
            <param name="findZeroCrossing">If set to <see langword="true"/> the returned position will be adjusted to the next resp. previous zero crossing in order to avoid clicks.</param>
            <returns>The position with the respective volume level (if the level could not be detected, then startpos will be returned).</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.FindPreviousZeroCrossing(System.Int64)">
            <summary>
            Finds the previous zero crossing position related to the given position (backward seeking).
            </summary>
            <param name="position">The position where to start the search.</param>
            <returns>The previous zero crossing position.</returns>
            <remarks>If the given position already denotes a zero-crossing position the same position will be returned.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.FindNextZeroCrossing(System.Int64)">
            <summary>
            Finds the next zero crossing position related to the given position (forward seeking).
            </summary>
            <param name="position">The position where to start the search.</param>
            <returns>The next zero crossing position.</returns>
            /// <remarks>If the given position already denotes a zero-crossing position the same position will be returned.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.PeakLevelOfFrame(System.Int32)">
            <summary>
            Returns the peak level (between 0 and 32767) of a given frame position.
            </summary>
            <param name="pos">The frame position (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>) to get the peak level from.</param>
            <returns>The peak level between 0 and 32767 of the given position.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.IsZeroCrossingFrame(System.Int32,System.Int32)">
            <summary>
            Detects, if the two given positions reflect a zero crossing.
            </summary>
            <param name="pos1">The frame position1 (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>) to check for zero crossing.</param>
            <param name="pos2">The frame position2 (between 0 and <see cref="P:Un4seen.Bass.Misc.WaveForm.FramesRendered"/>) to check for zero crossing.</param>
            <returns><see langword="true"/>, if the given positions denote a crossing of a zero level of either the left or right channel - else <see langword="false"/>.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.Render(System.Boolean,System.Threading.ThreadPriority,Un4seen.Bass.BASSFlag,System.Int32)">
            <summary>
            Performs the actual rendering.
            </summary>
            <param name="background"><see langword="true"/> = in background thread.</param>
            <param name="prio">The thread priority to be used with the background thread (default is BelowNormal).</param>
            <param name="flags">The stream create flags.</param>
            <param name="chans">The number of channels (1=mono, 2=stereo, etc.)</param>
            <returns><see langword="true"/> = successfully started/executed.</returns>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.ScanPeaks">
            <summary>
            Does the actual scanning of the peak levels
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.ScanPeaksSimple">
            <summary>
            Does the actual scanning of the peak levels
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.InvokeCallback(System.Boolean)">
            <summary>
            Calls the notification handler.
            </summary>
            <param name="finished"><see langword="true"/>, if the render process has finished.</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.DrawBitmap(System.Drawing.Graphics,System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.Pen,System.Drawing.Pen,System.Drawing.Pen,System.Drawing.Pen,System.Drawing.Pen,System.Drawing.Pen,System.Drawing.Pen,System.Drawing.Pen,System.Drawing.Pen)">
            <summary>
            Internal method to draw the actual wave form.
            </summary>
            <param name="g">The graphics object where to draw.</param>
            <param name="width">width to draw</param>
            <param name="height">height to draw</param>
            <param name="frameStart">starting frame</param>
            <param name="frameEnd">ending frame</param>
            <param name="pMiddleL"></param>
            <param name="pMiddleR"></param>
            <param name="pLeft">pen left</param>
            <param name="pLeftEnv">pen left</param>
            <param name="pRight">pen right</param>
            <param name="pRightEnv">pen right</param>
            <param name="pMarker">pen marker</param>
            <param name="pBeat">pen beat</param>
            <param name="pVolume">pen volume</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveFormSaveToFile(System.String)">
            <summary>
            Saves a rendered WaveForm to a file (uncompressed).
            </summary>
            <param name="fileName">The file name to save the rendered data to.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>Writes the WaveForm to a file using standard serialization.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveFormSaveToFile(System.String,System.Boolean)">
            <summary>
            Saves a rendered WaveForm to a file.
            </summary>
            <param name="fileName">The file name to save the rendered data to.</param>
            <param name="binary">If <see langword="true"/> the WaveForm will be saved to a binary <paramref name="fileName"/> - else standard serialization will be carried out.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>The binary format is much more compact and faster, so it is advised to use this format. 
            Note, that you must load the WaveForm using the save format as it was saved.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveFormSaveToMemory">
            <summary>
            Saves a rendered WaveForm to a byte array.
            </summary>
            <returns>The byte array containing the serialized data of the wave form.</returns>
            <remarks>Writes the WaveForm to a byte array using standard serialization.</remarks>
            <example>
            <code lang="C#">
            private byte[] waveformSave;
            ...
            // save the wave form to a byte array
            waveformSave = WF.WaveFormSaveToMemory();
            ..
            // load the wave form to a byte array
            WF = new Un4seen.Bass.Misc.WaveForm();
            WF.WaveFormLoadFromMemory( waveformSave );
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line | WaveForm.MARKERDRAWTYPE.Name | WaveForm.MARKERDRAWTYPE.NamePositionAlternate;
            this.pictureBox1.BackgroundImage = WF.CreateBitmap( this.pictureBox1.Width, this.pictureBox1.Height, -1, -1, true);
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveFormSaveToMemory(System.Boolean)">
            <summary>
            Saves a rendered WaveForm to a byte array.
            </summary>
            <param name="binary">If <see langword="true"/> the WaveForm will be saved in binary format - else standard serialization will be carried out.</param>
            <returns>The byte array containing the serialized data of the wave form.</returns>
            <remarks>The binary format is much more compact and faster, so it is advised to use this format. 
            Note, that you must load the WaveForm using the save format as it was saved.</remarks>
            <example>
            <code lang="C#">
            private byte[] waveformSave;
            ...
            // save the wave form to a byte array
            waveformSave = WF.WaveFormSaveToMemory(true);
            ..
            // load the wave form to a byte array
            WF = new Un4seen.Bass.Misc.WaveForm();
            WF.WaveFormLoadFromMemory( waveformSave, true );
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line | WaveForm.MARKERDRAWTYPE.Name | WaveForm.MARKERDRAWTYPE.NamePositionAlternate;
            this.pictureBox1.BackgroundImage = WF.CreateBitmap( this.pictureBox1.Width, this.pictureBox1.Height, -1, -1, true);
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String)">
            <summary>
            Loads a rendered WaveForm from a file.
            </summary>
            <param name="fileName">The file name to load the rendered data from.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>Loads the WaveForm using standard serialization.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromFile(System.String,System.Boolean)">
            <summary>
            Loads a rendered WaveForm from a file.
            </summary>
            <param name="fileName">The file name to load the rendered data from.</param>
            <param name="binary">If <see langword="true"/> the WaveForm will be loaded from a binary <paramref name="fileName"/> - else standard deserialization will be carried out.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>The binary format is much more compact and faster, so it is advised to use this format. 
            Note, that you must load the WaveForm in the same format as it was saved.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromMemory(System.Byte[])">
            <summary>
            Loads a rendered WaveForm from a byte array.
            </summary>
            <param name="data">The byte array to load the rendered data from (e.g. created with <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormSaveToMemory"/>).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>Loads the WaveForm using standard serialization.</remarks>
            <example>
            <code lang="C#">
            private byte[] waveformSave;
            ...
            // save the wave form to a byte array
            waveformSave = WF.WaveFormSaveToMemory();
            ..
            // load the wave form to a byte array
            WF = new Un4seen.Bass.Misc.WaveForm();
            WF.WaveFormLoadFromMemory( waveformSave );
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line | WaveForm.MARKERDRAWTYPE.Name | WaveForm.MARKERDRAWTYPE.NamePositionAlternate;
            this.pictureBox1.BackgroundImage = WF.CreateBitmap( this.pictureBox1.Width, this.pictureBox1.Height, -1, -1, true);
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveForm.WaveFormLoadFromMemory(System.Byte[],System.Boolean)">
            <summary>
            Loads a rendered WaveForm from a byte array.
            </summary>
            <param name="data">The byte array to load the rendered data from (e.g. created with <see cref="M:Un4seen.Bass.Misc.WaveForm.WaveFormSaveToMemory"/>).</param>
            <param name="binary">If <see langword="true"/> the WaveForm will be loaded from a binary format - else standard deserialization will be carried out.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>The binary format is much more compact and faster, so it is advised to use this format. 
            Note, that you must load the WaveForm in the same format as it was saved.</remarks>
            <example>
            <code lang="C#">
            private byte[] waveformSave;
            ...
            // save the wave form to a byte array
            waveformSave = WF.WaveFormSaveToMemory();
            ..
            // load the wave form to a byte array
            WF = new Un4seen.Bass.Misc.WaveForm();
            WF.WaveFormLoadFromMemory( waveformSave );
            WF.DrawMarker = WaveForm.MARKERDRAWTYPE.Line | WaveForm.MARKERDRAWTYPE.Name | WaveForm.MARKERDRAWTYPE.NamePositionAlternate;
            this.pictureBox1.BackgroundImage = WF.CreateBitmap( this.pictureBox1.Width, this.pictureBox1.Height, -1, -1, true);
            </code>
            </example>
        </member>
        <member name="T:Un4seen.Bass.Misc.WAVEFORMPROC">
            <summary>
            Callback which will be invoked during <see cref="M:Un4seen.Bass.Misc.WaveForm.RenderStart(System.Int32,System.Boolean)"/> to give feedback about the current rendering progress.
            </summary>
            <param name="framesDone">The number of frames already rendered.</param>
            <param name="framesTotal">The total number of frames to render.</param>
            <param name="elapsedTime">The already elapsed rendering time.</param>
            <param name="finished"><see langword="true"/>, when rendering has finished - else <see langword="false"/> (still rendering).</param>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveWriter">
            <summary>
            Provides general methods to save an audio stream to a file in the WAVE file format.
            <para>Supported bit resolutions are 8-bit, 16-bit, 24-bit and 32-bit.
            Supported sample rates are 8000, 11025, 22050, 44100, 48000 or 96000 Hz.
            Multi channel wave files are also supported. Use 1=mono, 2=stereo...</para>
            </summary>
            <remarks>
            <para>The WaveWriter class is an internal implementation of the BASS.NET API and does not require any additional extension or add-on to the BASS audio library.</para>
            <para>The typical use of this class is as followed:</para>
            <para>a) Create an instance of the class and define the frequency, channels and bitrate.</para>
            <para>b) Call the <see cref="M:Un4seen.Bass.Misc.WaveWriter.Write(System.IntPtr,System.Int32)"/> method subsequently to write sample data to the wave file.</para>
            <para>c) Finally call <see cref="M:Un4seen.Bass.Misc.WaveWriter.Close"/> to close and finish the wave file.</para>
            <para>Note: Not all media players support playback of all formats, especially multi-channel (more than stereo) or high-resolution (greater 16-bit) wave files.</para>
            <para>The following speaker assignment is used for multi-channel wave files (as defined/recommended by Microsoft):
            <list type="table">
            <listheader><term>#Chans</term><description>Speaker Assignment</description></listheader>
            <item><term>1</term><description>Mono: SPEAKER_FRONT_LEFT</description></item>
            <item><term>2</term><description>Stereo: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT</description></item>
            <item><term>3</term><description>2.1: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, SPEAKER_FRONT_CENTER</description></item>
            <item><term>4</term><description>2.2: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT</description></item>
            <item><term>5</term><description>2.2.1: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, SPEAKER_FRONT_CENTER, SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT</description></item>
            <item><term>6</term><description>5.1: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT</description></item>
            <item><term>7</term><description>5.1.1: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT, SPEAKER_BACK_CENTER</description></item>
            <item><term>8</term><description>7.1: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT, SPEAKER_FRONT_LEFT_OF_CENTER, SPEAKER_FRONT_RIGHT_OF_CENTER</description></item>
            <item><term>9</term><description>7.1.1: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT, SPEAKER_FRONT_LEFT_OF_CENTER, SPEAKER_FRONT_RIGHT_OF_CENTER, SPEAKER_BACK_CENTER</description></item>
            <item><term>&gt; 9</term><description>Undefined: SPEAKER_ALL</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Writing a MP3 file to WAV:
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE);
            WaveWriter WW = new WaveWriter("test.wav", stream, true);
            short[] data = new short[32768];
            while (Bass.BASS_ChannelIsActive(stream) == BASSActive.BASS_ACTIVE_PLAYING)
            {
              int length = Bass.BASS_ChannelGetData(stream, data, 32768);
              if (length > 0)
                WW.Write(data, length);
            }
            // finilize the wave file!
            WW.Close();
            Bass.BASS_StreamFree(stream);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE)
            Dim WW As New WaveWriter("test.wav", stream, True)
            Dim data(32768 - 1) As Short
            While Bass.BASS_ChannelIsActive(stream) = BASSActive.BASS_ACTIVE_PLAYING
              Dim length As Integer = Bass.BASS_ChannelGetData(stream, data, 32768)
              If length > 0 Then
                WW.Write(data, length)
              End If
            End While
            ' finilize the wave file!
            WW.Close()
            Bass.BASS_StreamFree(stream)
            </code>
            Using a WaveWriter in a RECORDPROC to record 24-bit at 44.1kHz, stereo:
            <code lang="C#">
            private WaveWriter _waveWriter = null; // make it global, so that the GC can not remove it
            private RECORDPROC _myRecProc;
            private int _recHandle = 0;
            ...
            // start recording
            _myRecProc = new RECORDPROC(MyRecording);
            _recHandle = Bass.BASS_RecordStart(44100, 2, 
                              BASSFlag.BASS_RECORD_PAUSE | BASSFlag.BASS_SAMPLE_FLOAT, _myRecProc, IntPtr.Zero);
            // create a WaveWriter using the _recHandle to set the freq. and channels, but write the wave at 24-bit
            _waveWriter = new WaveWriter( "test.wav", _recHandle, 24, true);
            Bass.BASS_ChannelPlay(_recHandle, false);
            ...
            // when finished recording call this!
            if (_waveWriter != null)
            {
              // finilize the wave file!
              _waveWriter.Close();
            }
            ...
            // the recording callback
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              // we will get float sample data here
              // so make sure the _waveWriter.OrigResolution property is set to 32
              // this was automatically done, since we started recording with BASSFlag.BASS_SAMPLE_FLOAT
              _waveWriter.Write( buffer, length );
              return true; // always continue recording
            }
            </code>
            <code lang="VB">
            Private _waveWriter As WaveWriter = Nothing ' make it global, so that the GC can not remove it
            Private _myRecProc As RECORDPROC
            Private _recHandle As Integer = 0
            ...
            ' start recording
            _myRecProc = New RECORDPROC(AddressOf MyRecording)
            _recHandle = Bass.BASS_RecordStart(44100, 2, 
                              BASSFlag.BASS_RECORD_PAUSE Or BASSFlag.BASS_SAMPLE_FLOAT, _myRecProc, IntPtr.Zero)
            ' create a WaveWriter using the _recHandle to set the freq. and channels, but write the wave at 24-bit
            _waveWriter = New WaveWriter("test.wav", _recHandle, 24, True)
            Bass.BASS_ChannelPlay(_recHandle, False)
            ...
            ' when finished recording call this!
            If Not (_waveWriter Is Nothing) Then
              ' finilize the wave file!
              _waveWriter.Close()
            End If
            ...
            ' the recording callback
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              ' we will get float sample data here
              ' so make sure the _waveWriter.OrigResolution property is set to 32
              ' this was automatically done, since we started recording with BASSFlag.BASS_SAMPLE_FLOAT
              _waveWriter.Write(buffer, length)
              Return True ' always continue recording
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.#ctor(System.String,System.Int32,System.Boolean)">
            <summary>
            Create a WaveWrite instance from a given BASS stream channel.
            </summary>
            <param name="fileName">Fully referenced path and file name of the Wave file to create.</param>
            <param name="stream">A BASS stream channel (HMUSIC, HSTREAM, HRECORD) for which to create a WaveWriter.</param>
            <param name="rewrite">Specifies, if an existing <paramref name="fileName"/> should be overwritten (<see langword="true"/>=overwrite, <see langword="false"/>=do not overwrite).</param>
            <remarks>The sample data provided when calling the <see cref="M:Un4seen.Bass.Misc.WaveWriter.Write(System.IntPtr,System.Int32)"/> method must conform the stream info settings. No resampling will be applied here.
            <para>This overload already sets the <see cref="P:Un4seen.Bass.Misc.WaveWriter.NumChannels"/>, <see cref="P:Un4seen.Bass.Misc.WaveWriter.SampleRate"/> and <see cref="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample"/> properties according to the given <paramref name="stream"/> stream.</para>
            <para>When you have created the stream with the <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_FLOAT"/> flag the Wave file will be written in 32-bit float format (WAVE_FORMAT_IEEE_FLOAT).
            When you have created the stream with the <see cref="F:Un4seen.Bass.BASSFlag.BASS_SAMPLE_8BITS"/> flag the Wave file will be written in 8-bit unsigned format (WAVE_FORMAT_PCM).
            In all other cases the the Wave file will be written in 16-bit signed format (WAVE_FORMAT_PCM).</para>
            <para>Note: 24-bit resolutions are not supported with this overload.</para>
            <para>If the stream contains more than 2 channels (e.g. multi-channel) the Wave file will be written in the WAVE_FORMAT_EXTENSIBLE format.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">The channel information could not be retrieved for the <paramref name="stream"/>.</exception>
            <exception cref="T:System.IO.IOException">The file already exists (only raised if the <paramref name="rewrite"/> has not been used). Or the Wave Header could not be written.</exception>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.#ctor(System.String,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Create a WaveWrite instance from a given BASS stream channel.
            </summary>
            <param name="fileName">Fully referenced path and file name of the Wave file to create.</param>
            <param name="stream">A BASS stream channel (HMUSIC, HSTREAM, HRECORD) for which to create a WaveWriter.</param>
            <param name="bitsPerSample">Bits per sample of the wave file (must be either 8, 16, 24 or 32). This overrides the actual stream resolution and the bit rate will be converted automatically (however quality might be effected but never increased).</param>
            <param name="rewrite">Specifies, if an existing <paramref name="fileName"/> should be overwritten (<see langword="true"/>=overwrite, <see langword="false"/>=do not overwrite).</param>
            <remarks>The sample data provided when calling the <see cref="M:Un4seen.Bass.Misc.WaveWriter.Write(System.IntPtr,System.Int32)"/> method must conform the stream info settings. No resampling will be applied here.
            <para>This overload already sets the <see cref="P:Un4seen.Bass.Misc.WaveWriter.NumChannels"/> and <see cref="P:Un4seen.Bass.Misc.WaveWriter.SampleRate"/> properties according to the given <paramref name="stream"/> stream. The <see cref="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample"/> will be overwritten.</para>
            <para>When you have specified a 32-bit resolution the Wave file will be written in 32-bit float format (WAVE_FORMAT_IEEE_FLOAT).
            When you have specified an 8-bit resolution the Wave file will be written in 8-bit unsigned format (WAVE_FORMAT_PCM).
            In all other cases the the Wave file will be written in 16-bit or 24-bit signed format (WAVE_FORMAT_PCM).</para>
            <para>If the stream contains more than 2 channels (e.g. multi-channel) the Wave file will be written in the WAVE_FORMAT_EXTENSIBLE format.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">The channel information could not be retrieved for the <paramref name="stream"/>.</exception>
            <exception cref="T:System.IO.IOException">The file already exists (only raised if the <paramref name="rewrite"/> has not been used). Or the Wave Header could not be written.</exception>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.#ctor(System.String,System.Int32,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Create a WaveWrite instance to save sample data to be processed to a wave file.
            </summary>
            <param name="fileName">Fully referenced path and file name of the Wave file to create.</param>
            <param name="numChannels">Number of channels of the wave file (1=mono, 2=stereo...).</param>
            <param name="sampleRate">Sample rate of the wave file (e.g. 8000, 11025, 22050, 44100, 48000, 96000) in Hz.</param>
            <param name="bitsPerSample">Bits per sample of the wave file (must be either 8, 16, 24 or 32).</param>
            <param name="rewrite">Specifies, if an existing <paramref name="fileName"/> should be overwritten (<see langword="true"/>=overwrite, <see langword="false"/>=do not overwrite).</param>
            <remarks>The sample data provided when calling the <see cref="M:Un4seen.Bass.Misc.WaveWriter.Write(System.IntPtr,System.Int32)"/> method must conform these settings (ie. <see cref="P:Un4seen.Bass.Misc.WaveWriter.NumChannels"/>, <see cref="P:Un4seen.Bass.Misc.WaveWriter.SampleRate"/> and <see cref="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample"/>)! No resampling will be applied here.
            <para>When you have specified 24 <paramref name="bitsPerSample"/> the sample data must be provided as float values when using the <see cref="M:Un4seen.Bass.Misc.WaveWriter.Write(System.IntPtr,System.Int32)"/> method (the float sample will actually be converted to 24-bit samples)!</para>
            <para>If the stream contains more than 2 channels (e.g. multi-channel) or is defined with 24-bit resolution the Wave file will be written in the WAVE_FORMAT_EXTENSIBLE format.</para>
            </remarks>
            <exception cref="T:System.IO.IOException">The file already exists (only raised if the <paramref name="rewrite"/> has not been used). Or the Wave Header could not be written.</exception>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.Initialize(System.Boolean)">
            <summary>
            Internal constructor only.
            </summary>
            <param name="rewrite">Overwrite flag.</param>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.Dispose">
            <summary>
            Disposes the current instance of the WaveWriter and all it's resources.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.Finalize">
            <summary>
            Finalization code.
            </summary>
            <remarks>This destructor will run only if the <see cref="M:Un4seen.Bass.Misc.WaveWriter.Dispose"/> method does not get called.
            It will automatically <see cref="M:Un4seen.Bass.Misc.WaveWriter.Close"/> the <see cref="P:Un4seen.Bass.Misc.WaveWriter.FileName"/> and flush all the data so far written.</remarks>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveWriter.WaveFormat">
            <summary>
            Defines the possible wave formats (only a few and common are listed here). For a complete listing see the mmreg.h header file.
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveWriter.WaveFormat.WAVE_FORMAT_UNKNOWN">
            <summary>
            Unknown Format
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveWriter.WaveFormat.WAVE_FORMAT_PCM">
            <summary>
            PCM format (8 or 16 bit)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveWriter.WaveFormat.WAVE_FORMAT_IEEE_FLOAT">
            <summary>
            Float format (32 bit)
            </summary>
        </member>
        <member name="F:Un4seen.Bass.Misc.WaveWriter.WaveFormat.WAVE_FORMAT_EXTENSIBLE">
            <summary>
            Extensible Format (user defined)
            </summary>
        </member>
        <member name="T:Un4seen.Bass.Misc.WaveWriter.WaveSpeakers">
            <summary>
            Wave speaker assignments for the WAVE_FORMAT_EXTENSIBLE format and multi-channel files.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveWriter.FileName">
            <summary>
            Gets or Sets the fully referenced path and file name of the wave file to write to data to.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveWriter.NumChannels">
            <summary>
            Gets the number of channels of the Wave file being created (values between 1 and 9 should be fine).
            <para>E.g. 1=mono, 2=stereo...</para>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveWriter.SampleRate">
            <summary>
            Gets the sample rate of the Wave file being created.
            <para>e.g. 44100 for 44.1kHz. Typically one of the following: 11025, 22050, 44100, 48000, 96000.</para>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample">
            <summary>
            Gets or Sets the target resolution (number of bits per sample) of the Wave file being created.
            <para>This will be either 8, 16, 24 or 32.</para>
            </summary>
        </member>
        <member name="P:Un4seen.Bass.Misc.WaveWriter.OrigResolution">
            <summary>
            Gets or Sets the original resolution (number of bits per sample) of the stream channel resp. sample data to process.
            <para>This should be either 8, 16 or 32.</para>
            <para>This value is used in the <see cref="M:Un4seen.Bass.Misc.WaveWriter.Write(System.IntPtr,System.Int32)"/> methods to automatically convert the bit resolution according to the target <see cref="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample"/> value.
            E.g. set this value to 32, if you receive 32-bit float sample data in a DSP callback and if you want to call the <see cref="M:Un4seen.Bass.Misc.WaveWriter.Write(System.IntPtr,System.Int32)"/> method there directly, but have specified a target resolution of 8, 16 or 24 bit.</para>
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.WriteWaveHeader">
            <summary>
            Writes the Wave Header structure to the BinaryWriter _bw.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.Write(System.IntPtr,System.Int32)">
            <summary>
            Use this method to provide the sample data to the WaveWriter and write these samples to the wave file.
            </summary>
            <param name="buffer">The IntPtr containing the sample data.</param>
            <param name="length">The number of BYTEs in the buffer.</param>
            <remarks>This method is best used in <see cref="T:Un4seen.Bass.DSPPROC"/>, <see cref="T:Un4seen.Bass.DOWNLOADPROC"/> or <see cref="T:Un4seen.Bass.RECORDPROC"/> callback delegates.
            <para>Please note, that the sample data provided in the <paramref name="buffer"/> must conform the <see cref="P:Un4seen.Bass.Misc.WaveWriter.OrigResolution"/> property!
            Meaning if the <see cref="P:Un4seen.Bass.Misc.WaveWriter.OrigResolution"/>=32 float sample data is expected, if <see cref="P:Un4seen.Bass.Misc.WaveWriter.OrigResolution"/>=16 short sample data is expected and if <see cref="P:Un4seen.Bass.Misc.WaveWriter.OrigResolution"/>=8 byte samples are expected!</para>
            <para>However, the data written to the wave file will be in <see cref="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample"/> resolution (as specified in the constructor). If the <see cref="P:Un4seen.Bass.Misc.WaveWriter.OrigResolution"/> is different from this one an automatic bit resolution conversion will take place.</para>
            <para>When using a decoding stream other overloads might be more conviniant.</para>
            </remarks>
            <example>
            Using a WaveWriter in a RECORDPROC to record 24-bit at 44.1kHz, stereo:
            <code lang="C#">
            private WaveWriter _waveWriter = null; // make it global, so that the GC can not remove it
            private RECORDPROC _myRecProc;
            private int _recHandle = 0;
            ...
            // start recording
            _myRecProc = new RECORDPROC(MyRecording);
            _recHandle = Bass.BASS_RecordStart(44100, 2, 
                              BASSFlag.BASS_RECORD_PAUSE | BASSFlag.BASS_SAMPLE_FLOAT, _myRecProc, IntPtr.Zero);
            // create a WaveWriter using the _recHandle to set the freq. and channels, but write the wave at 24-bit
            _waveWriter = new WaveWriter( "test.wav", _recHandle, 24, true);
            Bass.BASS_ChannelPlay(_recHandle, false);
            ...
            // when finished recording call this!
            if (_waveWriter != null)
            {
              // finilize the wave file!
              _waveWriter.Close();
            }
            ...
            // the recording callback
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
              // we will get float sample data here
              // so make sure the _waveWriter.OrigResolution property is set to 32
              // this was automatically done, since we started recording with BASSFlag.BASS_SAMPLE_FLOAT
              _waveWriter.Write( buffer, length );
              return true; // always continue recording
            }
            </code>
            <code lang="VB">
            Private _waveWriter As WaveWriter = Nothing ' make it global, so that the GC can not remove it
            Private _myRecProc As RECORDPROC
            Private _recHandle As Integer = 0
            ...
            ' start recording
            _myRecProc = New RECORDPROC(AddressOf MyRecording)
            _recHandle = Bass.BASS_RecordStart(44100, 2, 
                              BASSFlag.BASS_RECORD_PAUSE Or BASSFlag.BASS_SAMPLE_FLOAT, _myRecProc, IntPtr.Zero)
            ' create a WaveWriter using the _recHandle to set the freq. and channels, but write the wave at 24-bit
            _waveWriter = New WaveWriter("test.wav", _recHandle, 24, True)
            Bass.BASS_ChannelPlay(_recHandle, False)
            ...
            ' when finished recording call this!
            If Not (_waveWriter Is Nothing) Then
              ' finilize the wave file!
              _waveWriter.Close()
            End If
            ...
            ' the recording callback
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              ' we will get float sample data here
              ' so make sure the _waveWriter.OrigResolution property is set to 32
              ' this was automatically done, since we started recording with BASSFlag.BASS_SAMPLE_FLOAT
              _waveWriter.Write(buffer, length)
              Return True ' always continue recording
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.Write(System.Single[],System.Int32)">
            <summary>
            Use this method to provide 32-bit sample data to the WaveWriter and write these samples to the wave file.
            </summary>
            <param name="buffer">An array of float values to write to the wave file.</param>
            <param name="length">The number of BYTEs in the buffer.</param>
            <remarks>This method is best used with e.g. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and e.g. decoding channels.
            <para>The data written to the wave file will be in <see cref="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample"/> resolution (as specified in the constructor). 
            If this is not 32 (float) an automatic bit resolution conversion will take place.</para>
            </remarks>
            <example>
            Converting an OGG file to WAV (32-bit quality):
            <code lang="C#">
            // create a stream with the float option
            int stream = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, 
                              BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            // set the target bit resolution to 32
            WaveWriter WW = new WaveWriter("test.wav", stream, 32, true);
            float[] data = new float[32768];
            while (Bass.BASS_ChannelIsActive(stream) == BASSActive.BASS_ACTIVE_PLAYING)
            {
              // get the sample data as float values as well
              int length = Bass.BASS_ChannelGetData(stream, data, 32768);
              // and write the data to the wave file
              if (length > 0)
                WW.Write(data, length);
            }
            // finilize the wave file!
            WW.Close();
            Bass.BASS_StreamFree(stream);
            </code>
            <code lang="VB">
            ' create a stream with the float option
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            ' set the target bit resolution to 32
            Dim WW As New WaveWriter("test.wav", stream, 32, True)
            Dim data(32768 - 1) As Single
            While Bass.BASS_ChannelIsActive(stream) = BASSActive.BASS_ACTIVE_PLAYING
              ' get the sample data as float values as well
              Dim length As Integer = Bass.BASS_ChannelGetData(stream, data, 32768)
              ' and write the data to the wave file
              If length > 0 Then
                WW.Write(data, length)
              End If
            End While
            ' finilize the wave file!
            WW.Close()
            Bass.BASS_StreamFree(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.Write(System.Int16[],System.Int32)">
            <summary>
            Use this method to provide 16-bit sample data to the WaveWriter and write these samples to the wave file.
            </summary>
            <param name="buffer">An array of short values to write to the wave file.</param>
            <param name="length">The number of BYTEs in the buffer.</param>
            <remarks>This method is best used with e.g. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and e.g. decoding channels.
            <para>However, the data written to the wave file will be in <see cref="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample"/> resolution (as specified in the constructor). 
            If this is not 16 (short) an automatic bit resolution conversion will take place.</para>
            </remarks>
            <example>
            Writing a MP3 file to WAV:
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE);
            WaveWriter WW = new WaveWriter("test.wav", stream, true);
            short[] data = new short[32768];
            while (Bass.BASS_ChannelIsActive(stream) == BASSActive.BASS_ACTIVE_PLAYING)
            {
              int length = Bass.BASS_ChannelGetData(stream, data, 32768);
              if (length > 0)
                WW.Write(data, length);
            }
            // finilize the wave file!
            WW.Close();
            Bass.BASS_StreamFree(stream);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE)
            Dim WW As New WaveWriter("test.wav", stream, True)
            Dim data(32768 - 1) As Short
            While Bass.BASS_ChannelIsActive(stream) = BASSActive.BASS_ACTIVE_PLAYING
              Dim length As Integer = Bass.BASS_ChannelGetData(stream, data, 32768)
              If length > 0 Then
                WW.Write(data, length)
              End If
            End While
            ' finilize the wave file!
            WW.Close()
            Bass.BASS_StreamFree(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.Write(System.Byte[],System.Int32)">
            <summary>
            Use this method to provide 8-bit sample data to the WaveWriter and write these samples to the wave file.
            </summary>
            <param name="buffer">An array of byte values to write to the wave file.</param>
            <param name="length">The number of BYTEs in the buffer.</param>
            <remarks>This method is best used with e.g. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and e.g. decoding channels.
            <para>However, the data written to the wave file will be in <see cref="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample"/> resolution (as specified in the constructor). 
            If this is not 8 (byte) an automatic bit resolution conversion will take place.</para>
            </remarks>
            <example>
            Writing an OGG file to WAV (8-bit quality):
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_8BITS);
            WaveWriter WW = new WaveWriter("test.wav", stream, true);
            byte[] data = new byte[32768];
            while (Bass.BASS_ChannelIsActive(stream) == BASSActive.BASS_ACTIVE_PLAYING)
            {
              int length = Bass.BASS_ChannelGetData(stream, data, 32768);
              if (length > 0)
                WW.Write(data, length);
            }
            // finilize the wave file!
            WW.Close();
            Bass.BASS_StreamFree(stream);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_8BITS)
            Dim WW As New WaveWriter("test.wav", stream, True)
            Dim data(32768 - 1) As Byte
            While Bass.BASS_ChannelIsActive(stream) = BASSActive.BASS_ACTIVE_PLAYING
              Dim length As Integer = Bass.BASS_ChannelGetData(stream, data, 32768)
              If length > 0 Then
                WW.Write(data, length)
              End If
            End While
            ' finilize the wave file!
            WW.Close()
            Bass.BASS_StreamFree(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.WriteNoConvert(System.Byte[],System.Int32)">
            <summary>
            Use this method to provide sample data to the WaveWriter and write these samples to the wave file.
            </summary>
            <param name="buffer">An array of byte values to write to the wave file.</param>
            <param name="length">The number of BYTEs in the buffer.</param>
            <remarks>This method is best used with e.g. <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> and e.g. decoding channels.
            <para>However, the data written to the wave file will NOT be converted and must be in the <see cref="P:Un4seen.Bass.Misc.WaveWriter.BitsPerSample"/> resolution (as specified in the constructor).</para>
            </remarks>
            <example>
            Writing an OGG file to WAV (8-bit quality):
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_8BITS);
            WaveWriter WW = new WaveWriter("test.wav", stream, true);
            byte[] data = new byte[32768];
            while (Bass.BASS_ChannelIsActive(stream) == BASSActive.BASS_ACTIVE_PLAYING)
            {
              int length = Bass.BASS_ChannelGetData(stream, data, 32768);
              if (length > 0)
                WW.WriteNoConvert(data, length);
            }
            // finilize the wave file!
            WW.Close();
            Bass.BASS_StreamFree(stream);
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.ogg", 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_8BITS)
            Dim WW As New WaveWriter("test.wav", stream, True)
            Dim data(32768 - 1) As Byte
            While Bass.BASS_ChannelIsActive(stream) = BASSActive.BASS_ACTIVE_PLAYING
              Dim length As Integer = Bass.BASS_ChannelGetData(stream, data, 32768)
              If length > 0 Then
                WW.WriteNoConvert(data, length)
              End If
            End While
            ' finilize the wave file!
            WW.Close()
            Bass.BASS_StreamFree(stream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Misc.WaveWriter.Close">
            <summary>
            Closes the WaveWriter and underlying wave file and updates the wave header accordingly.
            </summary>
            <remarks>After calling this method you might use the created wave file.
            <para>Not closing the WaveWriter will result in a broken wave file, since only at this point the wave header will be updated with the corrent sample size written.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.Bass.Utils">
            <summary>
            BASS.NET API helper and misc. class containing some general useful methods.
            </summary>
            <remarks>Contains basically some generic converter utilities.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Utils.MakeByte(System.Byte,System.Byte)">
            <summary>
            Returns an unsigned byte value which is composed out of a low and high 4-bit.
            </summary>
            <param name="lowBits">The significant part for the lower 4-bit.</param>
            <param name="highBits">The significant part for the higher 4-bit.</param>
            <returns>The combined unsigned byte value.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.MakeWord(System.Byte,System.Byte)">
            <summary>
            Returns an signed Int16 value which is composed out of a low and high byte.
            </summary>
            <param name="lowByte">The significant part for the lower 8-bit.</param>
            <param name="highByte">The significant part for the higher 8-bit.</param>
            <returns>The combined signed Int16 value.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.MakeLong(System.Int16,System.Int16)">
            <summary>
            Returns an signed Int32 value which is composed out of a low and high value.
            </summary>
            <param name="lowWord">The significant part for the lower 16-bit.</param>
            <param name="highWord">The significant part for the higher 16-bit.</param>
            <returns>The combined signed Int32 value.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.MakeLong(System.Int32,System.Int32)">
            <summary>
            Returns an signed Int32 value which is composed out of a low and high value.
            </summary>
            <param name="lowWord">The significant part for the lower 16-bit.</param>
            <param name="highWord">The significant part for the higher 16-bit.</param>
            <returns>The combined signed Int32 value.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.MakeLong64(System.Int32,System.Int32)">
            <summary>
            Returns an signed Int64 value which is composed out of a low and high value.
            </summary>
            <param name="lowWord">The significant part for the lower 16-bit.</param>
            <param name="highWord">The significant part for the higher 16-bit.</param>
            <returns>The combined signed Int64 value.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.MakeLong64(System.Int64,System.Int64)">
            <summary>
            Returns an signed Int64 value which is composed out of a low and high value.
            </summary>
            <param name="lowWord">The significant part for the lower 16-bit.</param>
            <param name="highWord">The significant part for the higher 16-bit.</param>
            <returns>The combined signed Int64 value.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.HighWord(System.Int32)">
            <summary>
            Returns the higher 16-bit of an signed Int32 as a short value.
            </summary>
            <param name="dWord">The signed Int32 value from which to extract the higher significant 16-bit.</param>
            <returns>The higher 16-bit value as a short.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.HighWord32(System.Int32)">
            <summary>
            Returns the higher 16-bit of an signed Int32 as an integer value.
            </summary>
            <param name="dWord">The signed Int32 value from which to extract the higher significant 16-bit.</param>
            <returns>The higher 16-bit value as an integer.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.HighWord(System.Int64)">
            <summary>
            Returns the higher 32-bit of an signed Int64 as an integer value.
            </summary>
            <param name="qWord">The signed Int64 value from which to extract the higher significant 32-bit.</param>
            <returns>The higher 32-bit value as an integer.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.LowWord(System.Int32)">
            <summary>
            Returns the lower 16-bit of an signed Int32 as a short value.
            </summary>
            <param name="dWord">The signed Int32 value from which to extract the lower significant 16-bit.</param>
            <returns>The lower 16-bit value as a short.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.LowWord32(System.Int32)">
            <summary>
            Returns the lower 16-bit of an signed Int32 as an integer value.
            </summary>
            <param name="dWord">The signed Int32 value from which to extract the lower significant 16-bit.</param>
            <returns>The lower 16-bit value as an integer.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.LowWord(System.Int64)">
            <summary>
            Returns the lower 32-bit of an signed Int64 as an integer value
            </summary>
            <param name="qWord">The signed Int64 value from which to extract the lower significant 32-bit.</param>
            <returns>The lower 32-bit value as an integer</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.LevelToDB(System.Int32,System.Int32)">
            <summary>
            Converts any integer level value to its dB value.
            </summary>
            <param name="level">The integer level to convert.</param>
            <param name="maxLevel">The maximum value allowed as an integer level value (e.g. use 32768 for stream levels)</param>
            <returns>The dB value (from 0dB to -infinite).</returns>
            <remarks>If you pass a level greater than maxLevel positive dB values will be returned.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.LevelToDB(System.Double,System.Double)">
            <summary>
            Converts any level value to its dB value.
            </summary>
            <param name="level">The level to convert, as a double value.</param>
            <param name="maxLevel">The maximum value allowed as a double level value (e.g. use 32768.0 for 16-bit stream levels or use 1.0 for 32-bit floating streams).</param>
            <returns>The dB value (from 0dB to -infinite).</returns>
            <remarks>If you pass a level greater than maxLevel positive dB values will be returned.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DBToLevel(System.Double,System.Int32)">
            <summary>
            Converts any dB level value to its level value (integer).
            </summary>
            <param name="dB">The dB level to convert.</param>
            <param name="maxLevel">The maximum value allowed as an integer level value (e.g. use 32768 for stream levels)</param>
            <returns>The integer level value (from 0 to maxLevel).</returns>
            <remarks>If you pass a positive dB value then the return value will be greater than maxLevel.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DBToLevel(System.Double,System.Double)">
            <summary>
            Converts any dB level value to its level value (double).
            </summary>
            <param name="dB">The dB level to convert.</param>
            <param name="maxLevel">The maximum value allowed as a double level value (e.g. use 1.0 for floating-point stream levels)</param>
            <returns>The double level value (from 0 to maxLevel).</returns>
            <remarks>If you pass a positive dB value then the return value will be greater than maxLevel.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.FixTimespan(System.Double)">
            <summary>
            Converts a second value as reveived by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(System.Int32,System.Int64)"/> to a string representation.
            </summary>
            <param name="seconds">A value representing seconds.</param>
            <returns>The seconds as a string in the format: [-][d.]hh:mm:ss[.ff]</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.FixTimespan(System.Double,System.String)">
            <summary>
            Converts a second value as reveived by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(System.Int32,System.Int64)"/> to a string representation.
            </summary>
            <param name="seconds">A value representing seconds.</param>
            <param name="format">One of the following constants:
            <list type="table">
            <item><term>HHMM</term><description></description>hours:minutes, e.g. 00:03</item>
            <item><term>HHMMSS</term><description>hours:minutes:seconds, e.g. 00:03:17</description></item>
            <item><term>MMSS</term><description>minutes:seconds, e.g. 03:17</description></item>
            <item><term>MMSSFF</term><description>minutes:seconds.milliseconds, e.g. 03:17.25</description></item>
            <item><term>MMSSFFF</term><description>minutes:seconds.milliseconds, e.g. 03:17.257</description></item>
            <item><term>MMSSF</term><description>minutes:seconds.milliseconds, e.g. 03:17.2</description></item>
            <item><term>HHMMSSFF</term><description>hours:minutes:seconds.milliseconds, e.g. 00:03:17.25</description></item>
            <item><term>HHMMSSFFF</term><description>hours:minutes:seconds.milliseconds, e.g. 00:03:17.257</description></item>
            <item><term>HHMMSSF</term><description>hours:minutes:seconds.milliseconds, e.g. 00:03:17.2</description></item>
            <item><term>SMPTE24</term><description>hours:minutes:seconds:frames (with 24fps)</description></item>
            <item><term>SMPTE25</term><description>hours:minutes:seconds:frames (with 25fps)</description></item>
            <item><term>SMPTE30</term><description>hours:minutes:seconds:frames (with 30fps)</description></item>
            <item><term>SMPTE50</term><description>hours:minutes:seconds:frames (with 50fps)</description></item>
            <item><term>SMPTE60</term><description>hours:minutes:seconds:frames (with 60fps)</description></item>
            <item><term>all others</term><description>Will be converted according to the standard DateTimeFormatInfo pattern as specified in the <paramref name="format"/> parameter.</description></item>
            </list>
            </param>
            <returns>The seconds as a string in the given format.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.FFTFrequency2Index(System.Int32,System.Int32,System.Int32)">
            <summary>
            Returns the index of a specific frequency for FFT data.
            </summary>
            <param name="frequency">The frequency (in Hz) for which to get the index.</param>
            <param name="length">The FFT data length (e.g. 4096 for BASS_DATA_FFT4096).</param>
            <param name="samplerate">The sampling rate of the device or stream (e.g. 44100).</param>
            <returns>The index within the FFT data array (max. to length/2 -1).</returns>
            <remarks>Example: If the stream is 44100Hz, then 16500Hz will be around bin 191 of a 512 sample FFT (512*16500/44100).
            Or, if you are using BASS_DATA_FFT4096 on a stream with a sample rate of 44100 a tone at 540Hz will be at: 540*4096/44100 = 50 (so a bit of the energy will be in fft[51], but mostly in fft[50]).
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.FFTIndex2Frequency(System.Int32,System.Int32,System.Int32)">
            <summary>
            Returns the frequency of a specific index in FFT data.
            </summary>
            <param name="index">The index within the FFT data array (half the requested).</param>
            <param name="length">The FFT data length (e.g. 4096 for BASS_DATA_FFT4096).</param>
            <param name="samplerate">The sampling rate of the device or stream (e.g. 44100).</param>
            <returns>The frequency (in Hz) which is represented by the index.</returns>
            <remarks>Example: If the stream is 44100Hz, then bin 191 of a 512 sample FFT (191*44100/512) will represent 16451Hz.
            Or, if you are using BASS_DATA_FFT4096 on a stream with a sample rate of 44100 an index of 50 will represent a tone of 538Hz: 50*44100/4096 = 50.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo8Bit(System.Byte)">
            <summary>
            Converts an 8-bit unsigned sample to an unsigned 8-bit sample.
            </summary>
            <param name="sample">The unsigned 8-bit sample to convert.</param>
            <returns>A byte array representing the converted 8-bit unsigned sample (byte[1]).</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo8Bit(System.Int16)">
            <summary>
            Converts a 16-bit signed sample to an 8-bit unsigned sample.
            </summary>
            <param name="sample">The 16-bit signed sample to convert.</param>
            <returns>A byte array representing the converted 8-bit sample (byte[1]).</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo8Bit(System.Single)">
            <summary>
            Converts a float 32-bit signed sample to an 8-bit unsigned sample.
            </summary>
            <param name="sample">The 32-bit signed sample to convert.</param>
            <returns>A byte array representing the converted 8-bit unsigned sample (byte[1]).</returns>
            <remarks>Note: values greater 1.0 or less than -1.0 are capped.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo16Bit(System.Byte)">
            <summary>
            Converts an 8-bit unsigned sample to a 16-bit signed sample.
            </summary>
            <param name="sample">The 8-bit unsigned sample to convert.</param>
            <returns>A byte array representing the converted 16-bit signed sample (byte[2]).</returns>
            <remarks>The byte order is represented in the "Little Endian" format as saved on Intel platforms (meaning lower byte first, the LSB is stored at index 0).
            If you need a "Big Endian" format just traverse the array from the back.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo16Bit(System.Int16)">
            <summary>
            Converts a 16-bit signed sample to a 16-bit signed sample.
            </summary>
            <param name="sample">The 16-bit signed sample to convert.</param>
            <returns>A byte array representing the converted 16-bit signed sample (byte[2]).</returns>
            <remarks>The byte order is represented in the "Little Endian" format as saved on Intel platforms (meaning lower byte first, the LSB is stored at index 0).
            If you need a "Big Endian" format just traverse the array from the back.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo16Bit(System.Single)">
            <summary>
            Converts a float 32-bit signed sample to a 16-bit signed sample.
            </summary>
            <param name="sample">The 32-bit signed sample to convert.</param>
            <returns>A byte array representing the converted 16-bit signed sample (byte[2]).</returns>
            <remarks>The byte order is represented in the "Little Endian" format as saved on Intel platforms (meaning lower byte first, the LSB is stored at index 0).
            If you need a "Big Endian" format just traverse the array from the back.
            <para>Note: values greater 1.0 or less than -1.0 are capped.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo24Bit(System.Byte)">
            <summary>
            Converts an 8-bit unsigned sample to a 24-bit signed sample.
            </summary>
            <param name="sample">The 8-bit unsigned sample to convert.</param>
            <returns>A byte array representing the converted 24-bit signed sample (byte[3]).</returns>
            <remarks>The byte order is represented in the "Little Endian" format as saved on Intel platforms (meaning lower byte first, the LSB is stored at index 0).
            If you need a "Big Endian" format just traverse the array from the back.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo24Bit(System.Int16)">
            <summary>
            Converts a 16-bit signed sample to a 24-bit signed sample.
            </summary>
            <param name="sample">The 16-bit signed sample to convert.</param>
            <returns>A byte array representing the converted 24-bit signed sample (byte[3]).</returns>
            <remarks>The byte order is represented in the "Little Endian" format as saved on Intel platforms (meaning lower byte first, the LSB is stored at index 0).
            If you need a "Big Endian" format just traverse the array from the back.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo24Bit(System.Single)">
            <summary>
            Converts a float 32-bit signed sample to a 24-bit signed sample.
            </summary>
            <param name="sample">The 32-bit signed sample to convert.</param>
            <returns>A byte array representing the converted 24-bit signed sample (byte[3]).</returns>
            <remarks>The byte order is represented in the "Little Endian" format as saved on Intel platforms (meaning lower byte first, the LSB is stored at index 0).
            If you need a "Big Endian" format just traverse the array from the back.
            <para>Note: values greater 1.0 or less than -1.0 are capped.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo32Bit(System.Byte)">
            <summary>
            Converts an 8-bit unsigned sample to a float 32-bit signed sample.
            </summary>
            <param name="sample">The 8-bit unsigned sample to convert.</param>
            <returns>A float 32-bit signed value representing the converted 8-bit unsigned sample.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo32Bit(System.Int16)">
            <summary>
            Converts a 16-bit signed sample to a float 32-bit signed sample.
            </summary>
            <param name="sample">The 16-bit signed sample to convert.</param>
            <returns>A float 32-bit signed value representing the converted 16-bit signed sample.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo32Bit(System.Byte[])">
            <summary>
            Converts a byte array (in "Little Endian" notation) to a float 32-bit signed sample.
            </summary>
            <param name="sample">The byte array sample to convert (must by in "Little Endian", low byte first notation).</param>
            <returns>A float 32-bit signed value representing the converted sample.</returns>
            <remarks>The length of the byte array determines the value to convert. A length of 1 will be treated as an 8-bit sample, a length of 2 will be treated as a 16-bit sample, a length of 3 will be treated as a 24-bit sample etc.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo24Bit(System.Byte[])">
            <summary>
            Converts a byte array (in "Little Endian" notation) to a 24-bit signed sample.
            </summary>
            <param name="sample">The byte array sample to convert (must by in "Little Endian", low byte first notation).</param>
            <returns>A int 24-bit signed value representing the converted sample.</returns>
            <remarks>The length of the byte array must be at least 3 (however only the last 3 elements are evaluated).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo16Bit(System.Byte[])">
            <summary>
            Converts a byte array (in "Little Endian" notation) to a 16-bit signed sample.
            </summary>
            <param name="sample">The byte array sample to convert (must by in "Little Endian", low byte first notation).</param>
            <returns>A short 16-bit signed value representing the converted sample.</returns>
            <remarks>The length of the byte array must be at least 2 (however only the last 2 elements are evaluated).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleTo8Bit(System.Byte[])">
            <summary>
            Converts a byte array (in "Little Endian" notation) to an 8-bit unsigned sample.
            </summary>
            <param name="sample">The byte array sample to convert (must by in "Little Endian", low byte first notation).</param>
            <returns>A byte 8-bit unsigned value representing the converted sample.</returns>
            <remarks>The length of the byte array must be at least 1 (however only the last element is evaluated).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.Semitone2Samplerate(System.Single,System.Int32)">
            <summary>
            Calculates a new samplerate according to a shift of an original samplerate by a number of semitones.
            </summary>
            <remarks>A semitone, or half-step is a musical interval. An octave is 12 semitones wide.
            Changing a samplerate in semitones will result in faster resp. slower playback - speed.</remarks>
            <param name="origfreq">The original samplerate which should be changed.</param>
            <param name="semitones">The number of semitones for which the original samplerate should be changed (negative values will slow down, positve numbers will fasten).</param>
            <returns>The resulting samplerate which was changed by the number of given semitones.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.BPM2Seconds(System.Single)">
            <summary>
            Calculates the length of one beat for a given BPM value.
            </summary>
            <param name="bpm">The BPM value to translate.</param>
            <returns>The length in seconds of one beat (or -1 if bpm is zero).</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.Seconds2BPM(System.Double)">
            <summary>
            Calculates the BPM value which represented the given length for one beat.
            </summary>
            <param name="seconds">The length of one beat in seconds.</param>
            <returns>The translated BPM value (or -1 if seconds is zero).</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.ByteToHex(System.Byte[])">
            <summary>
            Converts a byte array to a hex string.
            </summary>
            <param name="buffer">The buffer to convert.</param>
            <returns>The converted hex string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.HexToByte(System.String,System.Int32)">
            <summary>
            Converts a hex string to a byte array.
            </summary>
            <param name="hexString">The hex string to convert in the format 'XX XX XX... XX'.</param>
            <param name="length">The length of the resulting string (use -1 to convert all).</param>
            <returns>The converted byte array.</returns>
            <remarks>
            If <paramref name="length"/> specifies more elements than contained in the <paramref name="hexString"/>
            the resulting byte array will be padded by zeros.
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.Utils.Is64Bit">
            <summary>
            Returns <see langword="true"/>, if running in a 64-bit environment - else false (32-bit).
            </summary>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrAsStringAnsi(System.IntPtr)">
            <summary>
            Translates an IntPtr into a .NET managed string.
            <para>Sometime BASS returns an IntPtr which actually represents a pointer to a memory block containing a null-terminated Ansi *char (string, 8-bit).
            This method does this translation for you and returns the actual string.</para>
            </summary>
            <param name="ansiPtr">The IntPtr which represents the address of the first character of the unmanaged *char (string, 8-bit).</param>
            <returns>The translated unicode string.</returns>
            <remarks>This method actually expands the original 8-bit chars to unicode 16-bit chars as required by .NET (since here each string a unicode ;-).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrAsStringAnsi(System.IntPtr,System.Int32)">
            <summary>
            Translates an IntPtr into a .NET managed string.
            <para>Sometime BASS returns an IntPtr which actually represents a pointer to a memory block containing a null-terminated Ansi *char (string, 8-bit).
            This method does this translation for you and returns the actual string.</para>
            </summary>
            <param name="ansiPtr">The IntPtr which represents the address of the first character of the unmanaged *char (string, 8-bit).</param>
            <param name="len">The number of bytes to decode.</param>
            <returns>The translated unicode string.</returns>
            <remarks>This method actually expands the original 8-bit chars to unicode 16-bit chars as required by .NET (since here each string a unicode ;-).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrAsStringUnicode(System.IntPtr)">
            <summary>
            Translates an IntPtr into a .NET managed string.
            <para>Sometime BASS returns an IntPtr which actually represents a pointer to a memory block containing a null-terminated Unicode *char (string, 16-bit).
            This method does this translation for you and returns the actual string.</para>
            </summary>
            <param name="unicodePtr">The IntPtr which represents the address of the first character of the unmanaged *char (string, 16-bit).</param>
            <returns>The translated unicode string.</returns>
            <remarks>This method actually expands the original chars to unicode 16-bit chars as required by .NET (since here each string a unicode ;-).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrAsStringUnicode(System.IntPtr,System.Int32)">
            <summary>
            Translates an IntPtr into a .NET managed string.
            <para>Sometime BASS returns an IntPtr which actually represents a pointer to a memory block containing a null-terminated Unicode *char (string, 16-bit).
            This method does this translation for you and returns the actual string.</para>
            </summary>
            <param name="unicodePtr">The IntPtr which represents the address of the first character of the unmanaged *char (string, 16-bit).</param>
            <param name="len">The number of bytes to decode.</param>
            <returns>The translated unicode string.</returns>
            <remarks>This method actually expands the original chars to unicode 16-bit chars as required by .NET (since here each string a unicode ;-).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrAsStringLatin1(System.IntPtr,System.Int32@)">
            <summary>
            Translates an IntPtr into a .NET managed string.
            <para>Sometime BASS returns an IntPtr which actually represents a pointer to a memory block containing a null-terminated Latin-1 (ISO-8859-1) *char (string, 8-bit).
            This method does this translation for you and returns the actual string.</para>
            </summary>
            <param name="latin1Ptr">The IntPtr which represents the address of the first character of the unmanaged *char (string, Latin-1, 8-bit).</param>
            <param name="len">Returns the number of bytes read (the length of the decoded string).</param>
            <returns>The translated unicode string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrAsStringUtf8orLatin1(System.IntPtr,System.Int32@)">
            <summary>
            Translates an IntPtr into a .NET managed string.
            <para>Sometime BASS returns an IntPtr which actually represents a pointer to a memory block containing either a null-terminated UTF-8 or Latin-1 *char (string, 8-bit).
            This method does this translation for you and returns the actual string.</para>
            </summary>
            <param name="utf8Ptr">The IntPtr which represents the address of the first character of the unmanaged *char (string, Latin-1 or UTF-8, 8-bit).</param>
            <param name="len">Returns the number of bytes read (the length of the decoded string).</param>
            <returns>The translated unicode string.</returns>
            <remarks>
            Actually this method tries to encode the pointer to both UTF-8 and Latin-1.
            It returns the UTF-8 string if it is valid and shorter as it's Latin-1 counterpart.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrAsStringUtf8(System.IntPtr,System.Int32@)">
            <summary>
            Translates an IntPtr into a .NET managed string.
            <para>Sometime BASS returns an IntPtr which actually represents a pointer to a memory block containing a null-terminated UTF-8 *char (string, 8-bit).
            This method does this translation for you and returns the actual string.</para>
            </summary>
            <param name="utf8Ptr">The IntPtr which represents the address of the first character of the unmanaged *char (string, UTF-8, 8-bit).</param>
            <param name="len">Returns the number of bytes read (the length of the decoded string).</param>
            <returns>The translated unicode string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrAsStringUtf8(System.IntPtr)">
            <summary>
            Translates an IntPtr into a .NET managed string.
            <para>Sometime BASS returns an IntPtr which actually represents a pointer to a memory block containing a null-terminated UTF-8 *char (string, 8-bit).
            This method does this translation for you and returns the actual string.</para>
            </summary>
            <param name="utf8Ptr">The IntPtr which represents the address of the first character of the unmanaged *char (string, UTF-8, 8-bit).</param>
            <returns>The translated unicode string.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntAsObject(System.IntPtr,System.Type)">
            <summary>
            Translates an IntPtr into a .NET managed object of a given <see cref="T:System.Type"/>.
            <para>Sometime BASS returns a pointer which actually represents a memory block containing a structured object.
            This method does this translation for you and returns the actual object.</para>
            </summary>
            <param name="ptr">The pointer which represents the address of the structured object.</param>
            <param name="structureType">The <see cref="T:System.Type"/> of object to be created. This type object must represent a formatted class or structure.</param>
            <returns>The managed object of the specified type.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetVersion">
            <summary>
            Returns the version of the BASS.NET API (Bass.Net.dll)
            </summary>
            <returns>The version of the Bass.Net.dll</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrToArrayNullTermAnsi(System.IntPtr)">
            <summary>
            Retrieves an array of strings from a given unmanaged memory location.
            <para>NOTE: This method evaluates the pointer as 'a series/array of null-terminated Ansi strings.</para>
            </summary>
            <param name="pointer">The pointer to the unmanaged memory block.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one text as obtained from the IntPtr.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrToArrayNullTermUtf8(System.IntPtr)">
            <summary>
            Retrieves an array of strings from a given unmanaged memory location.
            <para>NOTE: This method evaluates the pointer as 'a series/array of null-terminated UTF-8 strings.</para>
            </summary>
            <param name="pointer">The pointer to the unmanaged memory block.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one text as obtained from the IntPtr.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrToArrayNullTermUnicode(System.IntPtr)">
            <summary>
            Retrieves an array of strings from a given unmanaged memory location.
            <para>NOTE: This method evaluates the pointer as 'a series/array of null-terminated UNICODE strings.</para>
            </summary>
            <param name="pointer">The pointer to the unmanaged memory block.</param>
            <returns><see langword="null"/> or an array of strings. Each array element will represent one text as obtained from the IntPtr.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrToArrayNullTermInt32(System.IntPtr)">
            <summary>
            Retrieves an array of int from a given unmanaged memory location.
            <para>NOTE: This method evaluates the pointer as 'a series/array of Int32 values terminated by a 0 value.</para>
            </summary>
            <param name="pointer">The pointer to the unmanaged memory block.</param>
            <returns><see langword="null"/> or an array of int. Each array element will represent one Int32 value as obtained from the IntPtr.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.IntPtrToArrayNullTermInt16(System.IntPtr)">
            <summary>
            Retrieves an array of int from a given unmanaged memory location.
            <para>NOTE: This method evaluates the pointer as 'a series/array of Int16 values terminated by a 0 value.</para>
            </summary>
            <param name="pointer">The pointer to the unmanaged memory block.</param>
            <returns><see langword="null"/> or an array of int. Each array element will represent one Int16 value as obtained from the IntPtr.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.StringToNullTermAnsi(System.String,System.IntPtr)">
            <summary>
            Copies the contents of a managed string into unmanaged memory, 
            converting into ANSI format as it copies and appends a null-terminator.
            </summary>
            <param name="text">The managed string to copy to <paramref name="target"/>.</param>
            <param name="target">The address, in unmanaged memory, to where <paramref name="text"/> should be copied.</param>
        </member>
        <member name="M:Un4seen.Bass.Utils.StringToNullTermUnicode(System.String,System.IntPtr)">
            <summary>
            Copies the contents of a managed string into unmanaged memory 
            and appends a null-terminator.
            </summary>
            <param name="text">The managed string to copy to <paramref name="target"/>.</param>
            <param name="target">The address, in unmanaged memory, to where <paramref name="text"/> should be copied.</param>
        </member>
        <member name="M:Un4seen.Bass.Utils.StringToNullTermUtf8(System.String,System.IntPtr)">
            <summary>
            Copies the contents of a managed string into unmanaged memory, 
            converting into UFT-8 format as it copies and appends a null-terminator.
            </summary>
            <param name="text">The managed string to copy to <paramref name="target"/>.</param>
            <param name="target">The address, in unmanaged memory, to where <paramref name="text"/> should be copied.</param>
        </member>
        <member name="M:Un4seen.Bass.Utils.StringToNullTermAnsi(System.String[],System.IntPtr,System.Boolean)">
            <summary>
            Copies the contents of a managed string array into unmanaged memory, 
            converting each element into ANSI format as it copies and appends a null-terminator.
            </summary>
            <param name="text">The managed string array to copy to <paramref name="target"/>.</param>
            <param name="target">The address, in unmanaged memory, to where <paramref name="text"/> should be copied.</param>
            <param name="addCRLF">Add a carriage return and line feed (&quot;\r\n&quot;) to each string element if missing?</param>
            <remarks>An additional final null-terminator is added as well, so that the last element will end with
             a double null-terminator.
             Note, that empty string array elements will be skipped.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.StringToNullTermUnicode(System.String[],System.IntPtr,System.Boolean)">
            <summary>
            Copies the contents of a managed string array into unmanaged memory
            and appends a null-terminator.
            </summary>
            <param name="text"></param>
            <param name="target"></param>
            <param name="addCRLF"></param>
            <remarks>An additional final null-terminator is added as well, so that the last element will end with a 
             a double null-terminator.
             Note, that empty array elements will be skipped.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.StringToNullTermUtf8(System.String[],System.IntPtr,System.Boolean)">
            <summary>
            Copies the contents of a managed string array into unmanaged memory, 
            converting each element into UTF-8 format as it copies and appends a null-terminator.
            </summary>
            <param name="text">The string array</param>
            <param name="target"></param>
            <param name="addCRLF"></param>
            <remarks>An additional final null-terminator is added as well, so that the last element will end with a 
             a double null-terminator.
             Note, that empty array elements will be skipped.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.ChannelNumberToString(System.Int32)">
            <summary>
            Converts a channel number to a string.
            </summary>
            <param name="chans">The number of channels.</param>
            <returns>The description of number of channels.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSChannelTypeToString(Un4seen.Bass.BASSChannelType)">
            <summary>
            Converts a <see cref="T:Un4seen.Bass.BASSChannelType"/> to a character representation describing the channel type or file type. Returns e.g. 'WMA', 'FLAC', 'MP3' etc.
            </summary>
            <param name="ctype">The <see cref="T:Un4seen.Bass.BASSChannelType"/> for which to get the description.</param>
            <returns>The description of the channel type.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSTagTypeToString(Un4seen.Bass.BASSTag)">
            <summary>
            Converts a <see cref="T:Un4seen.Bass.BASSTag"/> to a character representation describing the tag type. Returns e.g. 'ID3v1', 'ID3v2', 'WMA', 'APE' etc.
            </summary>
            <param name="tagType">The <see cref="T:Un4seen.Bass.BASSTag"/> for which to get the description.</param>
            <returns>The description of the tag type.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileExtensions(System.String)">
            <summary>
            Returns the supported stream file extensions of the given add-on file (e.g. "bassflac.dll").
            <para>Use <see langword="null"/> to retrieve the native supported stream file extensions of Bass.</para>
            <para>Use "music" to retrive the native supported music file extensions of Bass.</para>
            </summary>
            <param name="file">The file name and/or path of the bass add-on dll from which to retrieve the supported file extensions (or <see langword="null"/> or "music").</param>
            <returns>A list of supported file extensions (pattern-like, semicolon-seperated, e.g. "*.wma;*.wmv").</returns>
            <remarks>
            Note: This list reports a set of file extensions which might be supported.
            There is no guarantee that the list is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileName(System.String)">
            <summary>
            Returns the supported stream file name of the given add-on file (e.g. "bassflac.dll").
            <para>Use <see langword="null"/> to retrieve the native supported stream file name of Bass.</para>
            <para>Use "music" to retrive the native supported music name of Bass.</para>
            </summary>
            <param name="file">The file name and/or path of the bass add-on dll from which to retrieve the supported file name (or <see langword="null"/> or "music").</param>
            <returns>The name of the supported audio format (e.g. "Windows Media Audio").</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileExtensions(System.Collections.Generic.Dictionary{System.Int32,System.String},System.Boolean)">
            <summary>
            Returns the supported stream file extensions for all loaded plugins.
            </summary>
            <param name="plugins">The hash table as returned by the <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoadDirectory(System.String)"/> method.</param>
            <param name="includeBASS"><see langword="true"/>, if also the native BASS formats should be added.</param>
            <returns>The supported stream file extension string (*.ext1;*.ext2;...*.extN)</returns>
            <remarks>This method uses <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileExtensions(System.String)"/> internally and might include all native BASS extensions.
            <para>Note: This list reports a set of file extensions which might be supported.
            There is no guarantee that the list is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).</para>
            </remarks>
            <example>
            <code lang="C#">
            Dictionary&lt;int, string&gt; loadedPlugIns = Bass.BASS_PluginLoadDirectory(dir);
            string exts = Utils.BASSAddOnGetSupportedFileExtensions(loadedPlugIns, true);
            </code>
            <code lang="VB">
            Dim loadedPlugIns As Dictionary(Of Integer, String) = Bass.BASS_PluginLoadDirectory(dir)
            Dim exts As String = Utils.BASSAddOnGetSupportedFileExtensions(loadedPlugIns, True)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileFilter(System.Collections.Generic.Dictionary{System.Int32,System.String},System.String)">
            <summary>
            Returns a file filter which can be used in a standard 'OpenFileDialog'.
            </summary>
            <param name="plugins">The hash table as returned by the <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoadDirectory(System.String)"/> method.</param>
            <param name="allFormatName">The name of the first entry which will describe all available formats. Or <see langword="null"/>, if only the plain formats should be returned.</param>
            <returns>The file filter string which can be used in a standard 'OpenFileDialog' in the format:
            allFormatName|AllExtensions|FormatName1|externtions1|FormatName2|externtions2...</returns>
            <remarks>This method uses <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileName(System.String)"/> and <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileExtensions(System.String)"/> internally and also includes all native BASS formats.
            <para>Note: This list reports a set of file extensions which might be supported.
            There is no guarantee that the list is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).</para>
            </remarks>
            <example>
            <code lang="C#">
            Dictionary&lt;int, string&gt; loadedPlugIns = Bass.BASS_PluginLoadDirectory(dir);
            openFileDialog.Filter = Utils.BASSAddOnGetSupportedFileFilter(loadedPlugIns, "All supported Audio Files");
            </code>
            <code lang="VB">
            Dim loadedPlugIns As Dictionary(Of Integer, String) = Bass.BASS_PluginLoadDirectory(dir)
            openFileDialog.Filter = Utils.BASSAddOnGetPluginFileFilter(loadedPlugIns, "All supported Audio Files")
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileFilter(System.Collections.Generic.Dictionary{System.Int32,System.String},System.String,System.Boolean)">
            <summary>
            Returns a file filter which can be used in a standard 'OpenFileDialog'.
            </summary>
            <param name="plugins">The hash table as returned by the <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoadDirectory(System.String)"/> method.</param>
            <param name="allFormatName">The name of the first entry which will describe all available formats. Or <see langword="null"/>, if only the plain formats should be returned.</param>
            <param name="includeBASS"><see langword="true"/>, if also the native BASS formats should be added.</param>
            <returns>The file filter string which can be used in a standard 'OpenFileDialog' in the format:
            allFormatName|AllExtensions|FormatName1|externtions1|FormatName2|externtions2...</returns>
            <remarks>This method uses <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileName(System.String)"/> and <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileExtensions(System.String)"/> internally.
            <para>Note: This list reports a set of file extensions which might be supported.
            There is no guarantee that the list is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).</para>
            </remarks>
            <example>
            <code lang="C#">
            Dictionary&lt;int, string&gt; loadedPlugIns = Bass.BASS_PluginLoadDirectory(dir);
            openFileDialog.Filter = Utils.BASSAddOnGetSupportedFileFilter(loadedPlugIns, null, false);
            </code>
            <code lang="VB">
            Dim loadedPlugIns As Dictionary(Of Integer, String) = Bass.BASS_PluginLoadDirectory(dir)
            openFileDialog.Filter = Utils.BASSAddOnGetPluginFileFilter(loadedPlugIns, Nothing, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileFilter(System.Collections.Generic.Dictionary{System.Int32,System.String},System.String,System.Boolean,System.Collections.Generic.Dictionary{System.String,System.String})">
            <summary>
            Returns a file filter which can be used in a standard 'OpenFileDialog'.
            </summary>
            <param name="plugins">The hash table as returned by the <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoadDirectory(System.String)"/> method.</param>
            <param name="allFormatName">The name of the first entry which will describe all available formats. Or <see langword="null"/>, if only the plain formats should be returned.</param>
            <param name="includeBASS"><see langword="true"/>, if also the native BASS formats should be added.</param>
            <param name="extra">A list of additional filter entries to add (key=name; value=extension; e.g. 'Playlist' - '*.pls').</param>
            <returns>The file filter string which can be used in a standard 'OpenFileDialog' in the format:
            allFormatName|AllExtensions|FormatName1|externtions1|FormatName2|externtions2...</returns>
            <remarks>This method uses <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileName(System.String)"/> and <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileExtensions(System.String)"/> internally.
            <para>Note: This list reports a set of file extensions which might be supported.
            There is no guarantee that the list is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSAddOnGetPluginFileFilter(System.Collections.Generic.Dictionary{System.Int32,System.String},System.String)">
            <summary>
            Returns a file filter which can be used in a standard 'OpenFileDialog'.
            </summary>
            <param name="plugins">The hash table as returned by the <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoadDirectory(System.String)"/> method.</param>
            <param name="allFormatName">The name of the first entry which will describe all available formats. Or <see langword="null"/>, if only the plain formats should be returned.</param>
            <returns>The file filter string which can be used in a standard 'OpenFileDialog' in the format:
            allFormatName|AllExtensions|FormatName1|externtions1|FormatName2|externtions2...</returns>
            <remarks>This method uses <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)"/> and <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileExtensions(System.String)"/> internally and also includes all native BASS formats.
            <para>Note: This list reports a set of file extensions which might be supported.
            There is no guarantee that the list is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).</para>
            </remarks>
            <example>
            <code lang="C#">
            Dictionary&lt;int, string&gt; loadedPlugIns = Bass.BASS_PluginLoadDirectory(dir);
            openFileDialog.Filter = Utils.BASSAddOnGetPluginFileFilter(loadedPlugIns, "All supported Audio Files");
            </code>
            <code lang="VB">
            Dim loadedPlugIns As Dictionary(Of Integer, String) = Bass.BASS_PluginLoadDirectory(dir)
            openFileDialog.Filter = Utils.BASSAddOnGetPluginFileFilter(loadedPlugIns, "All supported Audio Files")
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSAddOnGetPluginFileFilter(System.Collections.Generic.Dictionary{System.Int32,System.String},System.String,System.Boolean)">
            <summary>
            Returns a file filter which can be used in a standard 'OpenFileDialog'.
            </summary>
            <param name="plugins">The hash table as returned by the <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoadDirectory(System.String)"/> method.</param>
            <param name="allFormatName">The name of the first entry which will describe all available formats. Or <see langword="null"/>, if only the plain formats should be returned.</param>
            <param name="includeBASS"><see langword="true"/>, if also the native BASS formats should be added.</param>
            <returns>The file filter string which can be used in a standard 'OpenFileDialog' in the format:
            allFormatName|AllExtensions|FormatName1|externtions1|FormatName2|externtions2...</returns>
            <remarks>This method uses <see cref="M:Un4seen.Bass.Bass.BASS_PluginGetInfo(System.Int32)"/> and <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileExtensions(System.String)"/> internally.
            <para>Note: This list reports a set of file extensions which might be supported.
            There is no guarantee that the list is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).</para>
            </remarks>
            <example>
            <code lang="C#">
            Dictionary&lt;int, string&gt; loadedPlugIns = Bass.BASS_PluginLoadDirectory(dir);
            openFileDialog.Filter = Utils.BASSAddOnGetPluginFileFilter(loadedPlugIns, null, false);
            </code>
            <code lang="VB">
            Dim loadedPlugIns As Dictionary(Of Integer, String) = Bass.BASS_PluginLoadDirectory(dir)
            openFileDialog.Filter = Utils.BASSAddOnGetPluginFileFilter(loadedPlugIns, Nothing, False)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.Utils.BASSAddOnIsFileSupported(System.Collections.Generic.Dictionary{System.Int32,System.String},System.String)">
            <summary>
            Checks if a certain file is supported by the currently loaded add-ons.
            </summary>
            <param name="plugins">The hash table as returned by the <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoadDirectory(System.String)"/> method or <see langword="null"/> to only check BASS extensions.</param>
            <param name="filename">The audio filename to check,</param>
            <returns><see langword="true"/>, if the audio file is supported by any of the loaded plugins.</returns>
            <remarks>This method uses <see cref="M:Un4seen.Bass.Utils.BASSAddOnGetSupportedFileExtensions(System.String)"/> internally.
            <para>Note: There is no guarantee that the check is complete or might contain formats not being supported on your particular OS/machine (due to additional or missing audio codecs).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.AbsSignMax(System.Int16,System.Int16)">
            <summary>
            Returns the absolute signed maximum value of two values.
            </summary>
            <param name="val1">The first value to compare.</param>
            <param name="val2">The second value to compare.</param>
            <returns>The signed value of the parameter whose absolute value is greater.</returns>
            <remarks>The two values are compared by their absolute unsigned value but are returned with their signed value.
            E.g. -10000 will be returned by comparing -10000 and +8000.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.AbsSignMax(System.Single,System.Single)">
            <summary>
            Returns the absolute signed maximum value of two values.
            </summary>
            <param name="val1">The first value to compare.</param>
            <param name="val2">The second value to compare.</param>
            <returns>The signed value of the parameter whose absolute value is greater.</returns>
            <remarks>The two values are compared by their absolute unsigned value but are returned with their signed value.
            E.g. -10000 will be returned by comparing -10000 and +8000.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.SampleDither(System.Double,System.Double,System.Double)">
            <summary>
            Applies a dither to a single sample value.
            </summary>
            <param name="sample">The sample data to add a dither to (e.g. an 8- or 16-bit sample value as a double value).</param>
            <param name="factor">The bit depth factor for the dither (typically between 0.3 and 0.9).</param>
            <param name="max">The maximum sample data range (e.g. 256 for 8-bit samples or 32768 for 16-bit samples).</param>
            <returns>The dithered sample value: </returns>
            <remarks>Dithering adds a low level white noise to the sample data before truncating for the purpose of minimizing quantization error.
            <para>Dithering here is implemented as a triangular probability density function (TPDF), actually a factor-bit triangular dither.</para>
            <para>All parameters here are implemented as double values for maximum precision and performance. 
            However, you might also pass 8-bit(byte) or 16-bit(short) values and then simply cast back the return value.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetLevel(System.Int16[],System.Int32,System.Int32,System.Int32)">
            <summary>
            Equivalent to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but with individual offset and length.
            </summary>
            <param name="buffer">The 16-bit buffer to get the level from.</param>
            <param name="chans">The number of channels to use (1=mono, 2=stereo). In case of mono the left and right channel will contain the same value.</param>
            <param name="startIndex">The starting index (sample offset, not byte offset!) within the buffer from where to to get the level (use -1 to start from the beginning).</param>
            <param name="length">Number of samples (not bytes!) to use (startIndex + length must be less than the buffer size, use -1 to scan the whole buffer size).</param>
            <returns>If successful, the level of the left channel is returned in the low word (low 16-bits), and the level of the right channel is returned in the high word (high 16-bits). If the channel is mono, then the low word is duplicated in the high word.</returns>
            <remarks>
            <para>Structure of the return value (int = 32-bit):
            <code lang="none">
            |               32-bit              |
            |    right-peak    |   left-peak    |
            </code>
            </para>
            <para>Each peak level ranges linearly from 0 (silent) to +32767 (max).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetLevel2(System.Int16[],System.Int32,System.Int32,System.Int32)">
            <summary>
            Equivalent to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but with individual offset and length.
            </summary>
            <param name="buffer">The 16-bit buffer to get the level from.</param>
            <param name="chans">The number of channels to use (1=mono, 2=stereo). In case of mono the left and right channel will contain the same value.</param>
            <param name="startIndex">The starting index (sample offset, not byte offset!) within the buffer from where to to get the level (use -1 to start from the beginning).</param>
            <param name="length">Number of samples (not bytes!) to use (startIndex + length must be less than the buffer size, use -1 to scan the whole buffer size).</param>
            <returns>If successful, the level of the left channel is returned in the low Dword (low 32-bits), and the level of the right channel is returned in the high Dword (high 32-bits).
            Each Dword (32-bit) carries the maximum peak level value in the high word (high 16-bit) and the the minimum peak level value in the low word (low 16-bit).
            If the channel is mono, then the low Dword is duplicated in the high Dword.</returns>
            <remarks>
            <para>Structure of one element (long = 64-bit):
            <code lang="none">
            |               64-bit              |
            |      right       |      left      |
            |max.peak|min.peak|max.peak|min.peak|
            </code>
            </para>
            <para>Each peak level ranges linearly from -32768 to 0 (silent) to +32767.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetLevel(System.Single[],System.Int32,System.Int32,System.Int32)">
            <summary>
            Equivalent to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but with individual offset and length.
            </summary>
            <param name="buffer">The 32-bit buffer to get the level from.</param>
            <param name="chans">The number of channels to use (1=mono, 2=stereo). In case of mono the left and right channel will contain the same value.</param>
            <param name="startIndex">The starting index (sample offset, not byte offset!) within the buffer from where to to get the level (use -1 to start from the beginning).</param>
            <param name="length">Number of samples (not bytes!) to use (startIndex + length must be less than the buffer size, use -1 to scan the whole buffer size).</param>
            <returns>If successful, the level of the left channel is returned in the low word (low 16-bits), and the level of the right channel is returned in the high word (high 16-bits). If the channel is mono, then the low word is duplicated in the high word.</returns>
            <remarks>
            <para>Structure of the return value (int = 32-bit):
            <code lang="none">
            |               32-bit              |
            |    right-peak    |   left-peak    |
            </code>
            </para>
            <para>Each peak level ranges linearly from 0 (silent) to +32767 (max).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetLevel2(System.Single[],System.Int32,System.Int32,System.Int32)">
            <summary>
            Equivalent to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but with individual offset and length.
            </summary>
            <param name="buffer">The 32-bit buffer to get the level from.</param>
            <param name="chans">The number of channels to use (1=mono, 2=stereo). In case of mono the left and right channel will contain the same value.</param>
            <param name="startIndex">The starting index (sample offset, not byte offset!) within the buffer from where to to get the level (use -1 to start from the beginning).</param>
            <param name="length">Number of samples (not bytes!) to use (startIndex + length must be less than the buffer size, use -1 to scan the whole buffer size).</param>
            <returns>If successful, the level of the left channel is returned in the low Dword (low 32-bits), and the level of the right channel is returned in the high Dword (high 32-bits).
            Each Dword (32-bit) carries the maximum peak level value in the high word (high 16-bit) and the the minimum peak level value in the low word (low 16-bit).
            If the channel is mono, then the low Dword is duplicated in the high Dword.</returns>
            <remarks>
            <para>Structure of one element (long = 64-bit):
            <code lang="none">
            |               64-bit              |
            |      right       |      left      |
            |max.peak|min.peak|max.peak|min.peak|
            </code>
            </para>
            <para>Each peak level ranges linearly from -32768 to 0 (silent) to +32767.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetLevel(System.Byte[],System.Int32,System.Int32,System.Int32)">
            <summary>
            Equivalent to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but with individual offset and length.
            </summary>
            <param name="buffer">The 8-bit buffer to get the level from.</param>
            <param name="chans">The number of channels to use (1=mono, 2=stereo). In case of mono the left and right channel will contain the same value.</param>
            <param name="startIndex">The starting index (sample offset, not byte offset!) within the buffer from where to to get the level (use -1 to start from the beginning).</param>
            <param name="length">Number of samples (not bytes!) to use (startIndex + length must be less than the buffer size, use -1 to scan the whole buffer size).</param>
            <returns>If successful, the level of the left channel is returned in the low word (low 16-bits), and the level of the right channel is returned in the high word (high 16-bits). If the channel is mono, then the low word is duplicated in the high word.</returns>
            <remarks>
            <para>Structure of the return value (int = 32-bit):
            <code lang="none">
            |               32-bit              |
            |    right-peak    |   left-peak    |
            </code>
            </para>
            <para>Each peak level ranges linearly from 0 (silent) to +32767 (max).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetLevel2(System.Byte[],System.Int32,System.Int32,System.Int32)">
            <summary>
            Equivalent to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but with individual offset and length.
            </summary>
            <param name="buffer">The 8-bit buffer to get the level from.</param>
            <param name="chans">The number of channels to use (1=mono, 2=stereo). In case of mono the left and right channel will contain the same value.</param>
            <param name="startIndex">The starting index (sample offset, not byte offset!) within the buffer from where to to get the level (use -1 to start from the beginning).</param>
            <param name="length">Number of samples (not bytes!) to use (startIndex + length must be less than the buffer size, use -1 to scan the whole buffer size).</param>
            <returns>If successful, the level of the left channel is returned in the low Dword (low 32-bits), and the level of the right channel is returned in the high Dword (high 32-bits).
            Each Dword (32-bit) carries the maximum peak level value in the high word (high 16-bit) and the the minimum peak level value in the low word (low 16-bit).
            If the channel is mono, then the low Dword is duplicated in the high Dword.</returns>
            <remarks>
            <para>Structure of one element (long = 64-bit):
            <code lang="none">
            |               64-bit              |
            |      right       |      left      |
            |max.peak|min.peak|max.peak|min.peak|
            </code>
            </para>
            <para>Each peak level ranges linearly from -32768 to 0 (silent) to +32767.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetLevel(System.IntPtr,System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            Equivalent to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but with individual offset and length.
            </summary>
            <param name="buffer">The buffer pointer to the sample data (e.g. as obtained in a <see cref="T:Un4seen.Bass.DSPPROC"/>).</param>
            <param name="chans">The number of channels to use (1=mono, 2=stereo). In case of mono the left and right channel will contain the same value.</param>
            <param name="bps">The bytes per sample (or bitwidth) - which can be either 1, 2 or 4 bytes per sample or 8, 16 or 32 bits per sample.</param>
            <param name="startIndex">The starting index (sample offset, not byte offset!) within the buffer from where to to get the level (use -1 to start from the beginning).</param>
            <param name="length">Number of samples (not bytes!) to use (startIndex + length must be less than the buffer size) - no range check is applied here!.</param>
            <returns>If successful, the level of the left channel is returned in the low word (low 16-bits), and the level of the right channel is returned in the high word (high 16-bits). If the channel is mono, then the low word is duplicated in the high word.</returns>
            <remarks>
            <para>Structure of the return value (int = 32-bit):
            <code lang="none">
            |               32-bit              |
            |    right-peak    |   left-peak    |
            </code>
            </para>
            <para>Each peak level ranges linearly from 0 (silent) to +32767 (max).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetLevel2(System.IntPtr,System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            Equivalent to <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but with individual offset and length.
            </summary>
            <param name="buffer">The buffer pointer to the sample data (e.g. as obtained in a <see cref="T:Un4seen.Bass.DSPPROC"/>).</param>
            <param name="chans">The number of channels to use (1=mono, 2=stereo). In case of mono the left and right channel will contain the same value.</param>
            <param name="bps">The bytes per sample (or bitwidth) - which can be either 1, 2 or 4 bytes per sample or 8, 16 or 32 bits per sample.</param>
            <param name="startIndex">The starting index (sample offset, not byte offset!) within the buffer from where to to get the level (use -1 to start from the beginning).</param>
            <param name="length">Number of samples (not bytes!) to use (startIndex + length must be less than the buffer size) - no range check is applied here!.</param>
            <returns>If successful, the level of the left channel is returned in the low Dword (low 32-bits), and the level of the right channel is returned in the high Dword (high 32-bits).
            Each Dword (32-bit) carries the maximum peak level value in the high word (high 16-bit) and the the minimum peak level value in the low word (low 16-bit).
            If the channel is mono, then the low Dword is duplicated in the high Dword.</returns>
            <remarks>
            <para>Structure of one element (long = 64-bit):
            <code lang="none">
            |               64-bit              |
            |      right       |      left      |
            |max.peak|min.peak|max.peak|min.peak|
            </code>
            </para>
            <para>Each peak level ranges linearly from -32768 to 0 (silent) to +32767.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DecodeAllData(System.Int32,System.Boolean)">
            <summary>
            Decodes all the available data of the given channel right away.
            </summary>
            <param name="channel">The channel handle who's channel data should be decoded (should typically be a decoding channel).</param>
            <param name="autoFree"><see langword="true"/>, if the channel should be freed (via <see cref="M:Un4seen.Bass.Bass.BASS_StreamFree(System.Int32)"/>) when all the data has been decoded.</param>
            <returns>The total number of bytes actually decoded.</returns>
            <remarks>Internally <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> will be called in a loop as long as the channel is active (BASS_ACTIVE_PLAYING).
            This method might be useful, if you want to quickly decode all the data of the channel to e.g. feed it through a DSP.
            <para>When using with a mixer channel (<see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)"/>) make sure to use the <see cref="F:Un4seen.Bass.BASSFlag.BASS_MIXER_END"/> flag, since otherwise the mixer channel would never end.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DetectCuePoints(System.String,System.Single,System.Double@,System.Double@,System.Double,System.Double,System.Int32)">
            <summary>
            Detects the cue-in and -out points of a given audio file.
            </summary>
            <param name="filename">The audio file to analyze.</param>
            <param name="blockSize">The block-size in seconds which will be used to scan the file (between 0.1 and 30 seconds).</param>
            <param name="cueInPos">Returns the cue-in position in seconds according to <paramref name="dBIn"/>.</param>
            <param name="cueOutPos">Returns the cue-out position in seconds according to <paramref name="dBOut"/>.</param>
            <param name="dBIn">The threshold in dB to be used to detect the <paramref name="cueInPos"/>.</param>
            <param name="dBOut">The threshold in dB to be used to detect the <paramref name="cueOutPos"/>.</param>
            <param name="findZeroCrossing">Position adjustment flag. 0=no adjustment, 1=move to zero-crossing sample to avoid clicks, 2=move to quiter sample (threshold/2) to avoid clicks.</param>
            <returns><see langword="true"/> on success - else <see langword="false"/>.</returns>
            <remarks>If <paramref name="findZeroCrossing"/> is set to 1 the zero-crossing determination will only be performed within the last analyzed <paramref name="blockSize"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DetectCuePoints(System.Int32,System.Single,System.Double@,System.Double@,System.Double,System.Double,System.Int32)">
            <summary>
            Detects the cue-in and -out points of a given decoding stream.
            </summary>
            <param name="decodingStream">The decoding stream to analyze (should be created with the BASS_STREAM_PRESCAN flag).</param>
            <param name="blockSize">The block-size in seconds which will be used to scan the file (between 0.1 and 30 seconds).</param>
            <param name="cueInPos">Returns the cue-in position in seconds according to <paramref name="dBIn"/>.</param>
            <param name="cueOutPos">Returns the cue-out position in seconds according to <paramref name="dBOut"/>.</param>
            <param name="dBIn">The threshold in dB to be used to detect the <paramref name="cueInPos"/>.</param>
            <param name="dBOut">The threshold in dB to be used to detect the <paramref name="cueOutPos"/>.</param>
            <param name="findZeroCrossing">Position adjustment flag. 0=no adjustment, 1=move to zero-crossing sample to avoid clicks, 2=move to quiter sample (threshold/2) to avoid clicks.</param>
            <returns><see langword="true"/> on success - else <see langword="false"/> (Note: <paramref name="decodingStream"/> must be a decoding stream and can not be 0).</returns>
            <remarks>If <paramref name="findZeroCrossing"/> is set to 1 the zero-crossing determination will only be performed within the last analyzed <paramref name="blockSize"/>.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DetectNextLevel(System.Int32,System.Single,System.Double,System.Double,System.Boolean,System.Boolean)">
            <summary>
            Finds the next position with a certain volume level.
            </summary>
            <param name="decodingStream">The decoding stream to analyze (should be created with the BASS_STREAM_PRESCAN flag).</param>
            <param name="blockSize">The block-size in seconds which will be used to scan the file (between 0.1 and 30 seconds).</param>
            <param name="startpos">The position in seconds where to start the search.</param>
            <param name="dB">The threshold in dB (e.g. -12.0dB) which should be searched.</param>
            <param name="reverse">Search forward (<see langword="false"/>) or backward (<see langword="true"/>).</param>
            <param name="findZeroCrossing">If set to <see langword="true"/> the returned position will be adjusted to the next resp. previous zero crossing in order to avoid clicks.</param>
            <returns>The position with the respective volume level (if the level could not be detected, then startpos will be returned).</returns>
            <remarks>As this method calls <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> internally the current position of the <paramref name="decodingStream"/> might be changed.
            So if you need to preserve this position you must remember it before calling this method and set it afterwards yourself (via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetPosition(System.Int32,Un4seen.Bass.BASSMode)"/> and <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetPosition(System.Int32,System.Int64,Un4seen.Bass.BASSMode)"/>).</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.GetNormalizationGain(System.String,System.Single,System.Double,System.Double,System.Single@)">
            <summary>
            Determines a gain factor (normalization), so that the maximum peak level of the stream will be at 0 dB.
            </summary>
            <param name="filename">The audio file to analyze.</param>
            <param name="blockSize">The block-size in seconds which will be used to scan the file (between 0.1 and 30 seconds).</param>
            <param name="startpos">The position (in seconds) where to start the calculation (between 0 and file duration, or -1 to scan from the beginning).</param>
            <param name="endpos">The position (in seconds) til where to perform the calculation (between 0 and file duration, or -1 to scan til the end; must be bigger than startpos).</param>
            <param name="peak">Returns the maximum peak level as a float value between 0.0 (silence) and 1.0 (0dB).</param>
            <returns>The gain factor as a float value (or -1 on error) - a value of 1 means no amplification.</returns>
            <remarks>
            You might use the gain factor as a multiplier to the sample data to apply a volume adjustment, so that the maximum peak level of the audio samples is at 0 dB.
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DMACopyMemory(System.IntPtr,System.IntPtr,System.Int64)">
            <summary>
            DMA (kernel32.dll) - The CopyMemory function copies a block of memory from one location to another.
            </summary>
            <param name="destination">Pointer to the starting address of the copied block's destination.</param>
            <param name="source">Pointer to the starting address of the block of memory to copy.</param>
            <param name="length">Size of the block of memory to copy, in bytes.</param>
            <remarks>If the source and destination blocks overlap, the results are undefined. For overlapped blocks, use the <see cref="M:Un4seen.Bass.Utils.DMAMoveMemory(System.IntPtr,System.IntPtr,System.IntPtr)"/> function.
            <para>CAUTION: This method makes a direct call to the windows kernel.dll - you can crash everything when using it in a wrong way!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DMAMoveMemory(System.IntPtr,System.IntPtr,System.Int64)">
            <summary>
            DMA (kernel32.dll) - The MoveMemory function moves a block of memory from one location to another.
            </summary>
            <param name="destination">Pointer to the starting address of the move destination.</param>
            <param name="source">Pointer to the starting address of the block of memory to be moved.</param>
            <param name="length">Size of the block of memory to move, in bytes.</param>
            <remarks>The source and destination blocks may overlap.
            <para>CAUTION: This method makes a direct call to the windows kernel.dll - you can crash everything when using it in a wrong way!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DMAFillMemory(System.IntPtr,System.Int64,System.Byte)">
            <summary>
            DMA (kernel32.dll) - The FillMemory macro fills a block of memory with a specified value.
            </summary>
            <param name="destination">Pointer to the starting address of the block of memory to fill.</param>
            <param name="length">Size of the block of memory to fill, in bytes. This value must be less than the size of the Destination buffer.</param>
            <param name="fill">Byte value with which to fill the memory block.</param>
            <remarks>
            <para>CAUTION: This method makes a direct call to the windows kernel.dll - you can crash everything when using it in a wrong way!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.DMAZeroMemory(System.IntPtr,System.Int64)">
            <summary>
            DMA (kernel32.dll) - The ZeroMemory macro fills a block of memory with zeros.
            </summary>
            <param name="destination">Pointer to the starting address of the block of memory to fill with zeros.</param>
            <param name="length">Size of the block of memory to fill with zeros, in bytes.</param>
            <remarks>
            <para>CAUTION: This method makes a direct call to the windows kernel.dll - you can crash everything when using it in a wrong way!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.LIBLoadLibrary(System.String)">
            <summary>
            LIB (kernel32.dll) - Loads a native unmanaged library (dll) into the process of our executable.
            </summary>
            <param name="fileName">Name and/or path to the executable module (either a .dll or .exe file). The name specified is the file name of the module and is not related to the name stored in the library module itself.
            <para>If the string does not specify a path, the function uses a standard search strategy to find the file</para>
            </param>
            <returns>If the function succeeds, the return value is a handle to the module. If the function fails, the return value is 0.</returns>
            <remarks>This can be used for late bound explicit linking.
            <para>If fileName does not include a path and there is more than one loaded module with the same base name and extension, the function returns a handle to the module that was loaded first.
            If no file name extension is specified in the fileName parameter, the default library extension .dll is appended. However, the file name string can include a trailing point character (.) to indicate that the module name has no extension. 
            When no path is specified, the function searches for loaded modules whose base name matches the base name of the module to be loaded. If the name matches, the load succeeds. Otherwise, the function searches for the file.
            The first directory searched is the one directory containing the image file used to create the calling process.
            </para>
            <para>A module loaded via LIBLoadLibrary should be released using the <see cref="M:Un4seen.Bass.Utils.LIBFreeLibrary(System.Int32)"/> method when it is not needed anymore.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.LIBFreeLibrary(System.Int32)">
            <summary>
            This function decrements the reference count of the loaded dynamic-link library (DLL) loaded via <see cref="M:Un4seen.Bass.Utils.LIBLoadLibrary(System.String)"/>. 
            When the reference count reaches zero, the module is unmapped from the address space of the calling process and the handle is no longer valid.
            </summary>
            <param name="hModule">Handle to the loaded DLL module. The <see cref="M:Un4seen.Bass.Utils.LIBLoadLibrary(System.String)"/> returns this handle.</param>
            <returns>If the function succeeds, the return value is <see langword="true"/>. If the function fails, the return value is <see langword="false"/>.</returns>
            <remarks>Each process maintains a reference count for each loaded library module. This reference count is incremented each time <see cref="M:Un4seen.Bass.Utils.LIBLoadLibrary(System.String)"/> is called and is decremented each time <see cref="M:Un4seen.Bass.Utils.LIBFreeLibrary(System.Int32)"/> is called.</remarks>
        </member>
        <member name="M:Un4seen.Bass.Utils.LoadLib(System.String,System.Int32@)">
            <summary>
            For internal use only! Will load a given dll into memory.
            </summary>
            <param name="moduleName">The name and/or path of the module (dll) to load.</param>
            <param name="handle">The handle where to store the returned module handle when loaded.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
        </member>
        <member name="M:Un4seen.Bass.Utils.FreeLib(System.Int32@)">
            <summary>
            For internal use only! Will unload a dll by handle.
            </summary>
            <param name="handle">The module handle to unload.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
        </member>
        <member name="T:Un4seen.Bass.BASSTimer">
            <summary>
            Implements a secure Timer, which raises an event in defined intervals.
            </summary>
            <remarks>This timer implementation is based on the <see cref="T:System.Threading.Timer"/>, but is optimized to be used in multi-threading environments as well as UI threads.
            <para>This Timer uses a <see cref="E:Un4seen.Bass.BASSTimer.Tick"/> event handler which will be raised every <see cref="P:Un4seen.Bass.BASSTimer.Interval"/> milliseconds once the <see cref="M:Un4seen.Bass.BASSTimer.Start"/> method was called and the timer is activated.</para>
            <para>This implementation ensures, that the <see cref="E:Un4seen.Bass.BASSTimer.Tick"/> event will be executed in the main thread the subscriber executes in!
            So when subscribing to this event from a UI thread, the specified event delegate will also be called in that UI thread.</para>
            <para>Use the <see cref="M:Un4seen.Bass.BASSTimer.Stop"/> method to deactivate the Timer.</para>
            <para>You might change the <see cref="P:Un4seen.Bass.BASSTimer.Interval"/> at any time. If the Timer has already been activated, this will also take immediate effect (the next <see cref="E:Un4seen.Bass.BASSTimer.Tick"/> event will be raised after the new interval value).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BASSTimer.#ctor">
            <summary>
            Creates a new Timer instance using a default interval of 50ms.
            </summary>
            <remarks>The timer will not be activated automatically. Call <see cref="M:Un4seen.Bass.BASSTimer.Start"/> to activate the timer.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASSTimer.#ctor(System.Int32)">
            <summary>
            Creates a new Timer instance using the given interval.
            </summary>
            <param name="interval">The interval in milliseconds at which the <see cref="E:Un4seen.Bass.BASSTimer.Tick"/> event should be raised.</param>
            <remarks>The timer will not be activated automatically. Call <see cref="M:Un4seen.Bass.BASSTimer.Start"/> to activate the timer.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASSTimer.Dispose">
            <summary>
            Implement IDisposable.
            </summary>
            <remarks>Do not make this method virtual. A derived class should not be able to override this method.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASSTimer.Finalize">
            <summary>
            Finalization code.
            </summary>
            <remarks>This destructor will run only if the Dispose method does not get called.
            It gives your base class the opportunity to finalize. Do not provide destructors in types derived from this class.</remarks>
        </member>
        <member name="E:Un4seen.Bass.BASSTimer.Tick">
            <summary>
            Event handler used to notify that the timer has elapsed.
            </summary>
            <remarks>This event will be raised, if the Timer has been started (see <see cref="M:Un4seen.Bass.BASSTimer.Start"/>) and the <see cref="P:Un4seen.Bass.BASSTimer.Interval"/> has been elapsed.
            <para>Note: This implementation ensures, that the event will be executed in the main thread the subscriber executes in!
            So when subscribing to this event from UI thread, the specified event delegate will also be called in that UI thread.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASSTimer.Interval">
            <summary>
            Gets or Sets the number of milliseconds between two <see cref="E:Un4seen.Bass.BASSTimer.Tick"/> events.
            </summary>
            <remarks>To get the interval in seconds you need to divide this number by 1000.
            <para>The <see cref="E:Un4seen.Bass.BASSTimer.Tick"/> event will only be raised, if the Timer is active (see <see cref="M:Un4seen.Bass.BASSTimer.Start"/>).</para>
            <para>Specify 0 (zero) or a nagative value to inactivate the periodic signalling of the <see cref="E:Un4seen.Bass.BASSTimer.Tick"/> event - however in this case the Timer remain activated.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.Bass.BASSTimer.Enabled">
            <summary>
            Gets or Sets if the Timer is currently active.
            </summary>
            <remarks>Returns <see langword="true"/>, if the Timer is active.
            <para>Setting this property will have the same effect as calling <see cref="M:Un4seen.Bass.BASSTimer.Start"/> respectivly <see cref="M:Un4seen.Bass.BASSTimer.Stop"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BASSTimer.Start">
            <summary>
            Activates (starts) the Timer.
            </summary>
            <remarks>After activating the Timer every <see cref="P:Un4seen.Bass.BASSTimer.Interval"/> milliseconds a <see cref="E:Un4seen.Bass.BASSTimer.Tick"/> event will be raised.
            <para>Calling this method on an already active timer will have no effect.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BASSTimer.Stop">
            <summary>
            Deativates (stops) the Timer.
            </summary>
            <remarks>After deactivating the Timer no more <see cref="E:Un4seen.Bass.BASSTimer.Tick"/> events will be raised.</remarks>
        </member>
        <member name="T:Un4seen.Bass.BASSBuffer">
            <summary>
            Implements a fast and generic circular ring buffer (FiFo).
            </summary>
            <remarks>This implementation uses an internal byte array as a buffer and can be used in multi-threading environments, since all members are thread-safe.
            <para>The default size of the ring buffer is 2 seconds (when using it with 44.1kHz, 16-bit stereo sample data).</para>
            <para>This class supports multiple readers using the ring buffer (default is 1). Use the <see cref="P:Un4seen.Bass.BASSBuffer.Readers"/> property to set the maximum number of parallel readers accessing the ring buffer.</para>
            <para>The ring buffer is not a dynamic buffer, meaning it has a fixed size once created. However, the ring buffer size might be increased at any time through the <see cref="M:Un4seen.Bass.BASSBuffer.Resize(System.Single)"/> method, even if you should avoid this for performance reasons.</para>
            <para>Use the <see cref="M:Un4seen.Bass.BASSBuffer.Write(System.IntPtr,System.Int32)"/> method to add sample data to the ring buffer. And use the <see cref="M:Un4seen.Bass.BASSBuffer.Read(System.IntPtr,System.Int32,System.Int32)"/> method to retrieve sample data from the ring buffer.</para>
            <para>This class might be useful for full-duplex monitoring of a recording streams or in order to clone existing streams.</para>
            <para>In order to reduce latency, you might probably want to minimize the recording update period (see <see cref="M:Un4seen.Bass.Bass.BASS_RecordStart(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,Un4seen.Bass.RECORDPROC,System.IntPtr)"/>.
            You'll probably also want to reduce the update period (BASS_CONFIG_UPDATEPERIOD) and buffer length (BASS_CONFIG_BUFFER), to reduce output latency (see <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/>).</para>
            </remarks>
            <example>
            BASS Recording with full-duplex monitoring:
            <code lang="C#">
            private RECORDPROC _myRecProc; // make it global, so that the GC can not remove it
            private int _recHandle = 0;
            // The buffer: 44.1kHz, 16-bit, stereo (like we record!)
            private BASSBuffer _monBuffer = new BASSBuffer(2f, 44100, 2, 16);
            private int _monStream = 0;
            private STREAMPROC _monProc = null;
            ...
            // enable lower latency settings (optional)
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_UPDATEPERIOD, 20);
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER, 100);
            // start recording with 20ms update period
            _myRecProc = new RECORDPROC(MyRecording);
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, 20, _myRecProc, IntPtr.Zero);
            // setup the full-duplex monitoring
            _monProc = new STREAMPROC(MonitoringStream);
            _monStream = Bass.BASS_StreamCreate(44100, 2, 0, _monProc, IntPtr.Zero); // user = reader#
            Bass.BASS_ChannelPlay(_monStream, false);
            
            private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
            {
            	monBuffer.Write(buffer, length);
            }
            
            private int MonitoringStream(int handle, IntPtr buffer, int length, IntPtr user)
            {
            	return monBuffer.Read(buffer, length, user.ToInt32());
            }
            </code>
            <code lang="VB">
            Private _myRecProc As RECORDPROC ' make it global, so that the GC can not remove it
            Private _recHandle As Integer = 0
            ' The buffer: 44.1kHz, 16-bit, stereo (like we record!)
            Private _monBuffer As New BASSBuffer(2F, 44100, 2, 16)
            Private _monStream As Integer = 0
            Private _monProc As STREAMPROC = Nothing
            ...
            ' enable lower latency settings (optional)
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_UPDATEPERIOD, 20)
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER, 100)
            ' start recording with 20ms update period
            _myRecProc = New RECORDPROC(MyRecording)
            _recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_DEFAULT, 20, _myRecProc, IntPtr.Zero)
            ' setup the full-duplex monitoring
            _monProc = New STREAMPROC(AddressOf MonitoringStream)
            _monStream = Bass.BASS_StreamCreate(44100, 2, 0, _monProc, IntPtr.Zero) ' user = reader#
            Bass.BASS_ChannelPlay(_monStream, False)
            
            Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
              monBuffer.Write(buffer, length)
            End Function
            
            Private Function MonitoringStream(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Integer
              Return monBuffer.Read(buffer, length, user.ToInt32())
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.#ctor">
            <summary>
            Default Constructor using the default buffer size.
            </summary>
            <remarks>The default size of the buffer is 2 seconds (when using it with 44.1kHz, 16-bit stereo sample data).</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.#ctor(System.Single,System.Int32,System.Int32,System.Int32)">
            <summary>
            Creates an instance of the ring buffer with a size acconding to the given parameters.
            </summary>
            <param name="seconds">The length of the buffer in seconds (e.g. 2.0 for 2 seconds or 0.2 for 200ms).</param>
            <param name="samplerate">The samplerate in Hz to use.</param>
            <param name="chans">The number of channels to use.</param>
            <param name="bps">Bytes per Sample (1 = 8-bit, 2 = 16-bit or 4 = 32-bit sample data, but you might also use 8, 16 or 32 here directly).</param>
            <remarks>The internal buffer size is calculated accordingly to the above parameters, rounded to the next sample mathich the given bytes per sample.
            <para>The buffer size is calculated as: seconds * samplerate * chans * bps</para>
            </remarks>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Dispose">
            <summary>
            Implement IDisposable.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Finalize">
            <summary>
            Finalization code.
            </summary>
            <remarks>This destructor will run only if the Dispose method does not get called.
            It gives your base class the opportunity to finalize. Do not provide destructors in types derived from this class.</remarks>
        </member>
        <member name="P:Un4seen.Bass.BASSBuffer.BufferLength">
            <summary>
            Gets the total length in bytes of the ring buffer.
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASSBuffer.Bps">
            <summary>
            Gets the Bytes per sample used with the ring buffer (1=8-bit, 2=16-bit default, 4=32-bit).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASSBuffer.SampleRate">
            <summary>
            Gets the sample rate in Hz used with the ring buffer (default is 44100 Hz).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASSBuffer.NumChans">
            <summary>
            Gets the number of channels used with the ring buffer (1=mono, 2=stereo default, etc).
            </summary>
        </member>
        <member name="P:Un4seen.Bass.BASSBuffer.Readers">
            <summary>
            Gets or Sets the number of parallel Readers which can be used with the ring buffer.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Clear">
            <summary>
            Clears the ring buffer (zeros all elements) and resets all read and write pointers.
            </summary>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Resize(System.Single)">
            <summary>
            Resizes (enlarges) the ring buffer by the given factor.
            </summary>
            <param name="factor">The factor to use for resizing (the buffer size is multiplied by this factor). Must be greater than 1.0.</param>
            <remarks>Shrinking the buffer size is not allowed.</remarks>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Space(System.Int32)">
            <summary>
            Returns the number of bytes available in the ring buffer for writing until an overflow of the read pointer will happen.
            </summary>
            <param name="reader">The zero-based index of the reader to use (0=first reader) or -1 to get the smallest available space for all readers.</param>
            <remarks>In order to convert the available space in the buffer to number of samples, simply devide the result by the bytes per sample
            (e.g. if the result is 56780 and you are using the buffer with 16-bit stereo sample data, the number of sample are 56780/2 = 28390 samples or 14195 stereo pairs).
            <para>Note, that there is never a real physical write limitation, since writing to the buffer always has priority.
            Meaning if there is not sufficient space left between the write pointer position and the last read pointer position, this fact is simply ignored. The data will be written anyhow.
            However, this will result in an overflow, so that the next read operation will only have the overflown sample data available - resulting in a gap in the sound.</para>
            </remarks>
            <returns>Returns the number of bytes available in the ring buffer for writing until an overflow of the read pointer will happen (space between the current write pointer position and the read pointer position).</returns>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Count(System.Int32)">
            <summary>
            Returns the number of bytes available in the ring buffer for reading.
            </summary>
            <param name="reader">The zero-based index of the reader to use (0=first reader) or -1 to get the biggest number of bytes for all readers.</param>
            <remarks>In order to convert the bytes in the buffer to number of samples, simply devide the result by the bytes per sample
            (e.g. if the result is 56780 and you are using the buffer with 16-bit stereo sample data, the number of sample are 56780/2 = 28390 samples or 14195 stereo pairs).</remarks>
            <returns>The number of bytes available in the ring buffer for reading (between the current read pointer position and the write pointer position).</returns>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Write(System.IntPtr,System.Int32)">
            <summary>
            Writes (add) the given number of sample data to the ring buffer.
            </summary>
            <param name="buffer">The pointer to the buffer containing the sample data to write to the ring buffer (e.g. as provided by a <see cref="T:Un4seen.Bass.RECORDPROC"/>, <see cref="T:Un4seen.Bass.DSPPROC"/> etc. or even by <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>).</param>
            <param name="length">The number of BYTES to write to the ring buffer (from the <paramref name="buffer"/>).</param>
            <returns>The number of bytes actually written to the ring buffer.</returns>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Write(System.Byte[],System.Int32)">
            <summary>
            Writes (add) the given number of sample data to the ring buffer.
            </summary>
            <param name="buffer">The byte array containing the sample data to write to the ring buffer.</param>
            <param name="length">The number of BYTES to write to the ring buffer (from the <paramref name="buffer"/>).</param>
            <returns>The number of bytes actually written to the ring buffer.</returns>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Read(System.IntPtr,System.Int32,System.Int32)">
            <summary>
            Reads (removes) the given number of sample data from the ring buffer.
            </summary>
            <param name="buffer">The pointer to the buffer where the read sample data should be written to (e.g. as provided by a <see cref="T:Un4seen.Bass.STREAMPROC"/>).</param>
            <param name="length">The number of BYTES to read from the ring buffer (which will be written to the <paramref name="buffer"/>).</param>
            <param name="reader">The zero-based index of the reader to use (0=first reader).</param>
            <returns>The number of bytes actually read from the ring buffer (which be be less than requested).</returns>
        </member>
        <member name="M:Un4seen.Bass.BASSBuffer.Read(System.Byte[],System.Int32,System.Int32)">
            <summary>
            Reads (removes) the given number of sample data from the ring buffer.
            </summary>
            <param name="buffer">The byte array where the read sample data should be written to (must be initialized and large enough to keep the data).</param>
            <param name="length">The number of BYTES to read from the ring buffer (which will be written to the <paramref name="buffer"/>).</param>
            <param name="reader">The zero-based index of the reader to use (0=first reader).</param>
            <returns>The number of bytes actually read from the ring buffer (which might be less than requested).</returns>
        </member>
        <member name="T:Un4seen.BassAsio.BassAsio">
            <summary>
            .NET API wrapper for BASSASIO.DLL
            <para>Requires: bassasio.dll - ASIO driver library - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSASIO is basically a wrapper for ASIO drivers, with the addition of channel joining, format conversion and resampling.</para>
            <para>BASSASIO requires a soundcard with ASIO drivers installed. It also makes use of SSE2 and 3DNow optimizations, but is fully functional without them.
            BASS is not required by BASSASIO, but BASS can of course be used to decode, apply DSP/FX, etc.</para>
            <para>Note, that Bass.Net automatically tries to initialize BASSASIO to use with unicode.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.#cctor">
            <summary>
            Base static contructor.
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetUnicode(System.Boolean)">
            <summary>
            Sets the character set used in device information text.
            </summary>
            <param name="unicode">Use Unicode? If FALSE, ANSI is used, else UTF-16 is used.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function determines the character set that is used in the <see cref="T:Un4seen.BassAsio.BASS_ASIO_DEVICEINFO"/> structure and in <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_AddDevice(System.Guid,System.String,System.String)"/> function calls.
            It does not affect ASIO channel names in the <see cref="T:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO"/> and <see cref="T:Un4seen.BassAsio.BASS_ASIO_INFO"/> structure.
            <para>The character set choice is finalised in the first <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfo(System.Int32,Un4seen.BassAsio.BASS_ASIO_DEVICEINFO)"/>, <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_AddDevice(System.Guid,System.String,System.String)"/> or <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> call, and it cannot be changed after that. The default is to use ANSI.</para>
            <para>Note: Bass.Net will invoke this method automatically to ensure it is always set to Unicode!</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>This function is only available before any devices have been enumerated.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode">
            <summary>
            Retrieves the error code for the most recent BASSASIO function call in the current thread.
            </summary>
            <returns>If no error occured during the last BASSASIO function call then BASS_OK is returned, else one of the <see cref="T:Un4seen.Bass.BASSError"/> values is returned. 
            See the function description for an explanation of what the error code means.</returns>
            <remarks>Error codes are stored for each thread. So if you happen to call 2 or more BASSASIO functions at the same time, they will not interfere with eachother's error codes.</remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfoInternal(System.Int32,Un4seen.BassAsio.BASS_ASIO_DEVICEINFO_INTERNAL@)">
            <summary>
            
            </summary>
            <param name="device"></param>
            <param name="info"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfo(System.Int32,Un4seen.BassAsio.BASS_ASIO_DEVICEINFO)">
            <summary>
            Retrieves information on an Asio device.
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <param name="info">An instance of the <see cref="T:Un4seen.BassAsio.BASS_ASIO_DEVICEINFO"/> class to store the information at.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function can be used to enumerate the available Asio devices for a setup dialog. 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            List all available devices:
            <code lang="C#">
            BASS_ASIO_DEVICEINFO info = new BASS_ASIO_DEVICEINFO();
            for (int n=0; BassAsio.BASS_ASIO_GetDeviceInfo(n, info); n++)
            {
              Console.WriteLine(info.ToString());
            }
            </code>
            <code lang="VB">
            Dim n As Integer = 0
            Dim info As New BASS_ASIO_DEVICEINFO()
            While (BassAsio.BASS_ASIO_GetDeviceInfo(n, info))
              Console.WriteLine(info.ToString())
              n += 1
            End While
            </code>
            Or use the <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfos"/> method for more convenience.
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfo(System.Int32)">
            <summary>
            Retrieves information on an Asio device.
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <returns>If successful, then an instance of the <see cref="T:Un4seen.BassAsio.BASS_ASIO_DEVICEINFO"/> class is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function can be used to enumerate the available Asio devices for a setup dialog. 
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_ASIO_DEVICEINFO info;
            for (int n = 0; (info = BassAsio.BASS_ASIO_GetDeviceInfo(n)) != null; n++)
            {
              ...
            }
            </code>
            <code lang="VB">
            Dim n As Integer = 0
            Dim info As New BASS_ASIO_DEVICEINFO()
            While Not (info Is Nothing)
              info = BassAsio.BASS_ASIO_GetDeviceDescription(n)
              If Not (info Is Nothing) Then
                ...
              End If
              n += 1
            End While
            </code>
            Or use the <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfos"/> method for more convenience.
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfos">
            <summary>
            Returns all available Asio devices.
            </summary>
            <returns>An array of <see cref="T:Un4seen.BassAsio.BASS_ASIO_DEVICEINFO"/> elements representing the available Asio devices.</returns>
            <remarks>Uses <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfo(System.Int32,Un4seen.BassAsio.BASS_ASIO_DEVICEINFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceCount">
            <summary>
            Returns the total number of available Asio devices.
            </summary>
            <returns>Number of ASIO devices available.</returns>
            <remarks>Uses <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfo(System.Int32,Un4seen.BassAsio.BASS_ASIO_DEVICEINFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDevice(System.Int32)">
            <summary>
            Sets the device to use for subsequent calls in the current thread.
            </summary>
            <param name="device">The device to use... 0 = first device.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>As in BASS, simultaneously using multiple devices is supported in the BASSASIO 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. 
            The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.</para>
            <para>The device context setting is used by any function that may result in a BASS_ERROR_INIT error (except this function), which is the majority of them. When one if those functions is called, it will check the current thread's device setting, and if no device is selected (or the selected device is not initialized), BASSASIO will automatically select the lowest device that is initialized. 
            This means that when using a single device, there is no need to use this function - BASSASIO will automatically use the device that's initialized. Even if you free the device, and initialize another, BASSASIO will automatically switch to the one that is initialized.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The <paramref name="device"/> number specified is invalid.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The device has not been initialized.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Get the sample rate of device 2:
            <code lang="C#">
            // select device 2
            BassAsio.BASS_ASIO_SetDevice(2);
            // get the sample rate
            double rate = BassAsio.BASS_ASIO_GetRate();
            </code>
            <code lang="VB">
            ' select device 2
            BassAsio.BASS_ASIO_SetDevice(2)
            ' get the sample rate
            Dim rate As Double = BassAsio.BASS_ASIO_GetRate()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDevice">
            <summary>
            Retrieves the Asio device setting in the current thread.
            </summary>
            <returns>If successful, the device number is returned, else -1 is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/>to get the error code.</returns>
            <remarks>As in BASS, simultaneously using multiple devices is supported in the BASSASIO API via a context switching system - instead of there being an extra "device" parameter in the function calls, the device to be used needs to be set via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDevice(System.Int32)"/> prior to calling the function. The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called - there are no initialized devices.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_AddDevicePtr(System.IntPtr,System.String,System.String)">
            <summary>
            
            </summary>
            <param name="clsid"></param>
            <param name="driver"></param>
            <param name="name"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_AddDeviceGuid(System.Guid,System.String,System.String)">
            <summary>
            
            </summary>
            <param name="clsid"></param>
            <param name="driver"></param>
            <param name="name"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_AddDevicePtrUnicode(System.IntPtr,System.String,System.String)">
            <summary>
            
            </summary>
            <param name="clsid"></param>
            <param name="driver"></param>
            <param name="name"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_AddDeviceGuidUnicode(System.Guid,System.String,System.String)">
            <summary>
            
            </summary>
            <param name="clsid"></param>
            <param name="driver"></param>
            <param name="name"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_AddDevice(System.Guid,System.String,System.String)">
            <summary>
            Adds a driver to the device list.
            </summary>
            <param name="clsid">The driver's class ID.</param>
            <param name="driver">The filename of the driver.</param>
            <param name="name">An optional description of the driver.</param>
            <returns>If successful, the new device number is returned (which might be used in a subsequent <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> call), else -1 is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/>to get the error code.</returns>
            <remarks>
            <para>A list of installed ASIO drivers is kept in the Windows registry, which is where BASSASIO gets its device list from, 
            but it is also possible to add unregistered drivers (eg. private drivers) to the list via this function. 
            If successful, the returned device number can be used in a <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> call to use the driver.</para>
            <para>The driver and name strings are expected to be in ANSI form unless Unicode device information has been enabled via BASS_ASIO_SetUnicode, in which case they are expected to be in UTF-16 form</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_FILEOPEN</term><description>The <paramref name="driver"/> file does not exist.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)">
            <summary>
            Initializes an Asio device/driver.
            </summary>
            <param name="device">The device to use... 0 = first device, -1 = first available device. <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfo(System.Int32,Un4seen.BassAsio.BASS_ASIO_DEVICEINFO)"/> can be used to get the total number of devices.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.BassAsio.BASSASIOInit"/>):
            <list type="table">
            <item><term>BASS_ASIO_THREAD</term><description>Host the driver in a dedicated thread, else the current thread.</description></item>
            <item><term>BASS_ASIO_JOINORDER</term><description>Place joined channels in the order in which <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelJoin(System.Boolean,System.Int32,System.Int32)"/> was called to join them, else place them in numerically ascending order.</description></item>
            <item><term>BASS_ASIO_VOLRAMP</term><description>Ramp volume changes (of output channels).</description></item>
            </list>
            </param>
            <returns>If the device was successfully initialized, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function must be successfully called before any input or output can be performed. When the first available device is initialized, <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfo(System.Int32,Un4seen.BassAsio.BASS_ASIO_DEVICEINFO)"/> can be used afterwards to find out which device that is.</para>
            <para>The ASIO driver is accessed via a COM object using the single-threaded apartment model, which means that requests to the driver go through the thread that initialized it, so the thread needs to exist as long as the driver remains initialized.
            The thread should also have a message queue. If device initializing and releasing from multiple threads is required, or the application does not have a message queue (eg. a console application), then the BASS_ASIO_THREAD flag can be used to have BASSASIO create a dedicated thread to host the ASIO driver.</para>
            <para>Simultaneously using multiple devices is supported in the BASSASIO 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. <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDevice(System.Int32)"/> is used to switch the current device. 
            When successful, BASS_ASIO_Init automatically sets the current thread's device to the one that was just initialized.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The <paramref name="device"/> number specified is invalid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>A device has already been initialized. You must call <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Free"/> before you can initialize again.</description></item>
            <item><term>BASS_ERROR_DRIVER</term><description>The driver couldn't be initialized.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Free">
            <summary>
            Releases the Asio device/driver.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Make sure to free each Asio device you have initialized with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/>, <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDevice(System.Int32)"/> is used to switch the current device.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetVersion">
            <summary>
            Retrieves the version number of the BASSASIO.DLL that is loaded.
            </summary>
            <returns>The BASSASIO version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASSASIO supports all the BASSASIO functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.BassAsio.BassAsio.BASSASIOVERSION"/> to check the major revision.</para>
            </remarks>
            <example>
            Checking the major version only:
            <code lang="C#">
            if ( Utils.HighWord(BassAsio.BASS_ASIO_GetVersion()) != BassAsio.BASSASIOVERSION )
            {
              MessageBox.Show(this, "Wrong BassAsio Version!");
            }
            </code>
            <code lang="VB">
            If Utils.HighWord(BassAsio.BASS_ASIO_GetVersion()) &lt;&gt; BassAsio.BASSASIOVERSION Then
              MessageBox.Show(Me, "Wrong BassAsio Version!")
            End If
            </code>
            Checking for full version "2.4.1.3":
            <code>
            if (BassAsio.BASS_ASIO_GetVersion() &lt; Utils.MakeLong(0x0103, 0x0204))
            {
              MessageBox.Show(this, "Wrong BassAsio Version!");
            }
            </code>
            <code lang="VB">
            If BassAsio.BASS_ASIO_GetVersion() &lt; Utils.MakeLong(&amp;H103, &amp;H204) Then
              MessageBox.Show(Me, "Wrong BassAsio Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the BASSASIO.DLL that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASSASIO version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASSASIO supports all the BASSASIO functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.</remarks>
            <example>
            <code lang="C#">
            Version expectedVersion = new Version(2, 4);
            if (BassAsio.BASS_ASIO_GetVersion(2) &lt; expectedVersion)
            {
              MessageBox.Show( this, "Wrong BassAsio Version!" );
            }
            </code>
            <code lang="VB">
            Dim expectedVersion As New Version(2, 4)
            If BassAsio.BASS_ASIO_GetVersion(2) &lt; expectedVersion Then
              MessageBox.Show(Me, "Wrong BassAsio Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Stop">
            <summary>
            Stops the current Asio device.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>As in BASS, simultaneously using multiple devices is supported in the BASSASIO API via a context switching system - instead of there being an extra "device" parameter in the function calls, 
            the device to be used needs to be set via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDevice(System.Int32)"/> prior to calling the function. 
            The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_START</term><description>The device hasn't been started.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetInfo(Un4seen.BassAsio.BASS_ASIO_INFO)">
            <summary>
            Retrieves information on the Asio device being used.
            </summary>
            <param name="info">An instance of the <see cref="T:Un4seen.BassAsio.BASS_ASIO_INFO"/> class to store the information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>As in BASS, simultaneously using multiple devices is supported in the BASSASIO API via a context switching system - instead of there being an extra "device" parameter in the function calls, the device to be used needs to be set via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDevice(System.Int32)"/> prior to calling the function. The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Display the number of inputs and outputs:
            <code lang="C#">
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD);
            BASS_ASIO_INFO info = new BASS_ASIO_INFO();
            if ( BassAsio.BASS_ASIO_GetInfo(info) )
            {
            	Console.WriteLine( info.ToString() );
            }
            </code>
            <code lang="VB">
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD)
            Dim info As New BASS_ASIO_INFO()
            If BassAsio.BASS_ASIO_GetInfo(info) Then
              Console.WriteLine(info.ToString())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetInfo">
            <summary>
            Retrieves information on the Asio device being used.
            </summary>
            <returns>An instance of the <see cref="T:Un4seen.BassAsio.BASS_ASIO_INFO"/> class on success - else <see langword="null"/>.</returns>
            <remarks>As in BASS, simultaneously using multiple devices is supported in the BASSASIO API via a context switching system - instead of there being an extra "device" parameter in the function calls, the device to be used needs to be set via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDevice(System.Int32)"/> prior to calling the function. The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Display the number of inputs and outputs of the current Asio device:
            <code lang="C#">
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD);
            BASS_ASIO_INFO info = BassAsio.BASS_ASIO_GetInfo();
            if ( info != null )
            {
            	Console.WriteLine( info.ToString() );
            }
            </code>
            <code lang="VB">
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD)
            Dim info As BASS_ASIO_INFO = BassAsio.BASS_ASIO_GetInfo()
            If Not (info Is Nothing) Then
              Console.WriteLine(info.ToString())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetRate(System.Double)">
            <summary>
            Sets the Asio device's sample rate.
            </summary>
            <param name="rate">The sample rate.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>When it's not possible to set the device to the rate wanted, <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetRate(System.Boolean,System.Int32,System.Double)"/> can be used to overcome that.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The sample rate is not supported by the device/drivers.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set the Asio device and channel sample rate to the same as the underlying BASS decoding stream, in order to save resampling:
            <code lang="C#">
            // get the channel info of the decoding stream
            BASS_CHANNELINFO info = Bass.BASS_ChannelGetInfo(streamDecoding);
            // 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 );
            </code>
            <code lang="VB">
            ' get the channel info of the decoding stream
            Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(streamDecoding)
            ' set the source rate
            BassAsio.BASS_ASIO_ChannelSetRate(False, 0, CDbl(info.freq))
            ' try to set the device rate too (saves resampling)
            BassAsio.BASS_ASIO_SetRate(CDbl(info.freq))
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_StartOld(System.Int32)">
            <summary>
            
            </summary>
            <param name="buflen"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_StartInternal(System.Int32,System.Int32)">
            <summary>
            
            </summary>
            <param name="buflen"></param>
            <param name="threads"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Start(System.Int32)">
            <summary>
            Starts the current Asio device.
            </summary>
            <param name="buflen">Buffer length in samples... 0 = use current length (use -1 to request the preferred buffer length).</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Before starting the device, channels must be enabled using <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnable(System.Boolean,System.Int32,Un4seen.BassAsio.ASIOPROC,System.IntPtr)"/>. Once started, channels can't be enabled or disabled until the device is stopped, using <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Stop"/>.
            <para>The default number of processing threads is 1, which means that the enabled channels' ASIOPROC functions get called in series (starting with the lowest input channel). 
            Multiple channels can be processed in parallel if multiple threads are created for that purpose via the threads parameter. 
            All input channels will be processed before any output channels are, so that full duplex is unaffected. The number of threads is automatically capped at the number required to process all enabled channels simultaneously.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>The device has already been started.</description></item>
            <item><term>BASS_ERROR_NOCHAN</term><description>No channels have been enabled.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            using Un4seen.Bass;
            using Un4seen.BassAsio;
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD);
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            if (stream != 0)
            {
            	// now setup ASIO
            	_myAsioProc = new ASIOPROC(AsioCallback);
            	// enable 1st output channel...(0=first)
            	BassAsio.BASS_ASIO_ChannelEnable(false, 0, _myAsioProc, new IntPtr(stream));
            	// and join the next channels to it
            	BassAsio.BASS_ASIO_ChannelJoin(false, 1, 0);
            	// and start playing it...start output using default buffer/latency
            	BassAsio.BASS_ASIO_Start(0);
            }
            ...
            private ASIOPROC _myAsioProc; // make it global, so that it can not be removed by the Garbage Collector
            private int AsioCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
            {
            	// Note: 'user' contains the underlying stream channel (see above)
            	// We can simply use the bass method to get some data from a decoding channel 
            	// and store it to the asio buffer in the same moment...
            	return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Imports Un4seen.Bass
            Imports Un4seen.BassAsio
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD)
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              ' now setup ASIO
              _myAsioProc = New ASIOPROC(AddressOf AsioCallback)
              ' enable 1st output channel...(0=first)
              BassAsio.BASS_ASIO_ChannelEnable(False, 0, _myAsioProc, New IntPtr(stream))
              ' and join the next channels to it
              BassAsio.BASS_ASIO_ChannelJoin(False, 1, 0)
              ' and start playing it...start output using default buffer/latency
              BassAsio.BASS_ASIO_Start(0)
            End If
            ...
            Private _myAsioProc As ASIOPROC ' make it global, so that it can not be removed by the Garbage Collector
            Private Function AsioCallback(input As Boolean, channel As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Integer
              ' Note: 'user' contains the underlying stream channel (see above)
              ' We can simply use the bass method to get some data from a decoding channel 
              ' and store it to the asio buffer in the same moment...
              Return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length)
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Start(System.Int32,System.Int32)">
            <summary>
            Starts the current Asio device.
            </summary>
            <param name="buflen">Buffer length in samples... 0 = use current length (use -1 to request the preferred buffer length).</param>
            <param name="threads">The number of processing threads to use... 0 = use current number.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Before starting the device, channels must be enabled using <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnable(System.Boolean,System.Int32,Un4seen.BassAsio.ASIOPROC,System.IntPtr)"/>. Once started, channels can't be enabled or disabled until the device is stopped, using <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Stop"/>.
            <para>The default number of processing threads is 1, which means that the enabled channels' ASIOPROC functions get called in series (starting with the lowest input channel). 
            Multiple channels can be processed in parallel if multiple threads are created for that purpose via the threads parameter. 
            All input channels will be processed before any output channels are, so that full duplex is unaffected. The number of threads is automatically capped at the number required to process all enabled channels simultaneously.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>The device has already been started.</description></item>
            <item><term>BASS_ERROR_NOCHAN</term><description>No channels have been enabled.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            using Un4seen.Bass;
            using Un4seen.BassAsio;
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD);
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            if (stream != 0)
            {
            	// now setup ASIO
            	_myAsioProc = new ASIOPROC(AsioCallback);
            	// enable 1st output channel...(0=first)
            	BassAsio.BASS_ASIO_ChannelEnable(false, 0, _myAsioProc, new IntPtr(stream));
            	// and join the next channels to it
            	BassAsio.BASS_ASIO_ChannelJoin(false, 1, 0);
            	// and start playing it...start output using default buffer/latency
            	BassAsio.BASS_ASIO_Start(0);
            }
            ...
            private ASIOPROC _myAsioProc; // make it global, so that it can not be removed by the Garbage Collector
            private int AsioCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
            {
            	// Note: 'user' contains the underlying stream channel (see above)
            	// We can simply use the bass method to get some data from a decoding channel 
            	// and store it to the asio buffer in the same moment...
            	return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Imports Un4seen.Bass
            Imports Un4seen.BassAsio
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD)
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              ' now setup ASIO
              _myAsioProc = New ASIOPROC(AddressOf AsioCallback)
              ' enable 1st output channel...(0=first)
              BassAsio.BASS_ASIO_ChannelEnable(False, 0, _myAsioProc, New IntPtr(stream))
              ' and join the next channels to it
              BassAsio.BASS_ASIO_ChannelJoin(False, 1, 0)
              ' and start playing it...start output using default buffer/latency
              BassAsio.BASS_ASIO_Start(0)
            End If
            ...
            Private _myAsioProc As ASIOPROC ' make it global, so that it can not be removed by the Garbage Collector
            Private Function AsioCallback(input As Boolean, channel As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Integer
              ' Note: 'user' contains the underlying stream channel (see above)
              ' We can simply use the bass method to get some data from a decoding channel 
              ' and store it to the asio buffer in the same moment...
              Return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length)
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_IsStarted">
            <summary>
            Checks, if the current Asio device has been started.
            </summary>
            <returns>Returns <see langword="true"/>, if the device has been started, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Lock(System.Boolean)">
            <summary>
            Locks the device to the current thread.
            </summary>
            <param name="dolock">If <see langword="false"/>, unlock the device, else lock it.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Locking a device prevents other threads from performing most functions on it, including the channel processing. 
            Other threads wanting to access a locked device will block until it is unlocked, so it should only be locked very briefly. 
            A device must be unlocked in the same thread that it was locked.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ControlPanel">
            <summary>
            Displays the current Asio driver's control panel.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_CheckRate(System.Double)">
            <summary>
            Checks if a sample rate is supported by the device.
            </summary>
            <param name="rate">The sample rate to check.</param>
            <returns>If the sample rate is supported, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The sample rate is not supported by the device/drivers.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetRate">
            <summary>
            Retrieves the current Asio device's sample rate.
            </summary>
            <returns>If succesful, the sample rate is returned, else -1 is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetLatency(System.Boolean)">
            <summary>
            Retrieves the latency of input or output channels of the current Asio device
            </summary>
            <param name="input">Get the input latency? <see langword="false"/>=the output latency.</param>
            <returns>If successful, the latency in samples is returned, else -1 is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The latency is the delay between the sound being recorded and reaching an <see cref="T:Un4seen.BassAsio.ASIOPROC"/>, in the case of input channels. And the delay between the sample data being fed to an <see cref="T:Un4seen.BassAsio.ASIOPROC"/> and actually being heard, in the case of output channels. 
            The latency is dependant on the buffer size, as specified in the <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Start(System.Int32)"/> call. So the latency should be checked after making that call, not before.</para>
            <para>The latency time can by calculated be dividing the sample latency by the device sample rate. When a channel is being resampled, the sample latency will change, but the effective latency time remains constant.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Display the input and output latency, in milliseconds:
            <code lang="C#">
            // get the sample rate
            double rate = BassAsio.BASS_ASIO_GetRate();
            Console.WriteLine("Input Latency = {0} ms", BassAsio.BASS_ASIO_GetLatency(true) * 1000.0 / rate);
            Console.WriteLine("Output Latency = {0} ms", BassAsio.BASS_ASIO_GetLatency(false) * 1000.0 / rate);
            </code>
            <code lang="VB">
            Dim rate As Double = BassAsio.BASS_ASIO_GetRate()
            Console.WriteLine("Input Latency = {0} ms", BassAsio.BASS_ASIO_GetLatency(True) * 1000.0 / rate)
            Console.WriteLine("Output Latency = {0} ms", BassAsio.BASS_ASIO_GetLatency(False) * 1000.0 / rate)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetCPU">
            <summary>
            Retrieves the current CPU usage of BASSASIO.
            </summary>
            <returns>The BASSASIO CPU usage as a percentage of total CPU time.</returns>
            <remarks>This function includes the time taken by the <see cref="T:Un4seen.BassAsio.ASIOPROC"/> callback functions.</remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Monitor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            Set the direct input monitoring state.
            </summary>
            <param name="input">The input channel to set the monitoring state of... -1 = all.</param>
            <param name="output">The suggested output channel for the monitoring.</param>
            <param name="gain">Suggested Gain, ranging from 0 to 0x7fffffff (-inf to +12 dB), 0x20000000 equals 0 dB.</param>
            <param name="state">Monitoring state... 0 = off, 1 = on. Other settings may be possible depending on the drivers, e.g.:
            <para>0 = input monitoring off.</para>
            <para>1 = input monitoring on.</para>
            <para>2 = playback monitoring off.</para>
            <para>3 = playback monitoring on.</para>
            </param>
            <param name="pan">Suggested Pan, ranging from 0 = left to 0x7fffffff = right (centre should be 0x40000000).</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>If the hardware does not support patching and mixing a straight 1 to 1 routing is suggested. 
            The driver should ignore all the information of ASIOMonitor it cannot deal with, usually these might be either or all of output, gain, pan.
            <para>Output is the base channel of a stereo channel pair, i.e. output is always an even channel (0,2,4...). 
            If an odd input channel should be monitored and no panning or output routing can be applied, the driver has to use the next higher output (imply a hard right pan).
            Note that the output, gain and pan settings are just suggestions, and may be ignored by the device/driver.</para>
            <para>Some cards/drivers might also support direct output monitoring, in such case use the <paramref name="input"/> parameter to denote the output channel to monitor and specify an appropriate <paramref name="state"/> value.</para>
            <para>ADM has originally been based on a mono in - stereo out scheme. Meaning if you need to monitor a stereo input channel pair you need to call this twice, both using the same output value, but using an odd and an even input value.
            In such case set the odd input to pan hard left and the even input to pan hard right.</para>
            <para>Also note, that if you have channels in-between not activated in ASIO these will not counted. 
            So if for example channels 3 and 4 are inactive, ADM input 3 is related to the physical input channel 5!</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetNotify(Un4seen.BassAsio.ASIONOTIFYPROC,System.IntPtr)">
            <summary>
            Sets a notification callback on the ASIO driver.
            </summary>
            <param name="proc">User defined notification function... NULL = disable notifications.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            A previously set notification callback can be changed (or removed) at any time, by calling this function again.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Future(System.Int32,System.IntPtr)">
            <summary>
            Provides access to the driver's 'future' function.
            </summary>
            <param name="selector">Operation code.</param>
            <param name="param">Pointer to the operation's parameters, if applicable.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks> This method is a general purpose extension method serving various purposes (e.g. see <see cref="T:Un4seen.BassAsio.BASSASIOFuture"/>).
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The <paramref name="selector"/> is not supported by the driver.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Future(Un4seen.BassAsio.BASSASIOFuture,System.Object)">
            <summary>
            Provides access to the driver's 'future' function.
            </summary>
            <param name="selector">Operation code.</param>
            <param name="param">Pointer to the operation's parameters, if applicable.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks> This method is a general purpose extension method serving various purposes (e.g. see <see cref="T:Un4seen.BassAsio.BASSASIOFuture"/>).
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The <paramref name="selector"/> is not supported by the driver.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDSD(System.Boolean)">
            <summary>
            Sets the device's sample format to DSD or PCM.
            </summary>
            <param name="dsd">Set the sample format to DSD?</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            When a device is switched between PCM and DSD formats, the ASIO channels' format will change accordingly, as reported by <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetInfo(System.Boolean,System.Int32,Un4seen.BassAsio.BASS_ASIO_CHANNELINFO)"/>.
            Any <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetFormat(System.Boolean,System.Int32,Un4seen.BassAsio.BASSASIOFormat)"/> and <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetRate(System.Boolean,System.Int32,System.Double)"/> settings that have been applied will be reset to defaults. 
            Other channel settings are unchanged.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>DSD is not supported by the device/driver.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetInfo(System.Boolean,System.Int32,Un4seen.BassAsio.BASS_ASIO_CHANNELINFO)">
            <summary>
            Retrieves information on an Asio channel.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <param name="info">An instance of the <see cref="T:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO"/> class to store the information at.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Display the information of all channels:
            <code lang="C#">
            BASS_ASIO_CHANNELINFO info = new BASS_ASIO_CHANNELINFO();
            int chan = 0;
            while (true)
            {
            	if (!BassAsio.BASS_ASIO_ChannelGetInfo(false, chan, info))
            		break;
            	Console.WriteLine( info.ToString() );
            	chan++;
            }
            </code>
            <code lang="VB">
            Dim info As New BASS_ASIO_CHANNELINFO()
            Dim chan As Integer = 0
            While True
              If Not BassAsio.BASS_ASIO_ChannelGetInfo(False, chan, info) Then
                Exit While
              End If
              Console.WriteLine(info.ToString())
              chan += 1
            End While
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetInfo(System.Boolean,System.Int32)">
            <summary>
            Retrieves information on an Asio channel.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <returns>If successful, an instance of the <see cref="T:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO"/> class is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Display the information of the first channel:
            <code lang="C#">
            BASS_ASIO_CHANNELINFO info = BassAsio.BASS_ASIO_ChannelGetInfo(false, 0);
            if (info != null)
            {
              Console.WriteLine( info.ToString() );
            }
            </code>
            <code lang="VB">
            Dim info As BASS_ASIO_CHANNELINFO = BassAsio.BASS_ASIO_ChannelGetInfo(False, 0)
            If Not (info Is Nothing) Then
              Console.WriteLine(info.ToString())
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnable(System.Boolean,System.Int32,Un4seen.BassAsio.ASIOPROC,System.IntPtr)">
            <summary>
            Enable/disable processing of an Asio channel.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <param name="proc">The user defined function to process the channel... <see langword="null"/> = disable the channel.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>All ASIO channels are mono. Stereo (and above) channels can be formed by joining multiple channels together using <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelJoin(System.Boolean,System.Int32,System.Int32)"/>.</para>
            <para>Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Start(System.Int32)"/> to begin processing the enabled channels.</para>
            <para>You might also use this function on an already enabled ASIO channel if you just want to change the <see cref="T:Un4seen.BassAsio.ASIOPROC"/> which should be used.
            However changing the callback procedure to <see langword="null"/> would disable the channel - which is only possible, if the ASIO device is stopped.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_START</term><description>The device has been started - it needs to be stopped before (dis)enabling channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            using Un4seen.Bass;
            using Un4seen.BassAsio;
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD);
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            if (stream != 0)
            {
            	// now setup ASIO
            	_myAsioProc = new ASIOPROC(AsioCallback);
            	// enable 1st output channel...(0=first)
            	BassAsio.BASS_ASIO_ChannelEnable(false, 0, _myAsioProc, new IntPtr(stream));
            	// and join the next channels to it
            	BassAsio.BASS_ASIO_ChannelJoin(false, 1, 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);
            	// and start playing it...start output using default buffer/latency
            	BassAsio.BASS_ASIO_Start(0);
            }
            ...
            private ASIOPROC _myAsioProc; // make it global, so that it can not be removed by the Garbage Collector
            private int AsioCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
            {
            	// Note: 'user' contains the underlying stream channel (see above)
            	// We can simply use the bass method to get some data from a decoding channel 
            	// and store it to the asio buffer in the same moment...
            	return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Imports Un4seen.Bass
            Imports Un4seen.BassAsio
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD)
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              ' now setup ASIO
              _myAsioProc = New ASIOPROC(AddressOf AsioCallback)
              ' enable 1st output channel...(0=first)
              BassAsio.BASS_ASIO_ChannelEnable(False, 0, _myAsioProc, New IntPtr(stream))
              ' and join the next channels to it
              BassAsio.BASS_ASIO_ChannelJoin(False, 1, 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)
              ' and start playing it...start output using default buffer/latency
              BassAsio.BASS_ASIO_Start(0)
            End If
            ...
            Private _myAsioProc As ASIOPROC ' make it global, so that it can not be removed by the Garbage Collector
            Private Function AsioCallback(input As Boolean, channel As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Integer
              ' Note: 'user' contains the underlying stream channel (see above)
              ' We can simply use the bass method to get some data from a decoding channel 
              ' and store it to the asio buffer in the same moment...
              Return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length)
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnableBASS(System.Boolean,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Enables a channel, and sets it to use a BASS channel.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <param name="handle">The BASS channel handle.</param>
            <param name="join">Join the next ASIO channels according to the number of audio channels in the BASS channel?</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function allows BASS channels to be used directly, without needing an <see cref="T:Un4seen.BassAsio.ASIOPROC"/> callback function. 
            The ASIO channel's format and rate are set accordingly. If the BASS channel is not mono then multiple ASIO channels should also be joined accordingly. 
            That can be done automatically via the <paramref name="join"/> parameter, or manually with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelJoin(System.Boolean,System.Int32,System.Int32)"/>. 
            If the device does not have enough channels, the BASSmix add-on can be used to downmix the BASS channel.</para>
            <para>In the case of output channels, the BASS channel must have the BASS_STREAM_DECODE flag set. 
            In the case of input channels, the BASS channel must be a 'push' stream, created with <see cref="M:Un4seen.Bass.Bass.BASS_StreamCreatePush(System.Int32,System.Int32,Un4seen.Bass.BASSFlag,System.IntPtr)"/>, which will receive the data from the input channel(s).</para>
            <para>Raw DSD streams are supported (with the BASSDSD add-on) but the device needs to have been successfully set to DSD mode first with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDSD(System.Boolean)"/>. 
            The device's sample rate should also be set to the DSD stream's rate (its BASS_ATTRIB_DSD_RATE attribute) via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetRate(System.Double)"/>.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS library is not loaded.</description></item>
            <item><term>BASS_ERROR_START</term><description>The device has been started - it needs to be stopped before (dis)enabling channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            <item><term>BASS_ERROR_HANDLE</term><description><paramref name="handle"/> is invalid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>8-bit BASS channels are not supported; the BASS_SAMPLE_FLOAT flag can be used to avoid them.</description></item>
            <item><term>BASS_ERROR_NOCHAN</term><description>The device does not have enough channels to accommodate the BASS channel.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelJoin(System.Boolean,System.Int32,System.Int32)">
            <summary>
            Join a channel to another.
            </summary>
            <param name="input">Dealing with input channels? <see langword="false"/> = output channels.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <param name="channel2">The channel to join it to... -1 = remove current join.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>All ASIO channels are mono. By joining them, stereo (and above) channels can be formed, making it simpler to process stereo (and above) sample data.</para>
            <para>By default, channels can only be joined to preceding channels. For example, channel 1 can be joined to channel 0, but not vice versa.
            The BASS_ASIO_JOINORDER flag can be used in the <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> call to remove that restriction. When joining a group of channels, there should be one channel enabled via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnable(System.Boolean,System.Int32,Un4seen.BassAsio.ASIOPROC,System.IntPtr)"/> with the rest joined to it - 
            do not join a channel to a channel that is itself joined to another channel. Mirror channels, setup using <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnableMirror(System.Int32,System.Boolean,System.Int32)"/>, cannot be joined with.</para>
            <para>If a channel has two or more other channels joined to it, then the joined channels will default to being in numerically ascending order in the <see cref="T:Un4seen.BassAsio.ASIOPROC"/> callback function's sample data unless the BASS_ASIO_JOINORDER flag was used in the <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> call, 
            in which case they will be in the order in which they were joined via this function. In the latter case, if this function is called on an already joined channel, the channel will be moved to the end of the joined group.</para>
            <para>While a channel is joined to another, it automatically takes on the attributes of the other channel - the other channel's settings determine the sample format, the sample rate and whether it is enabled.
            The volume setting remains individual though, allowing balance control over the joined channels.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_START</term><description>The device has been started - it needs to be stopped before (dis)enabling channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>It is not possible to join channels that do not have the same sample format.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // enable processing of output channel 0
            BassAsio.BASS_ASIO_ChannelEnable(false, 0, _myAsioProc, 0);
            // join channel 1 to it
            BassAsio.BASS_ASIO_ChannelJoin(false, 1, 0);
            </code>
            <code lang="VB">
            ' enable processing of output channel 0
            BassAsio.BASS_ASIO_ChannelEnable(False, 0, _myAsioProc, 0)
            ' join channel 1 to it
            BassAsio.BASS_ASIO_ChannelJoin(False, 1, 0)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetFormat(System.Boolean,System.Int32,Un4seen.BassAsio.BASSASIOFormat)">
            <summary>
            Sets a channel's sample format.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <param name="format">The sample format. One of the following (see <see cref="T:Un4seen.BassAsio.BASSASIOFormat"/>):
            <list type="table">
            <item><term>BASS_ASIO_FORMAT_16BIT</term><description>16-bit integer.</description></item>
            <item><term>BASS_ASIO_FORMAT_24BIT</term><description>24-bit integer.</description></item>
            <item><term>BASS_ASIO_FORMAT_32BIT</term><description>32-bit integer.</description></item>
            <item><term>BASS_ASIO_FORMAT_FLOAT</term><description>32-bit floating-point.</description></item>
            <item><term>BASS_ASIO_FORMAT_DSD_LSB</term><description>DSD with LSB first.</description></item>
            <item><term>BASS_ASIO_FORMAT_DSD_MSB</term><description>DSD with MSB first.</description></item>
            <item><term>BASS_ASIO_FORMAT_DITHER</term><description>flag: apply dither (TDPF) to the output.</description></item>
            </list>
            </param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>The sample format can vary between ASIO devices/drivers, which could mean a lot of extra/duplicate code being required. To avoid that extra work, BASSASIO can automatically convert the sample data, whenever necessary, to/from a format of your choice. 
            The native format of a channel can be retrieved via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetInfo(System.Boolean,System.Int32,Un4seen.BassAsio.BASS_ASIO_CHANNELINFO)"/>.</para>
            <para>The PCM format options are only available when the device's format is PCM, and the DSD format options are only available when the device's format is DSD. 
            If a device supports both, it can be switched between DSD and PCM via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetDSD(System.Boolean)"/>.</para>
            <para>For performance reasons, it's best not to use 24-bit sample data whenever possible, as 24-bit data requires a bit more processing than the other formats.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid, or <paramref name="format"/> is.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>Format conversion is not available for the channel's native sample format (please report).</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set output channel 0 to use floating-point sample data:
            <code lang="C#">
            BassAsio.BASS_ASIO_ChannelSetFormat(false, 0, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT);
            </code>
            <code lang="VB">
            BassAsio.BASS_ASIO_ChannelSetFormat(False, 0, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetRate(System.Boolean,System.Int32,System.Double)">
            <summary>
            Sets a channel's sample rate.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <param name="rate">The sample rate... 0 = device rate.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>For optimal quality and performance, it is best to set the device to the sample rate you want via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetRate(System.Double)"/>, but that's not always possible. 
            Which is where this function and resampling comes into play. 16 point sinc interpolation is used, giving a good blend of sound quality and performance. It is also SSE2 and 3DNow optimized for an extra boost with supporting CPUs.</para>
            <para>When a channel's sample rate is the same as the device rate, resampling is bypassed, so there's no unnecessary performance hit.</para>
            <para>Resampling is not supported when the sample format is DSD.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid, or <paramref name="rate"/> is below 0.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>Format conversion is not available for the channel's native sample format (please report).</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // set the device rate
            BassAsio.BASS_ASIO_SetRate(44100);
            // set the channel's rate
            BassAsio.BASS_ASIO_ChannelSetRate(false, 0, 44100);
            </code>
            <code lang="VB">
            ' set the device rate
            BassAsio.BASS_ASIO_SetRate(44100)
            ' set the channel's rate
            BassAsio.BASS_ASIO_ChannelSetRate(False, 0, 44100)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelReset(System.Boolean,System.Int32,Un4seen.BassAsio.BASSASIOReset)">
            <summary>
            Resets the attributes of a channel (or all channels).
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first, -1 = all channels.</param>
            <param name="flags">The attributes to reset. A combination of the following (see <see cref="T:Un4seen.BassAsio.BASSASIOReset"/>):
            <list type="table">
            <item><term>BASS_ASIO_RESET_ENABLE</term><description>Disable the channel.</description></item>
            <item><term>BASS_ASIO_RESET_JOIN</term><description>Unjoin the channel.</description></item>
            <item><term>BASS_ASIO_RESET_PAUSE</term><description>Unpause the channel.</description></item>
            <item><term>BASS_ASIO_RESET_FORMAT</term><description>Set the channel's sample format to the native format.</description></item>
            <item><term>BASS_ASIO_RESET_RATE</term><description>Set the channel's sample rate to the device rate.</description></item>
            <item><term>BASS_ASIO_RESET_VOLUME</term><description>Set the channel's volume to normal (1.0).</description></item>
            <item><term>BASS_ASIO_RESET_JOINED</term><description>Also reset any channels that are joined to the specified channel. This can be used in combination with BASS_ASIO_RESET_JOIN to unjoin all channels from the specified one.</description></item>
            </list>
            </param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>When resetting all channels (channel = -1), the resetting only applies to all channels of the specified type, ie. input or output, not both.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid, or <paramref name="flags"/> is.</description></item>
            <item><term>BASS_ERROR_START</term><description>The device has been started - it needs to be stopped before disabling or unjoining channels.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Disable all output channels and remove all joins between them:
            <code lang="C#">
            BassAsio.BASS_ASIO_ChannelReset(false, -1, BASSASIOReset.BASS_ASIO_RESET_ENABLE | BASSASIOReset.BASS_ASIO_RESET_JOIN);
            </code>
            <code lang="VB">
            BassAsio.BASS_ASIO_ChannelReset(False, -1, BASSASIOReset.BASS_ASIO_RESET_ENABLE Or BASSASIOReset.BASS_ASIO_RESET_JOIN);
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelPause(System.Boolean,System.Int32)">
            <summary>
            Suspends processing of a channel (or all channels).
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first, -1 = all channels.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>Channels can only be disabled when the device is stopped. When you want to stop processing only some of the enabled channels, there are few ways that could be done. You could quickly stop the device, disable the unwanted channels, and restart the device. 
            In the case of output channels, you could fill the channels' buffers with silence (0s) in the <see cref="T:Un4seen.BassAsio.ASIOPROC"/>. Or you could pause the channels, using this function. 
            The less channels BASSASIO has to process, the less CPU it'll use, so stopping and restarting the device would be the most efficient, but that could cause a slight break in the sound of the other channels. 
            Filling the buffers with silence is the least efficient, as BASSASIO will still process the data as if it was "normal", but it does mean that other channels are unaffected. 
            Pausing is a compromise between the two - the channels will still be enabled, but BASSASIO will bypass any additional processing (resampling/etc) that may normally be required.</para>
            <para>Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelReset(System.Boolean,System.Int32,Un4seen.BassAsio.BASSASIOReset)"/> to resume processing of a paused channel.</para>
            <para>When pausing all channels (channel = -1), it only applies to all channels of the specified type, ie. input or output, not both.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelIsActive(System.Boolean,System.Int32)">
            <summary>
            Checks if a channel is enabled for processing.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <returns>The return value is one of the folowing (see <see cref="T:Un4seen.BassAsio.BASSASIOActive"/>):
            <list type="table">
            <item><term>BASS_ASIO_ACTIVE_DISABLED</term><description>The channel is not enabled.</description></item>
            <item><term>BASS_ASIO_ACTIVE_ENABLED</term><description>The channel is enabled.</description></item>
            <item><term>BASS_ASIO_ACTIVE_PAUSED</term><description>The channel is enabled and paused.</description></item>
            </list>
            </returns>
            <remarks>
            When a channel is joined to another, the status of the other channel is returned, as that is what determines whether the channel is enabled for processing - whether it's been enabled itself is of no consequence while it is joined to another. 
            For example, if channel B is joined to channel A, and channel A is not enabled, then neither is channel B.
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetFormat(System.Boolean,System.Int32)">
            <summary>
            Retrieves a channel's sample format.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <returns>If an error occurs, -1 (BASS_ASIO_FORMAT_UNKNOWN) is returned, use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.
            <para>If successful, one of the following is returned (see <see cref="T:Un4seen.BassAsio.BASSASIOFormat"/>):
            <list type="table">
            <item><term>BASS_ASIO_FORMAT_16BIT</term><description>16-bit integer.</description></item>
            <item><term>BASS_ASIO_FORMAT_24BIT</term><description>24-bit integer.</description></item>
            <item><term>BASS_ASIO_FORMAT_32BIT</term><description>32-bit integer.</description></item>
            <item><term>BASS_ASIO_FORMAT_FLOAT</term><description>32-bit floating-point.</description></item>
            <item><term>BASS_ASIO_FORMAT_DSD_LSB</term><description>DSD with LSB first.</description></item>
            <item><term>BASS_ASIO_FORMAT_DSD_MSB</term><description>DSD with MSB first.</description></item>
            <item><term>BASS_ASIO_FORMAT_UNKNOWN</term><description>Unknown format, an error occured.</description></item>
            </list>
            </para>
            </returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetRate(System.Boolean,System.Int32)">
            <summary>
            Retrieves a channel's sample rate.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <returns>If succesful, the channel's sample rate is returned (0 = device rate), else -1 is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetLevel(System.Boolean,System.Int32)">
            <summary>
            Retrieves the level (peak amplitude) of a channel.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first. The <see cref="F:Un4seen.BassAsio.BASSASIOLevel.BASS_ASIO_LEVEL_RMS"/> flag can optionally be used to get the RMS level, otherwise the peak level is given.</param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code. 
            If successful, the level of the channel is returned, ranging from 0 (silent) to 1 (max). If the channel's native sample format is floating-point, it is actually possible for the level to go above 1.</returns>
            <remarks>This function measures the level of a single channel, and is not affected by any other channels that are joined with it.
            <para>Volume settings made via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetVolume(System.Boolean,System.Int32,System.Single)"/> affect the level reading of output channels, but not input channels.</para>
            <para>When an input channel is paused, it is still possible to get its level. Paused output channels will have a level of 0.</para>
            <para>Level retrieval is not supported when the sample format is DSD.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            <item><term>BASS_ERROR_START</term><description>The device hasn't been started, or the channel isn't enabled.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>Level retrieval is not supported for the channel's sample format (please report).</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            // get the linear level
            float level = BassAsio.BASS_ASIO_ChannelSetVolume(false, 0);
            // translate it to logarithmic dB 
            double db = 20.0 * Math.Log10(level);
            </code>
            <code lang="VB">
            ' get the linear level
            Dim level As Single = BassAsio.BASS_ASIO_ChannelSetVolume(False, 0)
            ' translate it to logarithmic dB 
            Dim db As Double = 20.0 * Math.Log10(level)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnableMirror(System.Int32,System.Boolean,System.Int32)">
            <summary>
            Enables an output channel, and makes it mirror another channel.
            </summary>
            <param name="channel">The output channel number... 0 = first.</param>
            <param name="input2">Mirroring an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel2">The channel to mirror.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This function allows an input or output channel to be duplicated in other output channel. This can be achieved using normal <see cref="T:Un4seen.BassAsio.ASIOPROC"/> processing, but it's more efficient to let BASSASIO simply copy the data from one channel to another.</para>
            <para>Mirror channels can't be joined together to form multi-channel mirrors. Instead, to mirror multiple channels, an individual mirror should be setup for each of them.</para>
            <para>After <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Start(System.Int32)"/> has been called to begin processing, it's not possible to setup new mirror channels, but it is still possible to change the channel that a mirror is mirroring.</para>
            <para>When mirroring an output channel that hasn't been enabled, the mirror channel will just produce silence. When mirroring an input channel that hasn't already been enabled, the channel is automatically enabled for processing when <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Start(System.Int32)"/> is called, so that it can be mirrored. 
            If the mirror is switched to a disabled input channel once processing has begun, then it will produce silence.</para>
            <para>A mirror channel can be made to have a different volume level to the channel that it's mirroring, using <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetVolume(System.Boolean,System.Int32,System.Single)"/>. The volume setting is cumulative. 
            For example, if the mirror channel has a volume setting of 0.5 and the mirrored channel has a volume setting of 0.4, the effective volume of the mirror channel will be 0.2 (0.5 x 0.4).</para>
            <para><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnable(System.Boolean,System.Int32,Un4seen.BassAsio.ASIOPROC,System.IntPtr)"/> can be used to disable a mirror channel.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_START</term><description>The device has been started - it needs to be stopped before enabling channels.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>At least one of the channels is invalid.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>It is not possible to mirror channels that do not have the same sample format.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Enable output channel 0, and mirror it to channel 1 for stereo output:
            <code lang="C#">
            using Un4seen.Bass;
            using Un4seen.BassAsio;
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD);
            ...
            int stream = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                              BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            if (stream != 0)
            {
            	// now setup ASIO
            	_myAsioProc = new ASIOPROC(AsioCallback);
            	// enable 1st output channel...(0=first)
            	BassAsio.BASS_ASIO_ChannelEnable(false, 0, _myAsioProc, new IntPtr(stream));
            	// mirror it to channel 1
            	BassAsio.BASS_ASIO_ChannelEnableMirror(1, false, 0);
            	// and start playing it...start output using default buffer/latency
            	BassAsio.BASS_ASIO_Start(0);
            }
            ...
            private ASIOPROC _myAsioProc; // make it global, so that it can not be removed by the GC
            private int AsioCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
            {
            	// Note: 'user' contains the underlying stream channel (see above)
            	// We can simply use the bass method to get some data from a decoding channel 
            	// and store it to the asio buffer in the same moment...
            	return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Imports Un4seen.Bass
            Imports Un4seen.BassAsio
            ...
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            BassAsio.BASS_ASIO_Init(0, BASSASIOInit.BASS_ASIO_THREAD)
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile("test.mp3", 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              ' now setup ASIO
              _myAsioProc = New ASIOPROC(AddressOf AsioCallback)
              ' enable 1st output channel...(0=first)
              BassAsio.BASS_ASIO_ChannelEnable(False, 0, _myAsioProc, New IntPtr(stream))
              // mirror it to channel 1
              BassAsio.BASS_ASIO_ChannelEnableMirror(1, False, 0)
              ' and start playing it...start output using default buffer/latency
              BassAsio.BASS_ASIO_Start(0)
            End If
            ...
            Private _myAsioProc As ASIOPROC ' make it global, so that it can not be removed by the GC
            Private Function AsioCallback(input As Boolean, channel As Integer, buffer As IntPtr, 
                                          length As Integer, user As IntPtr) As Integer
              ' Note: 'user' contains the underlying stream channel (see above)
              ' We can simply use the bass method to get some data from a decoding channel 
              ' and store it to the asio buffer in the same moment...
              Return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length)
            End Function
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetVolume(System.Boolean,System.Int32,System.Single)">
            <summary>
            Sets a channel's volume.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first, -1 = master.</param>
            <param name="volume">The volume level... 0 (silent)...1.0 (normal). Above 1.0 amplifies the sound.</param>
            <returns>If succesful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para></para>
            <para>Apart from the master volume (channel = -1), this function applies a volume level to a single channel, and does not affect any other channels that are joined with it. 
            This allows balance control over joined channels, by setting the individual volume levels accordingly. The final level of a channel is <i>master volume x channel volume</i>.</para>
            <para>The volume "curve" is linear, but logarithmic levels can be easily used. See the example below.</para>
            <para>ASIO drivers do not provide volume control themselves, so the volume adjustments are applied to the sample data by BASSASIO. 
            This also means that changes do not persist across sessions, and the channel volume levels will always start at 1.0.</para>
            <para>When the channel's sample format is DSD, a 0 volume setting will mute the channel and anything else will be treated as 1.0 (normal).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid, or <paramref name="volume"/> is below 0.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            Set a logarithmic volume level:
            <code lang="C#">
            // translate logarithmic dB level to linear
            float volume = (float)Math.Pow(10d, db / 20d);
            // apply it
            BassAsio.BASS_ASIO_ChannelSetVolume(false, 0 , volume);
            </code>
            <code lang="VB">
            ' translate logarithmic dB level to linear
            Dim volume As Single = CSng(Math.Pow(10.0, db / 20.0))
            ' apply it
            BassAsio.BASS_ASIO_ChannelSetVolume(False, 0, volume)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetVolume(System.Boolean,System.Int32)">
            <summary>
            Retrieves a channel's volume setting.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first, -1 = master.</param>
            <returns>If successful, the channel's volume setting is returned, else -1 is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>To set a channel volume use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetVolume(System.Boolean,System.Int32,System.Single)"/>.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>The <paramref name="input"/> and <paramref name="channel"/> combination is invalid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="F:Un4seen.BassAsio.BassAsio.BASSASIOVERSION">
            <summary>
            Current BASSASIO version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSWMA from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassWma.LoadMe();
            ...
            // when not used anymore...
            BassWma.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSWMA from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassWma.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassWma.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsio.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.BassAsio.BassAsio.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.BassAsio.BassAsio.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.BassAsio.BASSASIOInit">
            <summary>
            Initialization flags to be used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/>
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOInit.BASS_ASIO_DEFAULT">
            <summary>
            Host the driver in the current thread.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOInit.BASS_ASIO_THREAD">
            <summary>
            Host the driver in a dedicated thread.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOInit.BASS_ASIO_JOINORDER">
            <summary>
            Order joined channels by when they were joined.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOInit.BASS_ASIO_VOLRAMP">
            <summary>
            Ramp volume changes (of output channels)?
            <para>Volume changes take effect from the next ASIO buffer update cycle.
            BASSASIO doesn't currently ramp volume changes, so there will be a sudden jump/step between the old and new levels, which can cause a click if the step is large.</para>
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.BASSASIOFormat">
            <summary>
            BassAsio sample formats to be used with <see cref="T:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO"/> and <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetInfo(System.Boolean,System.Int32,Un4seen.BassAsio.BASS_ASIO_CHANNELINFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFormat.BASS_ASIO_FORMAT_UNKNOWN">
            <summary>
            Unknown format. Error.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFormat.BASS_ASIO_FORMAT_16BIT">
            <summary>
            16-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFormat.BASS_ASIO_FORMAT_24BIT">
            <summary>
            24-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFormat.BASS_ASIO_FORMAT_32BIT">
            <summary>
            32-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT">
            <summary>
            32-bit floating-point.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFormat.BASS_ASIO_FORMAT_DSD_LSB">
            <summary>
            DSD (LSB 1st)
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFormat.BASS_ASIO_FORMAT_DSD_MSB">
            <summary>
            DSD (MSB 1st)
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFormat.BASS_ASIO_FORMAT_DITHER">
            <summary>
            Flag: apply dither (TPDF) when converting from floating-point to integer.
            <para>Dither is optional rather than automatic because it destroys bit-perfect output; you probably don't want to enable it unless you're applying DSP (including volume changes).
            When the output is floating-point (eg. in shared mode), the flag will have no effect.</para>
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.BASSASIOReset">
            <summary>
            BassAsio attributes to be used when to reset a channel with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelReset(System.Boolean,System.Int32,Un4seen.BassAsio.BASSASIOReset)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOReset.BASS_ASIO_RESET_ENABLE">
            <summary>
            Disable the channel.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOReset.BASS_ASIO_RESET_JOIN">
            <summary>
            Unjoin the channel.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOReset.BASS_ASIO_RESET_PAUSE">
            <summary>
            Unpause the channel.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOReset.BASS_ASIO_RESET_FORMAT">
            <summary>
            Set the channel's sample format to the native format.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOReset.BASS_ASIO_RESET_RATE">
            <summary>
            Set the channel's sample rate to the device rate.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOReset.BASS_ASIO_RESET_VOLUME">
            <summary>
            Reset volume to 1.0
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOReset.BASS_ASIO_RESET_JOINED">
            <summary>
            Flag: apply to joined channels too
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.BASSASIOActive">
            <summary>
            BassAsio active values return by <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelIsActive(System.Boolean,System.Int32)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOActive.BASS_ASIO_ACTIVE_DISABLED">
            <summary>
            The channel is not enabled.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOActive.BASS_ASIO_ACTIVE_ENABLED">
            <summary>
            The channel is enabled.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOActive.BASS_ASIO_ACTIVE_PAUSED">
            <summary>
            The channel is enabled and paused.
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.BASSASIONotify">
            <summary>
            BassAsio notify values as used in the <see cref="T:Un4seen.BassAsio.ASIONOTIFYPROC"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIONotify.BASS_ASIO_NOTIFY_RATE">
            <summary>
            The device's sample rate has changed. The new rate is available from <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetRate"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIONotify.BASS_ASIO_NOTIFY_RESET">
            <summary>
            The driver has requested a reset/reinitialization; for example, following a change of the default buffer size. This request can be ignored, but if a reinitialization is performed, it should not be done within the callback.
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.BASSASIOFuture">
            <summary>
            BassAsio Future values that might be used with the <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Future(System.Int32,System.IntPtr)"/> method.
            <para>Note: Other/Additional values might be possible - see your drivers manual for details.</para>
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_EnableTimeCodeRead">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_DisableTimeCodeRead">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_SetInputMonitor">
            <summary>
            ASIOInputMonitor* in params
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_Transport">
            <summary>
            ASIOTransportParameters* in params
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_SetInputGain">
            <summary>
            ASIOChannelControls* in params, apply gain
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_GetInputMeter">
            <summary>
            ASIOChannelControls* in params, fill meter
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_SetOutputGain">
            <summary>
            ASIOChannelControls* in params, apply gain
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_GetOutputMeter">
            <summary>
            ASIOChannelControls* in params, fill meter
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_CanInputMonitor">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_CanTimeInfo">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_CanTimeCode">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_CanTransport">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_CanInputGain">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_CanInputMeter">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_CanOutputGain">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_CanOutputMeter">
            <summary>
            No arguments
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_SetIoFormat">
            <summary>
            DSD support: ASIOIoFormat * in params
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_GetIoFormat">
            <summary>
            DSD support: ASIOIoFormat * in params
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOFuture.BASS_ASIO_FUTURE_CanDoIoFormat">
            <summary>
            DSD support: ASIOIoFormat * in params
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.BASSASIOLevel">
            <summary>
            Level retrieval flags (to be used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetLevel(System.Boolean,System.Int32)"/>).
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOLevel.BASS_ASIO_LEVEL_PEAK">
            <summary>
            Retrieves peak levels
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASSASIOLevel.BASS_ASIO_LEVEL_RMS">
            <summary>
            Optional Flag: If set it returns RMS levels instead of peak leavels
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.BASS_ASIO_DEVICEINFO">
            <summary>
            Used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDeviceInfo(System.Int32,Un4seen.BassAsio.BASS_ASIO_DEVICEINFO)"/> to retrieve information on an asio device.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_DEVICEINFO.name">
            <summary>
            The description of the device.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_DEVICEINFO.driver">
            <summary>
            The filename of the driver being used.
            <para>Further information can be obtained from the file using the GetFileVersionInfo Win32 API function.</para>
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BASS_ASIO_DEVICEINFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BASS_ASIO_DEVICEINFO.ToString">
            <summary>
            A description of the decive info object (name).
            </summary>
            <returns>A description of the decive info object (name).</returns>
        </member>
        <member name="T:Un4seen.BassAsio.BASS_ASIO_INFO">
            <summary>
            Used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetInfo(Un4seen.BassAsio.BASS_ASIO_INFO)"/> to retrieve information on the current device.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_INFO.name">
            <summary>
            The name of the device/driver.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_INFO.version">
            <summary>
            The driver version.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_INFO.inputs">
            <summary>
            The number of input channels available.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_INFO.outputs">
            <summary>
            The number of output channels available.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_INFO.bufmin">
            <summary>
            The minimum buffer length, in samples.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_INFO.bufmax">
            <summary>
            The maximum buffer length, in samples.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_INFO.bufpref">
            <summary>
            The preferred/default buffer length, in samples.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_INFO.bufgran">
            <summary>
            The buffer length granularity, that is the smallest possible length change... -1 = the possible buffer lengths increase in powers of 2.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_INFO.initflags">
            <summary>
            The flags parameter of the <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> call.
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BASS_ASIO_INFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BASS_ASIO_INFO.ToString">
            <summary>
            A description of the decive info object (the driver/device name).
            </summary>
            <returns>The name of the device/driver.</returns>
        </member>
        <member name="T:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO">
            <summary>
            Used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelGetInfo(System.Boolean,System.Int32,Un4seen.BassAsio.BASS_ASIO_CHANNELINFO)"/> to retrieve information on the current device.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO.group">
            <summary>
            The channel's group.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO.format">
            <summary>
            The channel's sample format, one of the following (see <see cref="T:Un4seen.BassAsio.BASSASIOFormat"/>):
            <list type="table">
            <item><term>BASS_ASIO_FORMAT_16BIT</term><description>16-bit integer.</description></item>
            <item><term>BASS_ASIO_FORMAT_24BIT</term><description>24-bit integer.</description></item>
            <item><term>BASS_ASIO_FORMAT_32BIT</term><description>32-bit integer.</description></item>
            <item><term>BASS_ASIO_FORMAT_FLOAT</term><description>32-bit floating-point.</description></item>
            <item><term>BASS_ASIO_FORMAT_DSD_LSB</term><description>DSD with LSB first.</description></item>
            <item><term>BASS_ASIO_FORMAT_DSD_MSB</term><description>DSD with MSB first.</description></item>
            </list>
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO.name">
            <summary>
            The name of the channel.
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BASS_ASIO_CHANNELINFO.ToString">
            <summary>
            A description of the channel info object (name).
            </summary>
            <returns>The name of the channel.</returns>
        </member>
        <member name="T:Un4seen.BassAsio.ASIOInputMonitor">
            <summary>
            Used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Future(System.Int32,System.IntPtr)"/> and the SetInputMonitor selector.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOInputMonitor.input">
            <summary>
            this input was set to monitor (or off), -1: all
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOInputMonitor.output">
            <summary>
            suggested output for monitoring the input (if so)
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOInputMonitor.gain">
            <summary>
            suggested gain, ranging 0 - 0x7fffffffL (-inf to +12 dB)
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOInputMonitor.state">
            <summary>
            TRUE = on, FALSE = off
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOInputMonitor.pan">
            <summary>
            suggested pan, 0 = all left, 0x7fffffff = right
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.ASIOInputMonitor.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.ASIOChannelControls">
            <summary>
            Used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Future(System.Int32,System.IntPtr)"/> and the Get/SetInput resp. Get/SetOutput selector.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOChannelControls.channel">
            <summary>
            the channel index
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOChannelControls.isInput">
            <summary>
            TRUE = input, FALSE = Output
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOChannelControls.gain">
            <summary>
            the gain value, ranging 0 - 0x7fffffffL (-inf to +12 dB)
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOChannelControls.meter">
            <summary>
            returned meter value, ranging 0 - 0x7fffffffL (-inf to +12 dB)
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOChannelControls.future">
            <summary>
            up to 32 chars
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.ASIOChannelControls.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.ASIOTransportParameters">
            <summary>
            Used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Future(System.Int32,System.IntPtr)"/> and the Transport selector.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOTransportParameters.command">
            <summary>
            One of the following command values (other might be optinally available):
            <para>
            <list type="table">
            <item><term>Start</term><description>1</description></item>
            <item><term>Stop</term><description>2</description></item>
            <item><term>Locate</term><description>3</description></item>
            <item><term>PunchIn</term><description>4</description></item>
            <item><term>PunchOut</term><description>5</description></item>
            <item><term>ArmOn</term><description>6</description></item>
            <item><term>ArmOff</term><description>7</description></item>
            <item><term>MonitorOn</term><description>8</description></item>
            <item><term>MonitorOff</term><description>9</description></item>
            <item><term>Arm</term><description>10</description></item>
            <item><term>Monitor</term><description>11</description></item>
            </list>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOTransportParameters.samplePosition">
            <summary>
            number of samples data type is 64 bit integer
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOTransportParameters.track">
            <summary>
            track index
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOTransportParameters.trackSwitches">
            <summary>
            512 tracks on/off
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOTransportParameters.future">
            <summary>
            up to 64 chars
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.ASIOTransportParameters.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.ASIOIoFormat">
            <summary>
            Used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Future(System.Int32,System.IntPtr)"/> and the DSD IoFormat selector.
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOIoFormat.formatType">
            <summary>
            One of the following format values:
            <para>
            <list type="table">
            <item><term>FormatInvalid</term><description>-1</description></item>
            <item><term>PCMFormat </term><description>0</description></item>
            <item><term>DSDFormat </term><description>1</description></item>
            </list>
            </para>
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.ASIOIoFormat.future">
            <summary>
            up to 508 chars
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.ASIOIoFormat.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.ASIOPROC">
            <summary>
            User defined ASIO channel callback function (to be used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnable(System.Boolean,System.Int32,Un4seen.BassAsio.ASIOPROC,System.IntPtr)"/>).
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel.</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <param name="buffer">The pointer to the buffer containing the recorded data (input channel), or in which to put the data to output (output channel).</param>
            <param name="length">The number of bytes to process.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnable(System.Boolean,System.Int32,Un4seen.BassAsio.ASIOPROC,System.IntPtr)"/> was called.</param>
            <returns>In the case of an output channel, the number of bytes written to the buffer (a negative number will be treated as 0). The return value is ignored with input channels.</returns>
            <remarks>
            <para>ASIO is a low latency system, so a channel callback function should obviously be as quick as possible. <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetCPU"/> can be used to monitor that.</para>
            <para>When multiple channels are joined together, the sample data of the channels is interleaved; the channel that was enabled via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnable(System.Boolean,System.Int32,Un4seen.BassAsio.ASIOPROC,System.IntPtr)"/> comes first, followed by the channels that have been joined to it.
            The order of the joined channels defaults to numerically ascending order unless the BASS_ASIO_JOINORDER flag was used in the <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Init(System.Int32,Un4seen.BassAsio.BASSASIOInit)"/> call, in which case they will be in the order in which <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelJoin(System.Boolean,System.Int32,System.Int32)"/> was called to join then.</para>
            <para>When an output channel's function returns less data than requested, the remainder of the buffer is filled with silence, and some processing is saved by that. 
            When 0 is returned, the level of processing is the same as if the channel had been paused with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelPause(System.Boolean,System.Int32)"/>, ie. the ASIO buffer is simply filled with silence and all additional processing (resampling/etc) is bypassed.</para>
            <para>ASIO is a low latency system, so a channel callback function should obviously be as quick as possible. 
            <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetCPU"/> can be used to monitor that. Do not call the <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Stop"/> or <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Free"/> functions from within an ASIO callback. 
            Also, if it is an output channel, <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetFormat(System.Boolean,System.Int32,Un4seen.BassAsio.BASSASIOFormat)"/> and <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelSetRate(System.Boolean,System.Int32,System.Double)"/> should not be used on the channel being processed by the callback.</para>
            <para>Prior to calling this function, BASSASIO will set the thread's device context to the device that the channel belongs to. So when using multiple devices, <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDevice"/> can be used to determine which device the channel is on.</para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            </remarks>
            <example>
            Streaming a file via BASS to ASIO:
            <code lang="C#">
            int stream = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                              BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            if (stream != 0)
            {
              // now setup ASIO
              _myAsioProc = new ASIOPROC(AsioCallback);
              // 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, new IntPtr(stream));
              // and join the next channels to it
              for (int a=1; a&lt;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
              BassAsio.BASS_ASIO_Start(0);
            }
            ...
            private ASIOPROC _myAsioProc; // make it global, so that it can not be removed by the GC
            private int AsioCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
            {
              // Note: 'user' contains the underlying stream channel (see above)
              // We can simply use the bass method to get some data from a decoding channel 
              // and store it to the asio buffer in the same moment...
              return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length);
            }
            </code>
            <code lang="VB">
            Dim stream As Integer = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              ' now setup ASIO
              _myAsioProc = New ASIOPROC(AsioCallback)
              ' get the stream channel info
              Dim info As BASS_CHANNELINFO = Bass.BASS_ChannelGetInfo(stream)
              ' enable 1st output channel...(0=first)
              BassAsio.BASS_ASIO_ChannelEnable(False, 0, _myAsioProc, New IntPtr(stream))
              ' and join the next channels to it
              Dim a As Integer
              For a = 1 To info.chans - 1
                BassAsio.BASS_ASIO_ChannelJoin(False, a, 0)
              Next a
              ' 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, CDbl(info.freq))
              ' try to set the device rate too (saves resampling)
              BassAsio.BASS_ASIO_SetRate(CDbl(info.freq))
              ' and start playing it...start output using default buffer/latency
              BassAsio.BASS_ASIO_Start(0)
            End If
            ...
            Private _myAsioProc As ASIOPROC ' make it global, so that it can not be removed by the GC
            Private Function AsioCallback(input As Boolean, channel As Integer, 
                                          buffer As IntPtr, length As Integer, user As IntPtr) As Integer
              ' Note: 'user' contains the underlying stream channel (see above)
              ' We can simply use the bass method to get some data from a decoding channel 
              ' and store it to the asio buffer in the same moment...
              Return Bass.BASS_ChannelGetData(user.ToInt32(), buffer, length)
            End Function
            </code>
            Setting up a full-duplex input to output handler:
            <code lang="C#">
            private byte[] _fullDuplexAsioBuffer;
            private int _numchans = 2;
            
            private void SetFullDuplex()
            {
                BASS_ASIO_INFO info = BassAsio.BASS_ASIO_GetInfo();
                _fullDuplexAsioBuffer = new byte[info.bufmax * _numchans * 4];
                ...
            }
            
            private int AsioToAsioFullDuplexCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
            {
                if (input)
                {
                    if (_fullDuplexAsioBuffer.Length &lt; length)
                        _fullDuplexAsioBuffer = new byte[length];
                    Marshal.Copy(buffer, _fullDuplexAsioBuffer, 0, length);
                    return 0;
                }
                else
                {
                    if (length &gt; _fullDuplexAsioBuffer.Length)
                        length = _fullDuplexAsioBuffer.Length;
                    Marshal.Copy(_fullDuplexAsioBuffer, 0, buffer, length);
                    return length;
                }
            }
            </code>
            <code lang="VB">
            Private _fullDuplexAsioBuffer As Byte()
            Private _numchans As Integer = 2
            
            Private Sub SetFullDuplex() 
                Dim info As BASS_ASIO_INFO = BassAsio.BASS_ASIO_GetInfo() 
                _fullDuplexAsioBuffer = New Byte(info.bufmax * _numchans * 4 - 1) {}
                ...
            End Sub 
            
            Private Function AsioToAsioFullDuplexCallback(ByVal input As Boolean, ByVal channel As Integer, 
                                                          ByVal buffer As IntPtr, ByVal length As Integer, 
                                                          ByVal user As IntPtr) As Integer 
                If input Then 
                    If _fullDuplexAsioBuffer.Length &lt; length Then
                       _fullDuplexAsioBuffer = New Byte(length - 1) {} 
                    End If 
                    Marshal.Copy(buffer, _fullDuplexAsioBuffer, 0, length) 
                    Return 0 
                Else 
                    If length &gt; _fullDuplexAsioBuffer.Length Then 
                       length = _fullDuplexAsioBuffer.Length 
                    End If 
                    Marshal.Copy(_fullDuplexAsioBuffer, 0, buffer, length) 
                    Return length 
                End If 
            End Function 
            </code>
            </example>
        </member>
        <member name="T:Un4seen.BassAsio.ASIONOTIFYPROC">
            <summary>
            User defined notification callback function (to be used with <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetNotify(Un4seen.BassAsio.ASIONOTIFYPROC,System.IntPtr)"/>).
            </summary>
            <param name="notify">The notification, one of the following:
            <list type="table">
            <item><term>BASS_ASIO_NOTIFY_RATE</term><description>The device's sample rate has changed. The new rate is available from <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetRate"/>.</description></item>
            <item><term>BASS_ASIO_NOTIFY_RESET</term><description>The driver has requested a reset/reinitialization; for example, following a change of the default buffer size. This request can be ignored, but if a reinitialization is performed, it should not be done within the callback.</description></item>
            </list>
            </param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_SetNotify(Un4seen.BassAsio.ASIONOTIFYPROC,System.IntPtr)"/> was called.</param>
            <remarks>
            When using multiple devices, <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetDevice"/> can be used to determine which the notification applies to.
            </remarks>
        </member>
        <member name="T:Un4seen.BassAsio.BassAsioHandler">
            <summary>
            This class provides ready-made members for direct and more simple ASIO usage together with BASS channels.
            </summary>
            <remarks>
            You might use this class for almost all use cases in terms of Asio handling, e.g.:
            <list type="table">
            <listheader><term>Scenario:</term><description>How-To:</description></listheader>
            <item><term>Asio output</term><description>A Bass decoding channel or a recording channel feeding Asio output.
            <para>Simply use the corresponding output constructor to specify the Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/> and <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> as well the <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> to use and you are done.
            The <see cref="P:Un4seen.BassAsio.BassAsioHandler.SampleRate"/>, <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> and <see cref="P:Un4seen.BassAsio.BassAsioHandler.Format"/> will automatically be aligned. Use the <see cref="M:Un4seen.BassAsio.BassAsioHandler.AssignOutputChannel(System.Int32)"/> method to change the underlying bass channel on the fly.</para>
            </description></item>
            <item><term>Asio input</term><description>Directly record from Asio input.
            <para>Simply use the corresponding input constructor to specify the Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/>, <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/>, <see cref="P:Un4seen.BassAsio.BassAsioHandler.SampleRate"/>, <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> and <see cref="P:Un4seen.BassAsio.BassAsioHandler.Format"/> you want to record at.
            To retrieve the input sample data use the <see cref="P:Un4seen.BassAsio.BassAsioHandler.InputChannel"/> channel (e.g. setup an <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)">own DSP</see>, use it with the <see cref="T:Un4seen.Bass.Misc.WaveWriter"/> or <see cref="T:Un4seen.Bass.Misc.BaseEncoder">Encoder Framework</see>).</para>
            </description></item>
            <item><term>Asio input, full-duplex to Asio</term><description>Monitor your Asio input on any Asio output.
            <para>To enable full-duplex just call the Asio overload of the <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/> method (when done call <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveFullDuplex(System.Boolean)"/>).</para>
            </description></item>
            <item><term>Asio input, full-duplex to BASS</term><description>Monitor your Asio input on any BASS device.
            <para>To enable full-duplex just call the bass overload of the <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/> method (when done call <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveFullDuplex(System.Boolean)"/>).</para>
            </description></item>
            <item><term>DSP/FX</term><description>You can set any DSP/FX on either the input and/or the output (full-duplex).
            <para>See <see cref="P:Un4seen.BassAsio.BassAsioHandler.InputChannel"/> and <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> for more details.</para>
            </description></item>
            In addition to the above this class supports overloading of the default Asio callbacks (<see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioOutputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>, <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioInputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>, <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioToAsioFullDuplexCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>, <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioToBassFullDuplexCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>).
            </list>
            <para>You might use the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Volume"/> and <see cref="P:Un4seen.BassAsio.BassAsioHandler.Pan"/> properties to easily control your Asio input/output settings.
            Asio mirrors are also supported via the <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetMirror(System.Int32)"/> and <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveMirror"/> methods. Mirrors have independent <see cref="P:Un4seen.BassAsio.BassAsioHandler.VolumeMirror"/> and <see cref="P:Un4seen.BassAsio.BassAsioHandler.PanMirror"/> settings.</para>
            <para>Asio channels can be paused and resumed at any time by using the <see cref="M:Un4seen.BassAsio.BassAsioHandler.Pause(System.Boolean)"/> method.
            To physically start the used Asio device the <see cref="M:Un4seen.BassAsio.BassAsioHandler.Start(System.Int32,System.Int32)"/> method might be used. <see cref="M:Un4seen.BassAsio.BassAsioHandler.Stop"/> will unjoin, disable and stop the Asio device (if really needed).</para>
            <para>Caution: Once you created an instance of this class, the respective ASIO channels are joined and enabled.
            The used ASIO channels will NOT be unjoined or disabled automatically when an instance of this class is being disposed by the .Net Garbage Collector!
            Call the <see cref="M:Un4seen.BassAsio.BassAsioHandler.Dispose"/> method manually to completely free all assigned ASIO channels, including any full-duplex and the mirror options.
            However, calling <see cref="M:Un4seen.BassAsio.BassAsioHandler.Dispose"/> will not stop the Asio device - this has to be done manually in any case (e.g. by calling <see cref="M:Un4seen.BassAsio.BassAsioHandler.Stop"/>)!</para>
            <para>Note: This class internally uses <see cref="N:Un4seen.Bass"/>, so you need to provide the native BASS.dll as well when using this class.</para>
            <para>The <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioOutputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>, <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioInputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>, <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioToAsioFullDuplexCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> and <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioToBassFullDuplexCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> callbacks are virtual methods 
            which might be overloaded if you want to derive your own ASIO handler with any special callback handling.</para>
            </remarks>
            <example>
            Automatic use of the BassAsioHandler (a Bass channel is feeding Asio output):
            <code lang="C#">
            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)
            {
            	// assign ASIO output to the first device and channel
            	// and assume the ASIO format, samplerate and number of channels from the BASS stream
            	_asio = new BassAsioHandler(0, 0, stream);
            	// start ASIO
            	_asio.Start(0);
            }
            </code>
            <code lang="VB">
            Private _asio As BassAsioHandler
            ...
            ' 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)
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              ' assign ASIO output to the first device and channel
              ' and assume the ASIO format, samplerate and number of channels from the BASS stream
              _asio = New BassAsioHandler(0, 0, stream)
              ' start ASIO
              _asio.Start(0)
            End If
            </code>
            Automatic use of the BassAsioHandler (Asio recording input, Asio full-duplex output):
            <code lang="C#">
            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);
            ...
            // assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = new BassAsioHandler(true, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000);
            // set the full-duplex option to the first ASIO output device and channel
            // the ASIO output format will aways be the same as the input for full-duplex
            _asio.SetFullDuplex(0, 0);
            // start ASIO
            _asio.Start(0);
            ...
            // when you want to disbale all associated channels, call:
            _asio.Dispose();
            </code>
            <code lang="VB">
            Private _asio As BassAsioHandler
            ...
            ' 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)
            ...
            ' assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = New BassAsioHandler(True, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000)
            ' set the full-duplex option to the first ASIO output device and channel
            ' the ASIO output format will aways be the same as the input for full-duplex
            _asio.SetFullDuplex(0, 0)
            ' start ASIO
            _asio.Start(0)
            ...
            ' when you want to disbale all associated channels, call:
            _asio.Dispose()
            </code>
            </example>
        </member>
        <member name="F:Un4seen.BassAsio.BassAsioHandler.UseDedicatedThreads">
            <summary>
            Gets or Sets, if the driver should be hosted in a dedicated thread.
            </summary>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.#ctor">
            <summary>
            Default constructor - leaving all defaults and not assigning any ASIO channel.
            </summary>
            <remarks>Use this constructor, if you for example want to leverage the <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioToBassFullDuplexCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/>, <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioInputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> or <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioToAsioFullDuplexCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> callback methods.
            In this case make sure to also set the <see cref="P:Un4seen.BassAsio.BassAsioHandler.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 <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>!
            </remarks>
            <example>Manual use of the BassAsioHandler:
            <code lang="C#">
            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&lt;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);
            }
            </code>
            <code lang="VB">
            Private _myAsioProc As ASIOPROC
            Private _asio As BassAsioHandler
            ...
            ' 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)
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              _asio = New BassAsioHandler()
              _asio.OutputChannel = stream
            
              ' now setup ASIO manually
              _myAsioProc = New ASIOPROC(AddressOf _asio.BassToAsioOutputCallback)
              ' get the stream channel info
              Dim info As BASS_CHANNELINFO = 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
              Dim a As Integer
              For a = 1 To info.chans - 1
                BassAsio.BASS_ASIO_ChannelJoin(False, a, 0)
              Next a
              ' 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, CDbl(info.freq))
              ' try to set the device rate too (saves resampling)
              BassAsio.BASS_ASIO_SetRate(CDbl(info.freq))
              ' and start playing it...start output using default buffer/latency
              _asio.Start(0)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.#ctor(System.Boolean,System.Int32,System.Int32,System.Int32,Un4seen.BassAsio.BASSASIOFormat,System.Double)">
            <summary>
            Creates an instance of the ASIO handler - initializing and enabling the given ASIO device and channel.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/>=an output channel, <see langword="true"/> = an input channel (in which case the <see cref="P:Un4seen.BassAsio.BassAsioHandler.UseInput"/> will automatically set to <see langword="true"/>, so that you can use the <see cref="P:Un4seen.BassAsio.BassAsioHandler.InputChannel"/>.).</param>
            <param name="asioDevice">The ASIO device to use (0=first).</param>
            <param name="asioChannel">The ASIO input/output channel number (0=first).</param>
            <param name="asioNumChans">The total number of ASIO channels to use (following channels will be joined - e.g. 2 for stereo).</param>
            <param name="asioFormat">The ASIO sample format to use for the channel(s) - see <see cref="T:Un4seen.BassAsio.BASSASIOFormat"/> for details.</param>
            <param name="asioSamplerate">The desired samplerate to use with the channel(s) - use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_GetRate"/> or -1 if uncertain and to prevent resampling.
            If the ASIO device samplerate could not be set to the desired samplerate, the device's current samplerate will be taken instead.</param>
            <remarks>
            Use this constructor for either manual Asio handler use or for Asio input recording.
            <para>The following will be done internally:</para>
            <para>1. The ASIO device will be initialized (if already done, the ASIO device will just be set).</para>
            <para>2. The ASIO device's samplerate will be set to the given <paramref name="asioSamplerate"/> - if the ASIO device samplerate could not be changed the device's current samplerate will be taken!</para>
            <para>3a. If input: use the <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioInputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> as the internal <see cref="T:Un4seen.BassAsio.ASIOPROC"/>. Also <see cref="P:Un4seen.BassAsio.BassAsioHandler.UseInput"/> will be set to <see langword="true"/>, so that you can use the <see cref="P:Un4seen.BassAsio.BassAsioHandler.InputChannel"/> to retrieve the recorded sample data.</para>
            <para>3b. If output: use the <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioOutputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> as the internal <see cref="T:Un4seen.BassAsio.ASIOPROC"/>.</para>
            <para>4. If the ASIO device was already started, it will be stopped when necessary (only if the ASIO channel has not yet been enabled). The device will be started again.</para>
            <para>5. Enable and join the given <paramref name="asioChannel"/> with the following channels according to the total <paramref name="asioNumChans"/>.</para>
            <para>6. Set the ASIO channel format and samplerate according to the given <paramref name="asioSamplerate"/> and <paramref name="asioFormat"/>.</para>
            <para>Note: If the given <paramref name="asioChannel"/> has already been enabled, it will be reused and not enabled and joined again!
            This means, that the channel number of the already joined channel will not be changed as well and might not match to the channel number of the given <paramref name="asioNumChans"/> parameter.</para>
            </remarks>
            <example>
            Automatic use of the BassAsioHandler (Asio recording input, Asio full-duplex output):
            <code lang="C#">
            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);
            ...
            // assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = new BassAsioHandler(true, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000);
            // set the full-duplex option to the first ASIO output device and channel
            // the ASIO output format will aways be the same as the input for full-duplex
            _asio.SetFullDuplex(0, 0);
            // start ASIO
            _asio.Start(0);
            ...
            // when you want to disbale all associated channels, call:
            _asio.Dispose();
            </code>
            <code lang="VB">
            Private _asio As BassAsioHandler
            ...
            ' 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)
            ...
            ' assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = New BassAsioHandler(True, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000)
            ' set the full-duplex option to the first ASIO output device and channel
            ' the ASIO output format will aways be the same as the input for full-duplex
            _asio.SetFullDuplex(0, 0)
            ' start ASIO
            _asio.Start(0)
            ...
            ' when you want to disbale all associated channels, call:
            _asio.Dispose()
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.#ctor(System.Int32,System.Int32,System.Int32,Un4seen.BassAsio.BASSASIOFormat)">
            <summary>
            Creates an instance of the ASIO handler for output - initializing and enabling the given ASIO device and channel according to the Bass stream.
            </summary>
            <param name="asioDevice">The ASIO device to use (0=first).</param>
            <param name="asioChannel">The ASIO output channel number (0=first).</param>
            <param name="outputChannel">The BASS channel handle which should be used with ASIO output (must be a decoding or recording channel and must be either 16-bit or 32-bit).</param>
            <param name="format">The ASIO sample format to use for the channel(s) - see <see cref="T:Un4seen.BassAsio.BASSASIOFormat"/> for details. Use -1 (UNKNOWN) to apply the format automatically.</param>
            <remarks>
            Use this constructor for automatic Asio output using either a decoding or recording <paramref name="outputChannel"/>.
            <para>The following will be done internally:</para>
            <para>1. The ASIO device will be initialized (if already done, the ASIO device will just be set).</para>
            <para>2. The samplerate, format and number of channels will be determined from the given <paramref name="outputChannel"/>.</para>
            <para>3. The ASIO device will be set to the determined samplerate. If this fails, the current ASIO samplerate will not be changed. In this case it might happen (if ASIO device samplerate and stream samplerate are different) that the ASIO output needs to be resampled.</para>
            <para>4. Output: use the <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioOutputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> as the internal <see cref="T:Un4seen.BassAsio.ASIOPROC"/>.</para>
            <para>4. Enable and join the given <paramref name="asioChannel"/> with the following channels according to the total number of chans of the <paramref name="outputChannel"/>.</para>
            <para>5. Set the <paramref name="asioChannel"/> format and samplerate according to the given samplerate and format of the <paramref name="outputChannel"/>.</para>
            <para>Note: If the given <paramref name="asioChannel"/> has already been enabled, it will be reused and not enabled and joined again!
            This means, that the channel number of the already joined channel will not be changed as well and might not match to the channel number of the given <paramref name="outputChannel"/>.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid channel: must be a valid BASS channel (either decoding or recording).</exception>
            <example>
            Automatic use of the BassAsioHandler (Asio output from a Bass stream):
            <code lang="C#">
            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)
            {
              // assign ASIO output to the first device and channel
              // and assume the ASIO format, samplerate and number of channels from the BASS stream
              _asio = new BassAsioHandler(0, 0, stream);
              // start ASIO
              _asio.Start(0);
            }
            </code>
            <code lang="VB">
            Private _asio As BassAsioHandler
            ...
            ' 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)
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              ' assign ASIO output to the first device and channel
              ' and assume the ASIO format, samplerate and number of channels from the BASS stream
              _asio = New BassAsioHandler(0, 0, stream)
              ' start ASIO
              _asio.Start(0)
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.Dispose">
            <summary>
            Disposes an instance of this class also unjoining and disabling all used ASIO channels.
            </summary>
            <remarks>The used ASIO channel(s) will be unjoined and disabled! This means, that the ASIO device needs to stopped for a short moment!
            <para>Caution: Once you created an instance of this class, the respective ASIO channel(s) are joined and enabled.
            Calling this method will automatically unjoin and disable the used ASIO channels as well as the full-duplex and mirror channels will be removed and disabled!
            If you want to prevent this little break in the ASIO device (since the ASIO device needs to be stopped for a short moment) make sure this method is never called during the device is started.</para>
            <para>Also if you want to leave all ASIO channels enabled (even if you do not need this instance anymore) do NOT call this method! In such case you might call <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveMirror"/> and <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveFullDuplex(System.Boolean)"/> manually if needed, 
            and you might also call <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelEnable(System.Boolean,System.Int32,Un4seen.BassAsio.ASIOPROC,System.IntPtr)"/> or <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelReset(System.Boolean,System.Int32,Un4seen.BassAsio.BASSASIOReset)"/> manually.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.Finalize">
            <summary>
            Finalization code.
            </summary>
            <remarks>This destructor will run only if the Dispose method does not get called.
            It gives your base class the opportunity to finalize. Do not provide destructors in types derived from this class.</remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.DeviceVolume">
            <summary>
            Gets or Sets the master volume of the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/> between 0 (silent) and 1 (full).
            </summary>
            <remarks>Whereas the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Volume"/> and the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Pan"/> properties directly effect the internally used channel volume,
            this property effects the global ASIO device volume setting.
            <para>The volume level ranges from 0 (silent) to 1 (maximum).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.InternalAsioProc">
            <summary>
            Gets the <see cref="T:Un4seen.BassAsio.ASIOPROC"/> currently being used by the Asio handler.
            </summary>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.Volume">
            <summary>
            Gets or Sets the volume of the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> (and all joined <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/>) between 0 (silent) and 1 (full).
            </summary>
            <remarks>Setting the volume uses the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Pan"/> property in case of multi-channel ASIO (<see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> is greater than 1).
            <para>The volume level ranges from 0 (silent) to 1 (normal) or above 1 to amplify the sound.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.VolumeMirror">
            <summary>
            Gets or Sets the volume of the <see cref="P:Un4seen.BassAsio.BassAsioHandler.MirrorChannel"/> (and all attached <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/>) between 0 (silent) and 1 (full).
            </summary>
            <remarks>Setting the volume uses the <see cref="P:Un4seen.BassAsio.BassAsioHandler.PanMirror"/> property in case of multi-channel ASIO (<see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> is greater than 1).
            <para>The volume level ranges from 0 (silent) to 1 (normal) or above 1 to amplify the sound.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.Pan">
            <summary>
            Gets or Sets the panning of the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> (and all joined <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/>) between -1 (left) to +1 (right), 0=centered.
            </summary>
            <remarks>Setting the panning uses the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Volume"/> property in order to calculate the individual channel volume.
            E.g. if you set the panning to -0.7 at a volume of 1.0: chan1-volume (left) = 0.3, chan2-volume (right) = 1.0.
            <para>The panning value ranges from -1 (left) to 0 (center) to +1 (right).</para>
            <para>In case of multi-channel (not stereo, <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> is greater than 2) the left/right positions are interleaved between the additional channels.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.PanMirror">
            <summary>
            Gets or Sets the panning of the <see cref="P:Un4seen.BassAsio.BassAsioHandler.MirrorChannel"/> (and all attached <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/>) between -1 (left) to +1 (right), 0=centered.
            </summary>
            <remarks>Setting the panning uses the <see cref="P:Un4seen.BassAsio.BassAsioHandler.VolumeMirror"/> property in order to calculate the individual channel volume.
            E.g. if you set the panning to -0.7 at a volume of 1.0: chan1-volume (left) = 0.3, chan2-volume (right) = 1.0.
            <para>The panning value ranges from -1.0 (left) to 0.0 (center) to +1.0 (right).</para>
            <para>In case of multi-channel (not stereo, <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> is greater than 2) the left/right positions are interleaved between the additional channels.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.IsInput">
            <summary>
            Returns <see langword="true"/>, if the ASIO handler is used with an ASIO input device.
            </summary>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.Device">
            <summary>
            Returns the ASIO device being used by the Asio handler.
            </summary>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.Channel">
            <summary>
            Returns the first ASIO channel being used.
            </summary>
            <remarks>The class will automatically join ASIO channels together when needed (done in the constructor).
            This property reflects the first ASIO channel being used. The <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> property will tell you how many channels are effectively joined and enabled starting with this channel.
            <para>You can not change the number of ASIO channels once joined and enabled.</para>
            <para>Caution: Once you created an instance of this class, the respective ASIO channels are joined and enabled.
            Disposing an instance of this class will not automatically unjoin and disable the used ASIO channels.
            If you want to do so, please call the appropriate overload of the <see cref="M:Un4seen.BassAsio.BassAsioHandler.Dispose"/> method manually.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.IsInputFullDuplex">
            <summary>
            Returns <see langword="true"/>, if the ASIO handler is used with an ASIO input device and the full-duplex option was set via <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/>.
            </summary>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexDevice">
            <summary>
            Returns the full-duplex ASIO output device being used (or -1, if not used).
            </summary>
            <remarks>Note: This property might also return the full-duplex BASS device, if the related <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/> overload was used.</remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexChannel">
            <summary>
            Returns the first full-duplex ASIO output channel being used (or -1, if not used).
            </summary>
            <remarks>Note: This property might also return -1 if the full-duplex option was used with a BASS device, if the related <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/> overload was used.
            <para>If the ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> is a multi-channel (the <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> property is greater than 1) this property will return the first full-duplex channel only.
            However, full-duplex always enables <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> channels, starting with this one.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.BypassFullDuplex">
            <summary>
            Gets or Sets the bypass flag for full-duplex ASIO output processing (default is <see langword="false"/>).
            </summary>
            <remarks>If this property is set to <see langword="true"/> any full-duplex output processing is bypassed.
            When setting this property to <see langword="true"/> prior to creating a full-duplex <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> via the <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/> method this enables you to start full-duplex without processing the output yet.
            Setting this property to <see langword="false"/> will start the full-duplex output processing.
            <para>This flag will automatically set back to <see langword="false"/> when calling <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveFullDuplex(System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.IsMirrored">
            <summary>
            Returns if the ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> is being mirrored to another output channel.
            </summary>
            <remarks>You can enable mirroring with the <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetMirror(System.Int32)"/> method and remove it with the <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveMirror"/> method.
            <para>Mirroring allows an ASIO input or output <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> to be duplicated in other output channel (the <see cref="P:Un4seen.BassAsio.BassAsioHandler.MirrorChannel"/>).</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.MirrorChannel">
            <summary>
            Gets the first ASIO mirror channel (or -1 if not mirrored).
            </summary>
            <remarks>You can enable mirroring with the <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetMirror(System.Int32)"/> method and remove it with the <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveMirror"/> method.
            <para>Mirroring allows an ASIO input or output <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> to be duplicated in other output channel. The property returnes the mirror channel.</para>
            <para>If the ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> is a multi-channel (the <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> property is greater than 1) this property will return the first mirrored channel only.
            However, mirroring will always mirror <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/> channels, starting with this one.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.SampleRate">
            <summary>
            Gets or Sets the actual ASIO channel sample rate in Hz (default is 48000).
            </summary>
            <remarks>By default the samplerate will automatically be adjusted according to the <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> being used.
            However, you might change the samplerate for this ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> manually, which might result in resampling, since this property does not change the ASIO device samplerate.</remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans">
            <summary>
            Gets the total number of ASIO channel which are joined together, starting with <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/>.
            </summary>
            <remarks>The class will automatically join ASIO channels together when needed (done in the constructor).
            This property reflects the total of ASIO channels used. Depending on which constructor overload you used, this number can be based on the number of channels of the given <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>.
            <para>You can not change the number of ASIO channels once joined and enabled.</para>
            <para>Caution: Once you created an instance of this class, the respective ASIO channels are joined and enabled.
            Disposing an instance of this class will not automatically unjoin and disable the used ASIO channels.
            If you want to do so, please call the appropriate overload of the <see cref="M:Un4seen.BassAsio.BassAsioHandler.Dispose"/> method manually.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.Format">
            <summary>
            Gets or Sets the actual ASIO channel format (default is BASS_ASIO_FORMAT_FLOAT).
            </summary>
            <remarks>By default the format will automatically be adjusted according to the <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> being used.
            However, you might change the format for this ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> manually.</remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel">
            <summary>
            Gets or Sets the BASS output channel handle which is used with this ASIO handler.
            </summary>
            <remarks>
            <para>When using the ASIO handler with an ASIO input device this channel is not available (unless you use the <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/> method, 
            in which case you might use this property to access the full-duplex output channel to apply DSP/FX).</para>
            <para>When using the ASIO handler with an ASIO output device this channel will be assigned once and can later be changed by calling <see cref="M:Un4seen.BassAsio.BassAsioHandler.AssignOutputChannel(System.Int32)"/> 
            and will represent the channel feeding the ASIO output with sample data. Tyically a decoding channel must be used, 
            but a recording channel will also work, since the interal ASIO procedure being used simply calls <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to pull the sample data from it as needed and reqested by ASIO.</para>
            <para>Caution: Setting this parameter manually might break the ASIO chain - only assign it manually, if the BASS chanel uses the same format and samplerate as the related ASIO channel.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.IsResampling">
            <summary>
            Returns <see langword="true"/>, if resampling takes place on the used <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> and <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/>.
            </summary>
            <remarks>Resampling is needed, if the ASIO channel samplerate is different than the ASIO device samplerate.
            If you are using ASIO input with the full-duplex option this property will check both, if resampling happens either on the ASIO input or on the ASIO output.</remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.InputChannel">
            <summary>
            Returns an input channel which allows you to retrieve the recorded sample data and/or apply any DSP/FX on Asio input.
            </summary>
            <remarks>When you are using ASIO with input (<see cref="P:Un4seen.BassAsio.BassAsioHandler.IsInput"/> must return <see langword="true"/>) and have set the <see cref="P:Un4seen.BassAsio.BassAsioHandler.UseInput"/> property to <see langword="true"/> 
            you might use this channel to setup any DSP/FX to be applied to the Asio input or just retrieve the recorded sample data. 
            Any DSP/FX set on this channel will also be passed through to the output, if you are using <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/>.
            <para>As the InputChannel is a dummy custom decoding stream you can not call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> directly on it in order to directly get the sample data;
            nor can you use it directly as a source stream for any (mixer)output!
            Instead use a <see cref="T:Un4seen.Bass.DSPPROC"/> via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/> to retrieve the sample data.</para>
            <para>Note: However, you might independently set any DSP/FX on the full-duplex output using the <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> instead.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandler.UseInput">
            <summary>
            Enables the use of the <see cref="P:Un4seen.BassAsio.BassAsioHandler.InputChannel"/> channel with ASIO input (which is the default for Asio input).
            </summary>
            <remarks>When you are using ASIO with input (<see cref="P:Un4seen.BassAsio.BassAsioHandler.IsInput"/> must return <see langword="true"/>) and set this property to <see langword="true"/> 
            you might use the <see cref="P:Un4seen.BassAsio.BassAsioHandler.InputChannel"/> to setup any DSP/FX to be applied to the Asio input or retrieve the recorded sample data. 
            Any DSP/FX set on this channel will also be passed through to the output, if you are using <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/>.
            <para>Note: However, you might independently set any DSP/FX on the full-duplex output using the <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> instead.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.Start(System.Int32,System.Int32)">
            <summary>
            Starts the Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/>.
            </summary>
            <param name="buflen">Buffer length in samples... 0 = use current length (use -1 to request the preferred buffer length).</param>
            <param name="threads">The number of processing threads to use... 0 = use current number.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Calls <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Start(System.Int32)"/> internally on the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/> being used by the Asio handler (if not already started).
            <para>If you need to stop the Asio device you might call <see cref="M:Un4seen.BassAsio.BassAsioHandler.Stop"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.Stop">
            <summary>
            Stops the Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/>.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Calls <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Stop"/> internally on the <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/> being used by the Asio handler (if not already stopped).
            <para>If you need to start the Asio device you might call <see cref="M:Un4seen.BassAsio.BassAsioHandler.Start(System.Int32,System.Int32)"/>.</para>
            <para>Caution: If you are using multiple instances of the <see cref="T:Un4seen.BassAsio.BassAsioHandler"/> which use the same Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/> calling this method impacts the other instances as well, 
            as the Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/> itself is being stopped. In such case you might call <see cref="M:Un4seen.BassAsio.BassAsioHandler.Dispose"/> to unjoin and disable only the ASIO channels used by this instance.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.StartFullDuplex(System.Int32)">
            <summary>
            Starts the Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexDevice"/>.
            </summary>
            <param name="buflen">Buffer length in samples... 0 = use current length.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Calls <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Start(System.Int32)"/> internally on the <see cref="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexDevice"/> being used by the Asio handler (if not already stopped and if used).
            <para>If you need to stop the full-duplex Asio device you might call <see cref="M:Un4seen.BassAsio.BassAsioHandler.StopFullDuplex"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.StopFullDuplex">
            <summary>
            Stops the Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexDevice"/>.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Calls <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_Stop"/> internally on the <see cref="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexDevice"/> being used by the Asio handler (if not already stopped and if used).
            <para>If you need to start the full-duplex Asio device you might call <see cref="M:Un4seen.BassAsio.BassAsioHandler.StartFullDuplex(System.Int32)"/>.</para>
            <para>Caution: If you are using multiple instances of the <see cref="T:Un4seen.BassAsio.BassAsioHandler"/> which use the same Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexDevice"/> calling this method impacts the other instances as well, 
            as the Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexDevice"/> itself is being stopped. In such case you might call <see cref="M:Un4seen.BassAsio.BassAsioHandler.Dispose"/> to stop the full-duplex channels used by this instance
            or consider calling <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveFullDuplex(System.Boolean)"/> to disable and remove the full-duplex option.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.Pause(System.Boolean)">
            <summary>
            Pauses or Unpauses the ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/>(s) being used.
            </summary>
            <param name="pause"><see langword="true"/> if you want to pause the ASIO channel(s) - <see langword="false"/> if you want to unpause.</param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>When in full-duplex input mode (see <see cref="P:Un4seen.BassAsio.BassAsioHandler.IsInputFullDuplex"/>) the related AISO input as well as the ASIO output channel(s) will be (un)paused.</remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.PauseMirror(System.Boolean)">
            <summary>
            Pauses or Unpauses the <see cref="P:Un4seen.BassAsio.BassAsioHandler.MirrorChannel"/>(s) being used.
            </summary>
            <param name="pause"><see langword="true"/> if you want to pause the ASIO channel(s) - <see langword="false"/> if you want to unpause.</param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to retrieve the error code).</returns>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.AssignOutputChannel(System.Int32)">
            <summary>
            Assigns a (new) BASS channel handle for ASIO output.
            </summary>
            <param name="outputChannel">The BASS channel handle which should be used with ASIO output (should be a decoding or recording channel and must be either 16-bit or 32-bit) - or 0 (zero) to remove an existing <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>.</param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>
            <para>The following will be done internally:</para>
            <para>1. The current ASIO channel will be paused (if already enabled).</para>
            <para>2. The samplerate, format and number of channels will be determined from the given <paramref name="outputChannel"/>.</para>
            <para>3. The ASIO device will be set to the determined samplerate. If this fails, the current ASIO samplerate will not be changed. In this case it might happen (if ASIO device samplerate and stream samplerate are different) that the ASIO output needs to be resampled.</para>
            <para>4a. ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> enabled: use the <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioOutputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> as the internal <see cref="T:Un4seen.BassAsio.ASIOPROC"/>, if the ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> was already enabled and joined, it will not be changed.</para>
            <para>4b. ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> disabled: Enable and join the given Asio <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> with the following channels according to the total number of chans of the <paramref name="outputChannel"/>.</para>
            <para>5. Set the ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> format and samplerate according to the given samplerate and format of the <paramref name="outputChannel"/>.</para>
            <para>6. The current ASIO channel will be unpaused (if it was paused before).</para>
            <para>This method can not be used with ASIO input (see <see cref="P:Un4seen.BassAsio.BassAsioHandler.IsInput"/>). It will immediately return with no effect.</para>
            <para>Tyically a decoding channel must be used, but a recording channel will also work, since the internal ASIO procedure being used simply calls <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> to pull the sample data from the <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> as needed and requested by ASIO.</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid channel: must be a valid BASS channel (either decoding or recording).</exception>
            <example>
            Automatic use of the BassAsioHandler (output):
            <code lang="C#">
            private BassAsioHandler _asio;
            ...
            int stream = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                              BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            if (stream != 0)
            {
              // assign ASIO output to the first device and channel
              // and assume the ASIO format, samplerate and number of channels from the BASS stream
              _asio = new BassAsioHandler(0, 0, stream);
              // start ASIO
              BassAsio.BASS_ASIO_Start(0);
            }
            ...
            // assign a new channel to ASIO output
            Bass.BASS_StreamFree(stream);
            int newStream = Bass.BASS_StreamCreateFile(newFileName, 0, 0, 
                                 BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT );
            _asio.AssignOutputChannel(newStream);
            </code>
            <code lang="VB">
            Private _asio As BassAsioHandler
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              ' assign ASIO output to the first device and channel
              ' and assume the ASIO format, samplerate and number of channels from the BASS stream
              _asio = New BassAsioHandler(0, 0, stream)
              ' start ASIO
              BassAsio.BASS_ASIO_Start(0)
            End If
            ...
            ' assign a new channel to ASIO output
            Bass.BASS_StreamFree(stream)
            Dim newStream As Integer = Bass.BASS_StreamCreateFile(newFileName, 0, 0, 
                                            BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            _asio.AssignOutputChannel(newStream)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)">
            <summary>
            Sets the full-duplex option for ASIO input using the given ASIO output device and channel.
            </summary>
            <param name="asioDevice">The ASIO output device which should be used for full-duplex monitoring.</param>
            <param name="asioChannel">The ASIO output channel which should be used for full-duplex monitoring.</param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>
            <para>The full-duplex options is only available on input channels. However even a full-duplex output channel on a different ASIO device might even be used.</para>
            <para>If you want to mirror an ASIO input channel to an output channel on the same device, you might might also use the <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetMirror(System.Int32)"/> method instead, which is more efficient in such case.</para>
            <para>The following will be done internally:</para>
            <para>1. The ASIO input <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> will be used (and enabled and joined, only if not enabled yet).</para>
            <para>2. A custom dummy decoding stream (see <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>) will be created with the <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioToAsioFullDuplexCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> as the internal <see cref="T:Un4seen.BassAsio.ASIOPROC"/>.</para>
            <para>3. The samplerate, format and number of channels will not be changed for ASIO input, since this will be used as already specified in the constructor.</para>
            <para>4. The ASIO output <paramref name="asioDevice"/> will only be stopped, if already started and the <paramref name="asioChannel"/> has not yet been enabled - it will automatically be started again if needed.</para>
            <para>5. The ASIO output device will be set to the same samplerate as the ASIO input. If this fails, the current ASIO samplerate will not be changed. In this case it might happen (if ASIO device samplerate and input samplerate are different) that the ASIO output needs to be resampled.</para>
            <para>6. The ASIO output <paramref name="asioChannel"/> will be enabled and joined (only if not already enabled) as well as the format and samplerate will be set. All according to the given number of channels, samplerate and format of the ASIO input <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/>.</para>
            <para>This method can not be used with ASIO output (see <see cref="P:Un4seen.BassAsio.BassAsioHandler.IsInput"/>). It will immediately return with no effect.</para>
            <para>To disable and remove the full-duplex option call <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveFullDuplex(System.Boolean)"/>.</para>
            <para>The full-duplex ASIO output is provided by an internal custom dummy decoding stream <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>. You might use this stream to set up DSPs or FX on it so that these are applied on the ASIO output.</para>
            <para>You might bypass any full-duplex output procesing by setting the <see cref="P:Un4seen.BassAsio.BassAsioHandler.BypassFullDuplex"/> property to <see langword="true"/>.</para>
            </remarks>
            <example>
            Automatic use of the BassAsioHandler (Asio recording input, full-duplex Asio output):
            <code lang="C#">
            private BassAsioHandler _asio;
            private DSP_PeakLevelMeter _plm;
            ...
            // assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = new BassAsioHandler(true, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000);
            // set the full-duplex option to the first ASIO output device and channel
            // the ASIO output format will always be the same as the input for full-duplex
            _asio.SetFullDuplex(0, 0);
            
            // set up a ready-made DSP (here the PeakLevelMeter) on the full-duplex channel
            _plm = new DSP_PeakLevelMeter(_asio.OutputChannel, 0);
            _plm.UpdateTime = 0.1f; // 100ms
            _plm.CalcRMS = true;
            _plm.Notification += new EventHandler(OnPlmNotification);
            
            // start ASIO
            BassAsio.BASS_ASIO_Start(0);
            ...
            private void OnPlmNotification(object sender, EventArgs e)
            {
              if (_plm == null)
                return;
              // sender will be the DSP_PeakLevelMeter instance
              // you could also access it via: DSP_PeakLevelMeter p = (DSP_PeakLevelMeter)sender;
              this.progressBarPeak1Left.Value = _plm.LevelL;
              this.progressBarPeak1Right.Value = _plm.LevelR;
              this.labelLevel1.Text = String.Format( "RMS: {0:#00.0} dB   AVG: {1:#00.0} dB   Peak: {2:#00.0} dB", 
                   _plm.RMS_dBV, _plm.AVG_dBV, Math.Max(_plm.PeakHoldLevelL_dBV, _plm.PeakHoldLevelR_dBV) );
            }
            </code>
            <code lang="VB">
            Private _asio As BassAsioHandler
            Private _plm As DSP_PeakLevelMeter
            ...
            ' assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = New BassAsioHandler(True, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000)
            ' set the full-duplex option to the first ASIO output device and channel
            ' the ASIO output format will always be the same as the input for full-duplex
            _asio.SetFullDuplex(0, 0)
            
            ' set up a ready-made DSP (here the PeakLevelMeter) on the full-duplex channel
            _plm = New DSP_PeakLevelMeter(_asio.OutputChannel, 0)
            _plm.UpdateTime = 0.1F ' 100ms
            _plm.CalcRMS = True
            AddHandler _plm.Notification, AddressOf OnPlmNotification
            
            ' start ASIO
            BassAsio.BASS_ASIO_Start(0)
            ...
            Private Sub OnPlmNotification(sender As Object, e As EventArgs)
              If _plm Is Nothing Then
                Return
              End If
              ' sender will be the DSP_PeakLevelMeter instance
              ' you could also access it via: 
              ' Dim p As DSP_PeakLevelMeter = CType(sender, DSP_PeakLevelMeter)
              Me.progressBarPeak1Left.Value = _plm.LevelL
              Me.progressBarPeak1Right.Value = _plm.LevelR
              Me.labelLevel1.Text = [String].Format("RMS: {0:#00.0} dB   AVG: {1:#00.0} dB   Peak: {2:#00.0} dB", 
                 _plm.RMS_dBV, _plm.AVG_dBV, Math.Max(_plm.PeakHoldLevelL_dBV, _plm.PeakHoldLevelR_dBV))
            End Sub
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)">
            <summary>
            Sets the full-duplex option for ASIO input using the given BASS output device.
            </summary>
            <param name="bassDevice">The BASS output device which should be used for full-duplex monitoring.</param>
            <param name="flags">The optional <see cref="T:Un4seen.Bass.BASSFlag"/> flags to be used to create the full-duplex monitoring <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>.
            Typically only the following flags should be used: BASS_STREAM_DECODE, BASS_SAMPLE_SOFTWARE or BASS_SPEAKER_xxx.</param>
            <param name="buffered"><see langword="true"/>, if the <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> should be (pre)buffered - else <see langword="false"/>.
            <para>Prebuffering of sample data is often requied for buffered output to enable a constant playback. So even if you are using a BASS_STREAM_DECODE flag you might need to prebuffer it's data.</para>
            </param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>
            <para>The following will be done internally:</para>
            <para>1. The ASIO input <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> will be used (and enabled and joined, only if not enabled yet).</para>
            <para>2. The BASS output <paramref name="bassDevice"/> will be used.</para>
            <para>3. A custom push stream (see <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>) will be created (using the given <paramref name="flags"/>) with an internal ASIO callback feeding the stream with the sample data from the input.</para>
            <para>4. The samplerate, format and number of channels will not be changed for ASIO input, since this will be used as already specified in the constructor.</para>
            <para>5. The custom push stream will be started playing (via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) - unless the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> flag has been specified.</para>
            <para>This method can not be used with ASIO output (see <see cref="P:Un4seen.BassAsio.BassAsioHandler.IsInput"/>). It will immediately return with no effect.</para>
            <para>To disable and remove the full-duplex option call <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveFullDuplex(System.Boolean)"/>.</para>
            <para>The full-duplex BASS output is provided by the internal custom push stream <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>. You might use this stream to set up DSPs or FX on it so that these are applied on the BASS output.</para>
            <para>You might bypass any full-duplex output procesing by setting the <see cref="P:Un4seen.BassAsio.BassAsioHandler.BypassFullDuplex"/> property to <see langword="true"/>.</para>
            <para>You might use the 0 (no-sound) bass device together with the BASS_STREAM_DECODE flag in order to create a custom decoding <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> which might for example be used with an <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/> or <see cref="T:Un4seen.Bass.Misc.WaveWriter"/> or 
            as a source for a <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">mixer channel</see>.</para>
            </remarks>
            <example>
            Automatic use of the BassAsioHandler (Asio recording input, full-duplex to BASS):
            <code lang="C#">
            private BassAsioHandler _asio;
            ...
            // assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = new BassAsioHandler(true, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000);
            // set the full-duplex option to the first BASS output device using the rear speakers
            // the BASS output format will always be the same as the ASIO input for full-duplex
            _asio.SetFullDuplex(1, BASSFlag.BASS_SPEAKER_REAR, true);
            
            // start ASIO
            BassAsio.BASS_ASIO_Start(0);
            _asio.ResetFullDuplex();
            
            // setup an FX on the full-duplex BASS output
            BASS_FXECHO echo = new BASS_FXECHO();
            int fxHandle = Bass.BASS_ChannelSetFX(_asio.OutputChannel, BASSFXType.BASS_FX_ECHO, 0);
            echo.Preset_Long();
            // apply the effect parameters
            Bass.BASS_FXSetParameters(fxHandle, echo);
            </code>
            <code lang="VB">
            Private _asio As BassAsioHandler
            ...
            ' assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = New BassAsioHandler(True, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000)
            ' set the full-duplex option to the first BASS output device using the rear speakers
            ' the BASS output format will always be the same as the ASIO input for full-duplex
            _asio.SetFullDuplex(1, BASSFlag.BASS_SPEAKER_REAR, True)
            
            ' start ASIO
            BassAsio.BASS_ASIO_Start(0)
            _asio.ResetFullDuplex()
            
            ' setup an FX on the full-duplex BASS output
            Dim echo As New BASS_FXECHO()
            Dim fxHandle As Integer = Bass.BASS_ChannelSetFX(_asio.OutputChannel, BASSFXType.BASS_FX_ECHO, 0)
            echo.Preset_Long()
            ' apply the effect parameters
            Bass.BASS_FXSetParameters(fxHandle, echo)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.RemoveFullDuplex(System.Boolean)">
            <summary>
            Removes the full-duplex option from ASIO input.
            </summary>
            <param name="disableOutput">Disable and unjoin the ASIO output channel? <see langword="false"/>=leave them enabled and joined.</param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>The full-duplex option must have been set before via <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/>.
            <para>The following will be done internally:</para>
            <para>1. The ASIO output <see cref="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexDevice"/> will be stopped (if already started).</para>
            <para>2. The ASIO output <see cref="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexChannel"/> will be disabled and unjoined.</para>
            <para>3. The ASIO output device will be started again (only, if it has been started before).</para>
            <para>4. The ASIO input <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/> will be stopped (if already started).</para>
            <para>5. The ASIO input <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> will be disabled.</para>
            <para>6. Any custom dummy decoding stream (see <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>) will be freed and the <see cref="M:Un4seen.BassAsio.BassAsioHandler.AsioInputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> will again be used as the internal <see cref="T:Un4seen.BassAsio.ASIOPROC"/>.</para>
            <para>7. The ASIO input channel will be (re)enabled, the samplerate, format and number of channels will not be changed for ASIO input, since this will be used as already specified in the constructor.</para>
            <para>8. The ASIO input device will be started again (only, if it has been started before).</para>
            <para>Note: This method will only disable the <see cref="P:Un4seen.BassAsio.BassAsioHandler.FullDuplexChannel"/> if specified in the <paramref name="disableOutput"/> parameter.</para>
            <para>This method can not be used with ASIO output (see <see cref="P:Un4seen.BassAsio.BassAsioHandler.IsInput"/>). It will immediately return with no effect.</para>
            <para>To enable the full-duplex option again, call <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/>.</para>
            <para>Note, that this method also resets the <see cref="P:Un4seen.BassAsio.BassAsioHandler.BypassFullDuplex"/> property to <see langword="false"/>.</para>
            </remarks>
            <example>
            Automatic use of the BassAsioHandler (recording input, full-duplex):
            <code lang="C#">
            private BassAsioHandler _asio;
            ...
            // assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = new BassAsioHandler(true, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000);
            // set the full-duplex option to the first ASIO output device and channel
            // the ASIO output format will aways be the same as the input for full-duplex
            _asio.SetFullDuplex(0, 0); // first output device and channel
            // start ASIO
            _asio.Start(0);
            ...
            // remove the full-duplex option and leave the channel enabled
            _asio.RemoveFullDuplex(false);
            // but pause the unused output channel
            BassAsio.BASS_ASIO_ChannelPause(false, 0);
            ...
            </code>
            <code lang="VB">
            Private _asio As BassAsioHandler
            ...
            ' assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = New BassAsioHandler(True, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000)
            ' set the full-duplex option to the first ASIO output device and channel
            ' the ASIO output format will aways be the same as the input for full-duplex
            _asio.SetFullDuplex(0, 0) ' first output device and channel
            ' start ASIO
            _asio.Start(0)
            ...
            ' remove the full-duplex option and leave the channel enabled
            _asio.RemoveFullDuplex(False)
            ' but pause the unused output channel
            BassAsio.BASS_ASIO_ChannelPause(False, 0)
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.SetMirror(System.Int32)">
            <summary>
            Mirrors the current ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> to the given output channel.
            </summary>
            <param name="asioChannel">The output channel number... 0 = first.</param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>
            <para>This function allows the input or output <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/> to be duplicated in other output channel. Mirroring is only available on the same ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/>!</para>
            <para>If you need to monitor an input channel on a different ASIO device, you might use the <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetFullDuplex(System.Int32,System.Int32)"/> method instead.</para>
            <para>The following will be done internally:</para>
            <para>1. The ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/> will only be stopped, if already started - it will automatically be started again if needed.</para>
            <para>2. The ASIO output <paramref name="asioChannel"/> will be enabled and mirrored (only if not already enabled). All according to the given <see cref="P:Un4seen.BassAsio.BassAsioHandler.ChannelNumChans"/>, meaning starting with the <paramref name="asioChannel"/> this one and the next channels will be used as the mirror channels.</para>
            <para>To disable and remove the mirror option call <see cref="M:Un4seen.BassAsio.BassAsioHandler.RemoveMirror"/>.</para>
            </remarks>
            <example>
            Automatic use of the BassAsioHandler (recording input, mirrored):
            <code lang="C#">
            private BassAsioHandler _asio;
            ...
            // assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = new BassAsioHandler(true, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000);
            // set the mirror option to the first ASIO output device and channel
            _asio.SetMirror(0);
            ...
            // start ASIO
            _asio.Start(0);
            ...
            // remove the mirror when not needed
            _asio.RemoveMirror();
            ...
            </code>
            <code lang="VB">
            Private _asio As BassAsioHandler
            ...
            ' assign ASIO input to the first device and channel (stereo, 32-bit float, 48kHz)
            _asio = New BassAsioHandler(True, 0, 0, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000)
            ' set the mirror option to the first ASIO output device and channel
            _asio.SetMirror(0)
            ...
            ' start ASIO
            _asio.Start(0)
            ...
            ' remove the mirror when not needed
            _asio.RemoveMirror()
            ...
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.RemoveMirror">
            <summary>
            Removes a mirror set on the current ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Channel"/>.
            </summary>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>The mirror option must have been set before via <see cref="M:Un4seen.BassAsio.BassAsioHandler.SetMirror(System.Int32)"/>.
            <para>The following will be done internally:</para>
            <para>1. The ASIO <see cref="P:Un4seen.BassAsio.BassAsioHandler.Device"/> will be stopped (if already started).</para>
            <para>2. The ASIO output <see cref="P:Un4seen.BassAsio.BassAsioHandler.MirrorChannel"/> will be disabled.</para>
            <para>3. The ASIO device will be started again (only, if it has been started before).</para>
            <para>CAUTION: This method will always disable the <see cref="P:Un4seen.BassAsio.BassAsioHandler.MirrorChannel"/>(s)!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.AsioOutputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            Provides a ready made <see cref="T:Un4seen.BassAsio.ASIOPROC"/> callback procedure which might be used for ASIO output.
            </summary>
            <param name="input">Dealing with an input channel? Must be <see langword="false"/>, since we are dealing with Asio output.</param>
            <param name="channel">The output channel number... 0 = first.</param>
            <param name="buffer">The pointer to the buffer in which to put the data to output.</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">Not used.</param>
            <returns>The number of bytes written.</returns>
            <remarks>Notes:
            <para>In order to use this default output ASIO callback (playback), you need to make sure that you use this callback only with ASIO output (<see cref="P:Un4seen.BassAsio.BassAsioHandler.IsInput"/> must be <see langword="false"/>).</para>
            <para>Furthermore the following should be considered: If the underlying stream channel <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> is at the end (all data was decoded), 
            this callback does NOT automatically pause ASIO via <see cref="M:Un4seen.BassAsio.BassAsio.BASS_ASIO_ChannelPause(System.Boolean,System.Int32)"/> or <see cref="M:Un4seen.BassAsio.BassAsioHandler.Pause(System.Boolean)"/>.
            So you need to do that by yourself (if you whish to save some performance), e.g. setup a <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)">BASS_SYNC_END</see> on the <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>.
            If the underlying <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> returns less data, than requested the ASIO output buffer will be filled with 0's (silence).</para>
            <para>Internally <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> will be called on the underlying <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> to request sample data, before the sample data is send to the ASIO output.</para>
            <para>If you intend to overload this callback in a derive implementation make sure to call the base method to not loose any functionatily.</para>
            </remarks>
            <example>
            Implementing your own callback in a derived implementation:
            <code lang="C#">
            public class MyAsioHandler : BassAsioHandler
            {
            
              public override int AsioOutputCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
              {
                // buffer is not filled
                // do your own stuff here...
                int len = base.AsioOutputCallback(input, channel, buffer, length, user);
                if (len > 0)
                {
                  // buffer is already filled
                  // do your own stuff here...
                }
                return len;
              }
            
            }
            </code>
            <code lang="VB">
            Public Class MyAsioHandler 
              Inherits BassAsioHandler
            
              Public Overrides Function AsioOutputCallback(input As Boolean, channel As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Integer
                ' buffer is already filled
                ' do your own stuff here...
                Dim len As Integer = MyBase.AsioOutputCallback(input, channel, buffer, length, user)
                If len > 0 Then
                  ' buffer is already filled
                  ' do your own stuff here...
                End If
                Return len
              End Function
            
            End Class
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.AsioInputCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            Provides a ready made <see cref="T:Un4seen.BassAsio.ASIOPROC"/> callback procedure which might be used for ASIO input.
            </summary>
            <param name="input">Dealing with an input channel? Must be <see langword="true"/>, since we are only dealing with Asio input.</param>
            <param name="channel">The input channel number... 0 = first.</param>
            <param name="buffer">The pointer to the buffer containing the recorded data (input channel).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">Not used.</param>
            <returns>Returns 0, since we are only dealing with Asio input.</returns>
            <remarks>
            To receive the recorded sample data you might use the <see cref="P:Un4seen.BassAsio.BassAsioHandler.InputChannel"/> and set up a DSP on it.
            <para>If you intend to overload this callback in a derive implementation make sure to call the base method to not loose any functionatily.</para>
            </remarks>
            <example>
            Implementing your own callback in a derived implementation:
            <code lang="C#">
            public class MyAsioHandler : BassAsioHandler
            {
            
              public override int AsioInputCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
              {
                // InputChannel not applied yet
                // do your own stuff here...
                int len = base.AsioInputCallback(input, channel, buffer, length, user);
                // InputChannel already applied
                // do your own stuff here...
                return len;
              }
            
            }
            </code>
            <code lang="VB">
            Public Class MyAsioHandler 
              Inherits BassAsioHandler
            
              Public Overrides Function AsioInputCallback(input As Boolean, channel As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Integer
                ' InputChannel not applied yet
                ' do your own stuff here...
                Dim len As Integer = MyBase.AsioInputCallback(input, channel, buffer, length, user)
                ' InputChannel already applied
                ' do your own stuff here...
                Return len
              End Function
            
            End Class
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.AsioToAsioFullDuplexCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            Provides a ready made <see cref="T:Un4seen.BassAsio.ASIOPROC"/> callback procedure which might be used for full-duplex ASIO input to Asio output.
            </summary>
            <param name="input">Dealing with an input channel? <see langword="false"/> = an output channel, <see langword="true"/> = an input channel (both input and output must be supported by this callback).</param>
            <param name="channel">The input/output channel number... 0 = first.</param>
            <param name="buffer">The pointer to the buffer containing the recorded data (if input), or in which to put the data to output (if output).</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">Not used.</param>
            <returns>The number of bytes written (if output), else 0 (if input).</returns>
            <remarks>
            To apply DSP/FX independetly to the input and output you might use the <see cref="P:Un4seen.BassAsio.BassAsioHandler.InputChannel"/> and <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> respectively.
            <para>If you intend to overload this callback in a derive implementation make sure to call the base method to not loose any functionatily.</para>
            </remarks>
            <example>
            Implementing your own callback in a derived implementation:
            <code lang="C#">
            public class MyAsioHandler : BassAsioHandler
            {
            
              public override int AsioToAsioFullDuplexCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
              {
                // FullDuplex not applied yet
                if (input)
                {
                  // do your own input stuff here...
                }
                else
                {
                  // do your own output stuff here...
                }
                int len = base.AsioToAsioFullDuplexCallback(input, channel, buffer, length, user);
                // FullDuplex already applied
                if (input)
                {
                  // do your own input stuff here...
                }
                else
                {
                  // do your own output stuff here...
                }
                return len;
              }
            
            }
            </code>
            <code lang="VB">
            Public Class MyAsioHandler 
              Inherits BassAsioHandler
            
              Public Overrides Function AsioToAsioFullDuplexCallback(input As Boolean, channel As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Integer
                ' FullDuplex not applied yet
                If input Then
                  ' do your own input stuff here...
                Else
                  ' do your own output stuff here...
                End If
                Dim len As Integer = MyBase.AsioToAsioFullDuplexCallback(input, channel, buffer, length, user)
                ' FullDuplex already applied
                If input Then
                  ' do your own input stuff here...
                Else
                  ' do your own output stuff here...
                End If
                Return len
              End Function
            
            End Class
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandler.AsioToBassFullDuplexCallback(System.Boolean,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            Provides a ready made <see cref="T:Un4seen.BassAsio.ASIOPROC"/> callback procedure which might be used for full-duplex ASIO input to Bass output.
            </summary>
            <param name="input">Dealing with an input channel? Must be <see langword="true"/>, since we are only dealing with Asio input (full-duplex output is via <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/>).</param>
            <param name="channel">The input channel number... 0 = first.</param>
            <param name="buffer">The pointer to the buffer containing the recorded data.</param>
            <param name="length">The number of BYTES to process.</param>
            <param name="user">Not used.</param>
            <returns>Returns 0, since we are only dealing with Asio input.</returns>
            <remarks>
            To apply DSP/FX independetly to the input and output you might use the <see cref="P:Un4seen.BassAsio.BassAsioHandler.InputChannel"/> and <see cref="P:Un4seen.BassAsio.BassAsioHandler.OutputChannel"/> respectively.
            <para>If you intend to overload this callback in a derive implementation make sure to call the base method to not loose any functionatily.</para>
            </remarks>
            <example>
            Implementing your own callback in a derived implementation:
            <code lang="C#">
            public class MyAsioHandler : BassAsioHandler
            {
            
              public override int AsioToBassFullDuplexCallback(bool input, int channel, IntPtr buffer, int length, IntPtr user)
              {
                // FullDuplex not applied yet
                if (input)
                {
                  // do your own input stuff here...
                }
                else
                {
                  // do your own output stuff here...
                }
                int len = base.AsioToBassFullDuplexCallback(input, channel, buffer, length, user);
                // FullDuplex already applied
                if (input)
                {
                  // do your own input stuff here...
                }
                else
                {
                  // do your own output stuff here...
                }
                return len;
              }
            
            }
            </code>
            <code lang="VB">
            Public Class MyAsioHandler 
              Inherits BassAsioHandler
            
              Public Overrides Function AsioToBassFullDuplexCallback(input As Boolean, channel As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Integer
                ' FullDuplex not applied yet
                If input Then
                  ' do your own input stuff here...
                Else
                  ' do your own output stuff here...
                End If
                Dim len As Integer = MyBase.AsioToBassFullDuplexCallback(input, channel, buffer, length, user)
                ' FullDuplex already applied
                If input Then
                  ' do your own input stuff here...
                Else
                  ' do your own output stuff here...
                End If
                Return len
              End Function
            
            End Class
            </code>
            </example>
        </member>
        <member name="T:Un4seen.BassAsio.BassAsioHandler.BassAsioHandlerEventHandler">
            <summary>
            Definition of the <see cref="E:Un4seen.BassAsio.BassAsioHandler.Notification"/> event handler.
            </summary>
            <remarks>
            This definition complies with the .NET Framework's standard for event handlers.
            The sender is always set to the <see cref="T:Un4seen.BassAsio.BassAsioHandler"/> object instance that raised the event.
            </remarks>
        </member>
        <member name="E:Un4seen.BassAsio.BassAsioHandler.Notification">
            <summary>
            Event handler used to notify that an asio handler notification event (sync) has occurred.
            </summary>
            <remarks>
            <para>The <see cref="T:Un4seen.BassAsio.BassAsioHandlerEventArgs"/> contains a <see cref="T:Un4seen.BassAsio.BassAsioHandlerSyncType"/> which allows you to react to a possible sync scenarios.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.BassAsio.BassAsioHandlerEventArgs">
            <summary>
            EventArgs class to be passed as the second parameter of a <see cref="E:Un4seen.BassAsio.BassAsioHandler.Notification" /> event handler.
            </summary>
            <remarks>
            This class provides all the information relevant to an event which might occur to a <see cref="T:Un4seen.BassAsio.BassAsioHandler"/> class.
            </remarks>
        </member>
        <member name="M:Un4seen.BassAsio.BassAsioHandlerEventArgs.#ctor(Un4seen.BassAsio.BassAsioHandlerSyncType,System.Int32)">
            <summary>
            Initializes a new instance of the BassAsioHandlerEventArgs class by initializing all of its properties.
            </summary>
            <param name="syncType">The type of event which occurred (see <see cref="T:Un4seen.BassAsio.BassAsioHandlerSyncType"/>).</param>
            <param name="data">Some data which should be passed along with the notification event.</param>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandlerEventArgs.SyncType">
            <summary>
            Gets the type of sync which occurred.
            </summary>
        </member>
        <member name="P:Un4seen.BassAsio.BassAsioHandlerEventArgs.Data">
            <summary>
            Gets the data which was passed along with the event.
            </summary>
        </member>
        <member name="T:Un4seen.BassAsio.BassAsioHandlerSyncType">
            <summary>
            Types of event that has occurred with the <see cref="T:Un4seen.BassAsio.BassAsioHandler"/> class.
            </summary>
            <remarks>
            A variable of this type is passed inside the <see cref="T:Un4seen.BassAsio.BassAsioHandlerEventArgs"/> object 
            for the <see cref="E:Un4seen.BassAsio.BassAsioHandler.Notification" /> event.
            </remarks>
        </member>
        <member name="F:Un4seen.BassAsio.BassAsioHandlerSyncType.SourceStalled">
            <summary>
            The Asio source is stalled.
            <para>data: the source stream channel which was stalled.</para>
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BassAsioHandlerSyncType.SourceResumed">
            <summary>
            The Asio source is resumed.
            <para>data: the source stream channel which was resumed.</para>
            </summary>
        </member>
        <member name="F:Un4seen.BassAsio.BassAsioHandlerSyncType.BufferUnderrun">
            <summary>
            A buffer underrun happened.
            <para>data: the source stream channel on which the underrun occurred.</para>
            <para>A buffer underrun might happen, if the BASS_ChannelGetData call on the source stream channel (OutputChannel) returns less data as requested.</para>
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.BassWasapi">
            <summary>
            .NET API wrapper for BASSWASAPI.DLL
            <para>Requires: basswasapi.dll - Windows Audio Session API driver library - available @ <a href="http://www.un4seen.com">www.un4seen.com</a>.</para>
            </summary>
            <remarks>
            <para>BASSWASAPI is basically a wrapper for Windows Audio Session API drivers, with the addition of channel joining, format conversion and resampling.</para>
            <para>BASSWASAPI requires a soundcard with a Windows Session API drivers installed (Vista or above). It also makes use of SSE2 and 3DNow optimizations, but is fully functional without them.
            BASS is not required by BASSWASAPI, but BASS can of course be used to decode, apply DSP/FX, etc.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.#cctor">
            <summary>
            Base static contructor.
            </summary>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.#ctor">
            <summary>
            NOT used - all members are static!
            </summary>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetVersion">
            <summary>
            Retrieves the version number of the basswasapi.dll that is loaded.
            </summary>
            <returns>The BASSWASAPI version. For example, 0x02040103 (hex), would be version 2.4.1.3.</returns>
            <remarks>There is no guarantee that a previous or future version of BASSWASAPI supports all the BASSWASAPI functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.
            <para>You might use the global constant <see cref="F:Un4seen.BassWasapi.BassWasapi.BASSWASAPIVERSION"/> to check the major revision.</para>
            </remarks>
            <example>
            Checking the major version only:
            <code lang="C#">
            if ( Utils.HighWord(BassWasapi.BASS_WASAPI_GetVersion()) != BassWasapi.BASSWASAPIVERSION )
            {
              MessageBox.Show(this, "Wrong BassWasapi Version!");
            }
            </code>
            <code lang="VB">
            If Utils.HighWord(BassWasapi.BASS_WASAPI_GetVersion()) &lt;&gt; BassWasapi.BASSWASAPIVERSION Then
              MessageBox.Show(Me, "Wrong BassWasapi Version!")
            End If
            </code>
            Checking for full version "2.4.1.3":
            <code>
            if (BassWasapi.BASS_WASAPI_GetVersion() &lt; Utils.MakeLong(0x0103, 0x0204))
            {
              MessageBox.Show(this, "Wrong BassWasapi Version!");
            }
            </code>
            <code lang="VB">
            If BassWasapi.BASS_WASAPI_GetVersion() &lt; Utils.MakeLong(&amp;H103, &amp;H204) Then
              MessageBox.Show(Me, "Wrong BassWasapi Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetVersion(System.Int32)">
            <summary>
            Retrieves the version of the basswasapi.dll that is loaded.
            </summary>
            <param name="fieldcount">The number of components to use. The fieldCount ranges from 1 to 4 (major.minor.build.revision).</param>
            <returns>The BASSWASAPI version (major.minor.build.revision).</returns>
            <remarks>There is no guarantee that a previous or future version of BASSWASAPI supports all the BASSWASAPI functions that you are using, so you should always use this function to make sure the correct version is loaded.
            It is safe to assume that future minor revisions (indicated in the LOWORD) will be fully compatible.</remarks>
            <example>
            <code lang="C#">
            Version expectedVersion = new Version(2, 4);
            if (BassWasapi.BASS_WASAPI_GetVersion(2) &lt; expectedVersion)
            {
              MessageBox.Show( this, "Wrong BassWasapi Version!" );
            }
            </code>
            <code lang="VB">
            Dim expectedVersion As New Version(2, 4)
            If BassWasapi.BASS_WASAPI_GetVersion(2) &lt; expectedVersion Then
              MessageBox.Show(Me, "Wrong BassWasapi Version!")
            End If
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfoInternal(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO_INTERNAL@)">
            <summary>
            
            </summary>
            <param name="device"></param>
            <param name="info"></param>
            <returns></returns>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)">
            <summary>
            Retrieves information on a Wasapi device (endpoint).
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <param name="info">An instance of the <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO"/> class to store the information at.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function can be used to enumerate the available Wasapi devices (endpoints) for a setup dialog. 
            <para>Note: Input (capture) devices can be determined by evaluating the <see cref="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.flags"/> member (which must be either BASS_DEVICE_INPUT or BASS_DEVICE_LOOPBACK).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WASAPI</term><description>WASAPI is not available.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            List all available endpoints:
            <code lang="C#">
            BASS_WASAPI_DEVICEINFO info = new BASS_WASAPI_DEVICEINFO();
            for (int n=0; BassWasapi.BASS_WASAPI_GetDeviceInfo(n, info); n++)
            {
              Console.WriteLine(info.ToString());
            }
            </code>
            <code lang="VB">
            Dim n As Integer = 0
            Dim info As New BASS_WASAPI_DEVICEINFO()
            While (BassWasapi.BASS_WASAPI_GetDeviceInfo(n, info))
              Console.WriteLine(info.ToString())
              n += 1
            End While
            </code>
            Or use the <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfos"/> method for more convenience.
            </example>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32)">
            <summary>
            Retrieves information on a Wasapi device (endpoint).
            </summary>
            <param name="device">The device to get the information of... 0 = first.</param>
            <returns>If successful, then an instance of the <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO"/> class is returned, else <see langword="null"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            This function can be used to enumerate the available Wasapi devices (endpoints) for a setup dialog. 
            <para>Note: Input (capture) devices can be determined by evaluating the <see cref="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.flags"/> member (which must be either BASS_DEVICE_INPUT or BASS_DEVICE_LOOPBACK).</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WASAPI</term><description>WASAPI is not available.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description>The device number specified is invalid.</description></item>
            </list>
            </para>
            </remarks>
            <example>
            <code lang="C#">
            BASS_WASAPI_DEVICEINFO info;
            for (int n = 0; (info = BassWasapi.BASS_WASAPI_GetDeviceInfo(n)) != null; n++)
            {
              ...
            }
            </code>
            <code lang="VB">
            Dim n As Integer = 0
            Dim info As New BASS_WASAPI_DEVICEINFO()
            While Not (info Is Nothing)
              info = BassWasapi.BASS_WASAPI_GetDeviceDescription(n)
              If Not (info Is Nothing) Then
                ...
              End If
              n += 1
            End While
            </code>
            Or use the <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfos"/> method for more convenience.
            </example>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfos">
            <summary>
            Returns all available Wasapi devices (endpoints).
            </summary>
            <returns>An array of <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO"/> elements representing the available Wasapi devices (endpoints).</returns>
            <remarks>Uses <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/> internally.
            <para>This function lists all available endpoits (rendering as well as capturing devices).
            Input (capture) devices can be determined by evaluating the <see cref="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.flags"/> member (which must be either BASS_DEVICE_INPUT or BASS_DEVICE_LOOPBACK).
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceCount">
            <summary>
            Returns the total number of available Wasapi devices (endpoints).
            </summary>
            <returns>Number of WASAPI devices (endpoints) available.</returns>
            <remarks>Uses <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/> internally.</remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)">
            <summary>
            Sets the device to use for subsequent calls in the current thread.
            </summary>
            <param name="device">The device to use... 0 = first device.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>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. The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.</para>
            <para>All of the BASSWASAPI functions that do not have their own "device" parameter make use of this device selection. When one of them is called, BASSWASAPI will check the current thread's device setting, and if no device is selected (or the selected device is not initialized), BASSWASAPI will automatically select the lowest device that is initialized. This means that when using a single device, there is no need to use this function; BASSWASAPI will automatically use the device that is initialized. Even if you free the device, and initialize another, BASSWASAPI will automatically switch to the one that is initialized.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_DEVICE</term><description>The <paramref name="device"/> number specified is invalid.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The device has not been initialized.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDevice">
            <summary>
            Retrieves the Wasapi device setting in the current thread.
            </summary>
            <returns>If successful, the device number is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/>to get the error code.</returns>
            <remarks>As in BASS, simultaneously using multiple devices is supported in the BASSWASAPI API via a context switching system - instead of there being an extra "device" parameter in the function calls, the device to be used needs to be set via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/> prior to calling the function. The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called - there are no initialized devices.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_CheckFormat(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit)">
            <summary>
            Checks if a particular sample format is supported by a device (endpoint).
            </summary>
            <param name="device">The device to use... 0 = first device, -1 = default device, -2 = default input device. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/> can be used to enumerate the available devices.</param>
            <param name="freq">The sample rate to check.</param>
            <param name="chans">The number of channels to check... 1 = mono, 2 = stereo, etc.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.BassWasapi.BASSWASAPIInit"/>):
            <list type="table">
            <item><term>BASS_WASAPI_SHARED</term><description>Check the device in shared mode.</description></item>
            <item><term>BASS_WASAPI_EXCLUSIVE</term><description>Check the device in exclusive mode.
            The HIWORD - use Utils.MakeLong(flags,format) - can be used to limit the sample formats that are checked in exclusive mode. The default is to check 32-bit floating-point, 32-bit integer, 24-bit integer, 16-bit integer, 8-bit integer, in that order. A BASS_WASAPI_FORMAT value (see BASS_WASAPI_INFO) can be used to bypass the formats that precede it in that list.</description></item>
            </list>
            </param>
            <returns>If the sample format is supported, the maximum supported resolution (a <see cref="T:Un4seen.BassWasapi.BASSWASAPIFormat"/> value) is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Call this method prior to <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> in order to make sure the requested format is supported by the Wasapi output device/driver (endpoint).
            <para>Shared and exclusive modes may have different sample formats available.
            Only the "mix format" (available from <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>) is generally supported in shared mode.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WASAPI</term><description>WASAPI is not available.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description>The <paramref name="device"/> number specified is invalid.</description></item>
            <item><term>BASS_ERROR_DRIVER</term><description>The driver could not be initialized.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>Unsupported sample format or number of channels.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_CheckFormat(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIFormat)">
            <summary>
            Checks if a particular sample format is supported by a device (endpoint) in exclusive mode.
            </summary>
            <param name="device">The device to use... 0 = first device, -1 = default device, -2 = default input device. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/> can be used to enumerate the available devices.</param>
            <param name="freq">The sample rate to check.</param>
            <param name="chans">The number of channels to check... 1 = mono, 2 = stereo, etc.</param>
            <param name="format">Limit the sample format that is used in exclusive mode. The default is to try 32-bit floating-point, 32-bit integer, 24-bit integer, 16-bit integer, 8-bit integer, in that order. A BASS_WASAPI_FORMAT value (see <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_INFO"/>) can be used to bypass the formats that precede it in that list.</param>
            <returns>If the sample format is supported, the maximum supported resolution (a <see cref="T:Un4seen.BassWasapi.BASSWASAPIFormat"/> value) is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>This overload always uses the BASS_WASAPI_EXCLUSIVE flag which will be applied automatically!
            The <paramref name="format"/> parameter can be used to limit the sample format that is used in exclusive mode.</para>
            <para>Call this method prior to <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> in order to make sure the requested format is supported by the Wasapi output device/driver (endpoint).</para>
            <para>Shared and exclusive modes may have different sample formats available.
            Only the "mix format" (available from <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>) is generally supported in shared mode.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WASAPI</term><description>WASAPI is not available.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description>The <paramref name="device"/> number specified is invalid.</description></item>
            <item><term>BASS_ERROR_DRIVER</term><description>The driver could not be initialized.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>Unsupported sample format or number of channels.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)">
            <summary>
            Initializes a Wasapi device/driver (endpoint).
            </summary>
            <param name="device">The device to use... 0 = first device, -1 = default output device, -2 = default input device, -3 = default loopback input device. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/> can be used to enumerate the available devices.</param>
            <param name="freq">The sample rate to use... 0 = "mix format" sample rate.</param>
            <param name="chans">The number of channels to use... 0 = "mix format" channels, 1 = mono, 2 = stereo, etc.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.BassWasapi.BASSWASAPIInit"/>):
            <list type="table">
            <item><term>BASS_WASAPI_SHARED</term><description>Open the device in shared mode.</description></item>
            <item><term>BASS_WASAPI_EXCLUSIVE</term><description>Initialize the device in exclusive mode, else shared mode.
            The HIWORD - use Utils.MakeLong(flags,format) - can be used to limit the sample format that is used in exclusive mode. The default is to try 32-bit floating-point, 32-bit integer, 24-bit integer, 16-bit integer, 8-bit integer, in that order. A BASS_WASAPI_FORMAT value (see <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_INFO"/>) can be used to bypass the formats that precede it in that list.</description></item>
            <item><term>BASS_WASAPI_AUTOFORMAT</term><description>Automatically choose another sample format if the specified format is not supported. If possible, a higher sample rate than freq will be used, rather than a lower one.</description></item>
            <item><term>BASS_WASAPI_BUFFER</term><description>Enable double buffering, for use by <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetLevel"/>. This requires the BASS "no sound" device to have been initilized, via <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_WASAPI_EVENT</term><description>Enables the event-driven system.
            Enable event-driven buffering. BASSWASAPI will normally periodically write data to (or read data from) the device's buffer according to the period parameter, but with the event-driven system WASAPI will signal to BASSWASAPI when more data should be written to (or read from) the buffer. So the period parameter is ignored, and buffer is too in shared mode as the system will choose an appropriate buffer length. In exclusive mode, there are 2 buffers of buffer length that are processed alternately. Event-driven buffering is unavailable on loopback devices.
            </description></item>
            <item><term>BASS_WASAPI_SAMPLES</term><description><paramref name="buffer"/> and <paramref name="period"/> are in samples rather than seconds.</description></item>
            <item><term>BASS_WASAPI_DITHER</term><description>Requests to apply dither to the output.
            Dither is optional rather than automatic because it destroys bit-perfect output; you probably don't want to enable it unless you're applying DSP (including volume changes).
            When the output is floating-point (eg. in shared mode), the flag will have no effect.</description></item>
            </list>
            </param>
            <param name="buffer">The length of the device's buffer in seconds. This is a minimum and the driver may choose to use a larger buffer; <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/> can be used to confirm what the buffer size is. For an output device, the buffer size determines the latency. With event-driven exclusive mode, there will be 2 buffers of this length, so the total buffer length is double.</param>
            <param name="period">The interval (in seconds or samples depending on BASS_WASAPI_SAMPLES) between callback function calls... 0 = use default. If the specified period is below the minimum update period, it will automatically be raised to that. This is ignored when the BASS_WASAPI_EVENT flag is specified, except in shared mode when buffer = 0 on Windows 10 (see remarks).
            <para>The update period specifies the time between <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/> calls.
            The <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO"/> (see <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>) "minperiod" and "defperiod" values are actually minimum/default update periods.
            </para>
            </param>
            <param name="proc">The user defined function to process the channel. Use <see langword="null"/> to create a Wasapi "push" device (to which you can feed sample data via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_PutData(System.IntPtr,System.Int32)"/>).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If the device was successfully initialized, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>For convenience, devices are always initialized to use their highest sample resolution and that is then converted to 32-bit floating-point, so that WASAPIPROC callback functions and the <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_PutData(System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> functions are always dealing with the same sample format.
            The device's sample format can be obtained via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/>.</para>
            <para>WASAPI does not support arbitrary sample formats, like DirectSound does. In particular, only the "mix format" (available from <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>) is generally supported in shared mode.
            <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_CheckFormat(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit)"/> can be used to check whether a particular sample format is supported. The BASSmix add-on can be used to play (or record) in otherwise unsupported sample formats, as well as playing multiple sources.</para>
            <para>A loopback device can only be used when the corresponding output device is not being used in exclusive mode, and it will only deliver data when the ouput device does; if the output device produces no data, then the loopback device will capture no data.</para>
            <para>Shared mode usually has a fixed period of 10ms, but Windows 10 supports shorter periods, which allows smaller buffers and lower latency. 
            A shorter period (and buffer) can be requested by setting buffer to 0 and period to the length wanted. If the requested period is lower than the device (or Windows) supports, then it will be automatically raised to the minimum supported. 
            It will also be rounded up if it does not match the device's granularity. The actual period in use can be determined from the (minimum) amount of data that gets requested from the WASAPIPROC callback function. 
            The shared mode period is a system-wide setting that affects all users of the device, particular those using event-driven buffering; they will be asked to provide data at the new period. 
            If another process is already using a non-default period, then it will not be possible to set a different period until they finish; the existing period will have to be used in the meantime.</para>
            <para>The initialized device will not begin processing data until <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Start"/> is called.</para>
            <para>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. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/> is used to switch the current device.
            When successful, <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> automatically sets the current thread's device to the one that was just initialized.</para>
            <para>When using the default output or input device, <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDevice"/> can be used to find out which device it was mapped to.</para>
            <para>In SHARED mode you must initialize the device with the current WASAPI mixer sample rate and number of channels (see the <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO"/> "mixfreq" and "mixchans" properties).</para>
            <para>In EXCLUSIVE mode you might use any sample rate and number of channels which are supported by the device/driver.</para>
            <para>This function must be successfully called before any input or output can be performed.</para>
            <para>In EXCLUSIVE mode, the "period" value will affect what's an acceptable "buffer" value (it appears that the buffer must be at least 4x the period).
            In SHARED mode, it's the other way round, the "period" will be reduced to fit the "buffer" if necessary (with a minimum of the "defperiod" value).
            The system will limit them to an acceptable range, so for example, you could use a very small value (eg. 0.0001) for both, to get the minimum possible latency.</para>
            <para>Note: When initializing an input (capture or loopback) device, it might be the case, that the device is automatically muted once initialized.
            You can use the <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetMute(Un4seen.BassWasapi.BASSWASAPIVolume)"/>/<see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetMute(Un4seen.BassWasapi.BASSWASAPIVolume,System.Boolean)"/> methods to check and probably toggle this.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WASAPI</term><description>WASAPI is not available.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description>The <paramref name="device"/> number specified is invalid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>A device has already been initialized. You must call <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Free"/> before you can initialize again.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>Event-driven buffering and exclusive mode are unavailable on loopback devices.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>An illegal parameter was specified (a WASAPIPROC must be provided for an input device).</description></item>
            <item><term>BASS_ERROR_DRIVER</term><description>The driver could not be initialized.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The specified format is not supported by the device. If the BASS_WASAPI_AUTOFORMAT flag was specified, no other format could be found either.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The BASS "no sound" device has not been initialized.</description></item>
            <item><term>BASS_ERROR_BUSY</term><description>The device is busy (eg. in "exclusive" use by another process).</description></item>
            <item><term>BASS_ERROR_WASAPI_BUFFER</term><description><paramref name="buffer"/> is too large or small (exclusive mode only).</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery error.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,Un4seen.BassWasapi.BASSWASAPIFormat,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)">
            <summary>
            Initializes a Wasapi device/driver (endpoint) in exclusive mode.
            </summary>
            <param name="device">The device to use... 0 = first device, -1 = default output device, -2 = default input device. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/> can be used to enumerate the available devices.</param>
            <param name="freq">The sample rate to use... 0 = "mix format" sample rate.</param>
            <param name="chans">The number of channels to use... 0 = "mix format" channels, 1 = mono, 2 = stereo, etc.</param>
            <param name="flags">Any combination of these flags (see <see cref="T:Un4seen.BassWasapi.BASSWASAPIInit"/>):
            <list type="table">
            <item><term>BASS_WASAPI_EXCLUSIVE</term><description>This flag will be applied automatically by this overload!
            The <paramref name="format"/> parameter can be used to limit the sample format that is used in exclusive mode.</description></item>
            <item><term>BASS_WASAPI_AUTOFORMAT</term><description>Automatically choose another sample format if the specified format is not supported. If possible, a higher sample rate than freq will be used, rather than a lower one.</description></item>
            <item><term>BASS_WASAPI_BUFFER</term><description>Enable double buffering, for use by <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetLevel"/>. This requires the BASS "no sound" device to have been initilized, via <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</description></item>
            <item><term>BASS_WASAPI_EVENT</term><description>Enables the event-driven system.
            It is only supported when a WASAPIPROC function is provided, ie. not when using <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_PutData(System.IntPtr,System.Int32)"/>.
            When used with shared mode, the user-provided 'buffer' and 'period' lengths are ignored and WASAPI decides what buffer to use (<see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/> can be used to check that).
            </description></item>
            </list>
            </param>
            <param name="format">Limit the sample format that is used in exclusive mode. The default is to try 32-bit floating-point, 32-bit integer, 24-bit integer, 16-bit integer, 8-bit integer, in that order. A BASS_WASAPI_FORMAT value (see <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_INFO"/>) can be used to bypass the formats that precede it in that list.</param>
            <param name="buffer">The length of the device's buffer in seconds. This is a minimum and the driver may choose to use a larger buffer; <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/> can be used to confirm what the buffer size is. For an output device, the buffer size determines the latency.</param>
            <param name="period">The interval (in seconds) between callback function calls... 0 = use default. If the specified period is below the minimum update period, it will automatically be raised to that.
            <para>The update period specifies the time between <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/> calls.
            The <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO"/> (see <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>) "minperiod" and "defperiod" values are actually minimum/default update periods.
            </para>
            </param>
            <param name="proc">The user defined function to process the channel. Use <see langword="null"/> to create a Wasapi "push" device (to which you can feed sample data via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_PutData(System.IntPtr,System.Int32)"/>).</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If the device was successfully initialized, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>For convenience, devices are always initialized to use their highest sample resolution and that is then converted to 32-bit floating-point, so that WASAPIPROC callback functions and the <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_PutData(System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> functions are always dealing with the same sample format.
            The device's sample format can be obtained via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/>.</para>
            <para>WASAPI does not support arbitrary sample formats, like DirectSound does. In particular, only the "mix format" (available from <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>) is generally supported in shared mode.
            <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_CheckFormat(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit)"/> can be used to check whether a particular sample format is supported. The BASSmix add-on can be used to play (or record) in otherwise unsupported sample formats, as well as playing multiple sources.</para>
            <para>The initialized device will not begin processing data until <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Start"/> is called.</para>
            <para>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. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/> is used to switch the current device.
            When successful, <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> automatically sets the current thread's device to the one that was just initialized.</para>
            <para>When using the default output or input device, <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDevice"/> can be used to find out which device it was mapped to.</para>
            <para>In SHARED mode you must initialize the device with the current WASAPI mixer sample rate and number of channels (see the <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO"/> "mixfreq" and "mixchans" properties).</para>
            <para>In EXCLUSIVE mode you might use any sample rate and number of channels which are supported by the device/driver.</para>
            <para>This function must be successfully called before any input or output can be performed.</para>
            <para>In EXCLUSIVE mode, the "period" value will affect what's an acceptable "buffer" value (it appears that the buffer must be at least 4x the period).
            In SHARED mode, it's the other way round, the "period" will be reduced to fit the "buffer" if necessary (with a minimum of the "defperiod" value).
            The system will limit them to an acceptable range, so for example, you could use a very small value (eg. 0.0001) for both, to get the minimum possible latency.</para>
            <para>Note: When initializing an input (capture or loopback) device, it might be the case, that the device is automatically muted once initialized.
            You can use the <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetMute(Un4seen.BassWasapi.BASSWASAPIVolume)"/>/<see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetMute(Un4seen.BassWasapi.BASSWASAPIVolume,System.Boolean)"/> methods to check and probably toggle this.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WASAPI</term><description>WASAPI is not available.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description>The <paramref name="device"/> number specified is invalid.</description></item>
            <item><term>BASS_ERROR_ALREADY</term><description>A device has already been initialized. You must call <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Free"/> before you can initialize again.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description>An illegal parameter was specified (a WASAPIPROC must be provided for an input device).</description></item>
            <item><term>BASS_ERROR_DRIVER</term><description>The driver could not be initialized.</description></item>
            <item><term>BASS_ERROR_FORMAT</term><description>The specified format is not supported by the device. If the BASS_WASAPI_AUTOFORMAT flag was specified, no other format could be found either.</description></item>
            <item><term>BASS_ERROR_INIT</term><description>The BASS "no sound" device has not been initialized.</description></item>
            <item><term>BASS_ERROR_BUSY</term><description>The device is busy (eg. in "exclusive" use by another process).</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery error.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Free">
            <summary>
            Frees the Wasapi device/driver (endpoint).
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This function should be called for all initialized devices before the program closes. Freed devices do not need to have been stopped with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Stop(System.Boolean)"/> beforehand.
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)">
            <summary>
            Retrieves information on the Wasapi device being used.
            </summary>
            <param name="info">An instance of the <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_INFO"/> class to store the information at.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>This method can be used to get the effective settings used with an initialized WASAPI device (endpoint).
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo">
            <summary>
            Retrieves information on the Wasapi device being used.
            </summary>
            <returns>An instance of the <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_INFO"/> class on success - else <see langword="null"/>.</returns>
            <remarks>This method can be used to get the effective settings used with an initialized WASAPI device (endpoint).
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Start">
            <summary>
            Starts processing the current Wasapi device/driver (endpoint).
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Before starting the device, it must be initialized using <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/>. Use <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Stop(System.Boolean)"/> to stop processing the device.
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Stop(System.Boolean)">
            <summary>
            Stops the current Wasapi device/driver (endpoint).
            </summary>
            <param name="reset">Flush the device buffer?
            <para><see langword="true"/> will clear the output buffer. Otherwise it is like pausing, eg. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Start"/> will resume playing the buffered data.</para>
            </param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>If the device buffer is left unflushed (reset=FALSE), a subsequent <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Start"/> call will resume things with the buffered data, otherwise it will resume with fresh data.</para>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_START</term><description>The device hasn't been started.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_IsStarted">
            <summary>
            Checks, if the current Wasapi device/driver (endpoint) has been already started (via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Start"/>).
            </summary>
            <returns>Returns <see langword="true"/>, if the device has been started, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetCPU">
            <summary>
            Retrieves the current CPU usage of BASSWASAPI.
            </summary>
            <returns>The BASSWASAPI CPU usage as a percentage of total CPU time.</returns>
            <remarks>This function includes the time taken by the <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/> callback functions.</remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Lock(System.Boolean)">
            <summary>
            Locks the device to the current thread.
            </summary>
            <param name="state">If <see langword="false"/>, unlock WASAPI, else lock it.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Locking a device prevents other threads from accessing the device buffer, including a WASAPIPROC. Other threads wanting to access a locked device will block until it is unlocked, so a device should only be locked very briefly.
            A device must be unlocked in the same thread that it was locked.
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetVolume(Un4seen.BassWasapi.BASSWASAPIVolume,System.Single)">
            <summary>
            Sets the volume of the current Wasapi device/driver (endpoint).
            </summary>
            <param name="curve">Volume curve to use, one of the following:
            <list type="table">
            <item><term>BASS_WASAPI_CURVE_DB</term><description>Logarithmic curve.</description></item>
            <item><term>BASS_WASAPI_CURVE_LINEAR</term><description>Linear curve.</description></item>
            <item><term>BASS_WASAPI_CURVE_WINDOWS</term><description>Windows' hybrid curve.</description></item>
            <item><term>BASS_WASAPI_VOL_SESSION</term><description>Set the session volume, else the device volume.</description></item>
            </list>
            </param>
            <param name="volume">The new volume to set between 0.0 (silent) and 1.0 (maximum) if linear, or else a dB level.</param>
            <returns>Returns <see langword="true"/> on success, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            Session volume only affects the current process, so other users of the device are unaffected. It has no effect on exclusive mode output, and maps to the device volume with input devices (so does affect other users).
            Session volume always uses the BASS_WASAPI_CURVE_WINDOWS curve.
            If you need to control the volume of the stream only, you need to apply that directly within the <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/> yourself.
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There is no volume control available.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="volume"/> is invalid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetVolume(Un4seen.BassWasapi.BASSWASAPIVolume)">
            <summary>
            Retrieves the current volume level.
            </summary>
            <param name="curve">Volume curve to use, one of the following:
            <list type="table">
            <item><term>BASS_WASAPI_CURVE_DB</term><description>Logarithmic curve.</description></item>
            <item><term>BASS_WASAPI_CURVE_LINEAR</term><description>Linear curve.</description></item>
            <item><term>BASS_WASAPI_CURVE_WINDOWS</term><description>Windows' hybrid curve.</description></item>
            <item><term>BASS_WASAPI_VOL_SESSION</term><description>Get the session volume, else the device volume.</description></item>
            </list>
            </param>
            <returns>If successful, the volume level is returned, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Session volume always uses the BASS_WASAPI_CURVE_WINDOWS curve.
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There is no volume control available.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_PutData(System.IntPtr,System.Int32)">
            <summary>
            Adds sample data to an output device buffer ("push" device).
            </summary>
            <param name="buffer">The pointer to the sample data to provide.</param>
            <param name="length">The amount of data in bytes! (buffer.Length/4). <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> with the BASS_DATA_AVAILABLE flag can be used to check how much data is queued.</param>
            <returns>If successful, the the amount of data copied from the provided buffer will be returned (which may be less than requested if it doesn't all fit in the device buffer, see the <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_INFO"/> "buflen" property), else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>You must have initialized the device via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> using <see langword="null"/> for the <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/>.
            <para>As much data as possible will be placed in the device's buffer; this function will have to be called again for any remainder.</para>
            <para>Data should be provided at a rate sufficent to sustain playback. If the buffer gets exhausted, ouput will stall until more data is provided. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check how much data is buffered.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The device is being fed by a WASAPIPROC callback function, or it is an input device.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid, it must equate to a whole number of samples.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_PutData(System.Single[],System.Int32)">
            <summary>
            Adds sample data to an output device buffer ("push" device).
            </summary>
            <param name="buffer">The array of float sample data to provide.</param>
            <param name="length">The amount of data in bytes! (buffer.Length/4). <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> with the BASS_DATA_AVAILABLE flag can be used to check how much data is queued.</param>
            <returns>If successful, the the amount of data copied from the provided buffer will be returned (which may be less than requested if it doesn't all fit in the device buffer, see the <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_INFO"/> "buflen" property), else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>You must have initialized the device via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> using <see langword="null"/> for the <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/>.
            <para>As much data as possible will be placed in the device's buffer; this function will have to be called again for any remainder.</para>
            <para>Data should be provided at a rate sufficent to sustain playback. If the buffer gets exhausted, ouput will stall until more data is provided. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check how much data is buffered.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The device is being fed by a WASAPIPROC callback function, or it is an input device.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid, it must equate to a whole number of samples.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetLevel">
            <summary>
            Retrieves the level (peak amplitude) of the current Wasapi device/driver (endpoint).
            </summary>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.
            <para>If successful, the level of the left channel is returned in the low word (low 16-bits, use <see cref="M:Un4seen.Bass.Utils.LowWord32(System.Int32)"/>), and the level of the right channel is returned in the high word (high 16-bits, use <see cref="M:Un4seen.Bass.Utils.HighWord32(System.Int32)"/>). If the channel is mono, then the low word is duplicated in the high word. 
            The level ranges linearly from 0 (silent) to 32768 (max). 0 will be returned when a channel is stalled.</para>
            </returns>
            <remarks>
            <para>This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/>, but it gets the level from the devices's buffer instead of decoding data from a channel, which means that the device doesn't miss out on any data. 
            The BASS_WASAPI_BUFFER flag needs to have been specified in the device's initialization to enable the use of this function.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The device was not initialized using buffering (BASS_WASAPI_BUFFER).</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetLevel(System.Single[],System.Single,Un4seen.Bass.BASSLevel)">
            <summary>
            Retrieves the level of the current Wasapi device/driver (endpoint).
            </summary>
            <param name="levels">The array in which the levels are to be returned.</param>
            <param name="length">The amount of data to inspect to calculate the level, in seconds. The maximum is 1 second. Less data than requested may be used if the full amount is not available, eg. if the device's buffer is shorter.</param>
            <param name="flags">What levels to retrieve. One of the following (see <see cref="T:Un4seen.Bass.BASSLevel"/>):
            <list type="table">
            <item><term>BASS_LEVEL_ALL</term><description>Retrieves a separate level for each channel.</description></item>
            <item><term>BASS_LEVEL_MONO</term><description>Retrieve a single mono level.</description></item>
            <item><term>BASS_LEVEL_STEREO</term><description>Get a stereo level. The left level will be from the even channels, and the right level will be from the odd channels. If there are an odd number of channels then the left and right levels will both include all channels.</description></item>
            <item><term>BASS_LEVEL_RMS</term><description>Flag: Get the RMS level. Otherwise the peak level.</description></item>
            </list>
            </param>
            <returns>On success <see langword="true"/> is returned - else <see langword="false"/>, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.
            <para>If successful, the requested levels are returned in the <paramref name="levels"/> array.</para>
            </returns>
            <remarks>
            This function uses <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> internally, so it behaves identically to that. 
            The BASS_WASAPI_BUFFER flag needs to have been specified in the device's initialization to enable the use of this function.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_WASAPI_BUFFER flag was not specified in the device's initialization.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetLevel(System.Single,Un4seen.Bass.BASSLevel)">
            <summary>
            Retrieves the level of the current Wasapi device/driver (endpoint).
            </summary>
            <param name="length">The amount of data to inspect to calculate the level, in seconds. The maximum is 1 second. Less data than requested may be used if the full amount is not available, eg. if the device's buffer is shorter.</param>
            <param name="flags">What levels to retrieve. One of the following (see <see cref="T:Un4seen.Bass.BASSLevel"/>):
            <list type="table">
            <item><term>BASS_LEVEL_ALL</term><description>Retrieves a separate level for each channel.</description></item>
            <item><term>BASS_LEVEL_MONO</term><description>Retrieve a single mono level.</description></item>
            <item><term>BASS_LEVEL_STEREO</term><description>Get a stereo level. The left level will be from the even channels, and the right level will be from the odd channels. If there are an odd number of channels then the left and right levels will both include all channels.</description></item>
            <item><term>BASS_LEVEL_RMS</term><description>Flag: Get the RMS level. Otherwise the peak level.</description></item>
            </list>
            </param>
            <returns>On success <see langword="true"/> is returned - else <see langword="false"/>, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.
            <para>If successful, the requested levels are returned.</para>
            </returns>
            <remarks>
            This function uses <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetLevel(System.Int32)"/> internally, so it behaves identically to that. 
            The BASS_WASAPI_BUFFER flag needs to have been specified in the device's initialization to enable the use of this function.
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The BASS_WASAPI_BUFFER flag was not specified in the device's initialization.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="length"/> is not valid.</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)">
            <summary>
            Retrieves the immediate sample data (or an FFT representation of it) of the current Wasapi device/driver (endpoint).
            This overload uses an IntPtr to reference the buffer data.
            </summary>
            <param name="buffer">Location to write the data to.
            <para>Use "Marshal.AllocCoTaskMem" to allocate a memory buffer, use "Marshal.Copy" to copy the buffer data from unmanaged BASS to your managed code and use "Marshal.FreeCoTaskMem" to free the memory buffer when not needed anymore.</para>
            <para>Or make use of a "GCHandle" to receive data to a pinned managed object.</para>
            </param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_FLOAT</term><description>Return floating-point sample data.</description></item>
            <item><term>BASS_DATA_FFT256</term><description>256 sample FFT (returns 128 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT512</term><description>512 sample FFT (returns 256 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT1024</term><description>1024 sample FFT (returns 512 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT2048</term><description>2048 sample FFT (returns 1024 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT4096</term><description>4096 sample FFT (returns 2048 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT8192</term><description>8192 sample FFT (returns 4096 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT_INDIVIDUAL</term><description>Use this flag to request separate FFT data for each channel. The size of the data returned (as listed above) is multiplied by the number channels.</description></item>
            <item><term>BASS_DATA_FFT_NOWINDOW</term><description>This flag can be used to prevent a hanning window being applied to the sample data when performing an FFT.</description></item>
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the device has buffered (the BASS_WASAPI_BUFFER flag isn't required for this, <paramref name="buffer"/> can be <see langword="null"/> when using this flag).</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting FFT data, the number of bytes read from the device (to perform the FFT) is returned.</para>
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the device's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, but it gets the data from the device's buffer instead of decoding it from a channel, 
            which means that the device doesn't miss out on any data. In order to do this, the device must have buffering enabled, via the BASS_MIXER_CHAN_BUFFER flag.</para>
            <para>Internally, a BASS stream is used for that, so the usual BASS_DATA_xxx flags are supported. That also means that BASS needs to have been initialized first; it specifically uses the "no sound" device. 
            If the device is subsequently freed, this method call will fail.</para>
            <para>As in BASS, simultaneously using multiple devices is supported in the BASSWASAPI API via a context switching system - instead of there being an extra "device" parameter in the function calls, 
            the device to be used needs to be set via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/> prior to calling the function. 
            The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.</para>
            <para>With an output device, the BASS_DATA_AVAILABLE return value may be larger than the buffer size indicated by <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/> due to additional latency in the device/driver. 
            When a mixer is feeding an output device, the BASS_DATA_AVAILABLE return value can be used with the BASS_ATTRIB_MIXER_LATENCY attribute and/or the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPositionEx(System.Int32,Un4seen.Bass.BASSMode,System.Int32)"/> function, to have the mixer account for the latency in its source position reporting and data/level retrieval.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The device was not initialized using buffering (BASS_WASAPI_BUFFER).</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.Single[],System.Int32)">
            <summary>
            Retrieves the immediate sample data (or an FFT representation of it) of the current Wasapi device/driver (endpoint).
            This overload uses a managed float[] to reference the buffer data as 32-bit!
            </summary>
            <param name="buffer">The array (float[]) to write the data to.</param>
            <param name="length">Number of bytes wanted, and/or the following flags (<see cref="T:Un4seen.Bass.BASSData"/>):
            <list type="table">
            <item><term>BASS_DATA_FLOAT</term><description>Return floating-point sample data.</description></item>
            <item><term>BASS_DATA_FFT256</term><description>256 sample FFT (returns 128 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT512</term><description>512 sample FFT (returns 256 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT1024</term><description>1024 sample FFT (returns 512 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT2048</term><description>2048 sample FFT (returns 1024 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT4096</term><description>4096 sample FFT (returns 2048 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT8192</term><description>8192 sample FFT (returns 4096 floating-point values)</description></item>
            <item><term>BASS_DATA_FFT_INDIVIDUAL</term><description>Use this flag to request separate FFT data for each channel. The size of the data returned (as listed above) is multiplied by the number channels.</description></item>
            <item><term>BASS_DATA_FFT_NOWINDOW</term><description>This flag can be used to prevent a hanning window being applied to the sample data when performing an FFT.</description></item>
            <item><term>BASS_DATA_AVAILABLE</term><description>Query the amount of data the device has buffered (the BASS_WASAPI_BUFFER flag isn't required for this, <paramref name="buffer"/> can be <see langword="null"/> when using this flag).</description></item>
            </list>
            </param>
            <returns>If an error occurs, -1 is returned, use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code. 
            <para>When requesting FFT data, the number of bytes read from the device (to perform the FFT) is returned.</para>
            <para>When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag).</para>
            <para>When using the BASS_DATA_AVAILABLE flag, the number of bytes in the device's buffer is returned.</para>
            </returns>
            <remarks>
            <para>This function is like the standard <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/>, but it gets the data from the device's buffer instead of decoding it from a channel, 
            which means that the device doesn't miss out on any data. In order to do this, the device must have buffering enabled, via the BASS_MIXER_CHAN_BUFFER flag.</para>
            <para>As in BASS, simultaneously using multiple devices is supported in the BASSWASAPI API via a context switching system - instead of there being an extra "device" parameter in the function calls, 
            the device to be used needs to be set via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/> prior to calling the function. 
            The device setting is local to the current thread, so calling functions with different devices simultaneously in multiple threads is not a problem.</para>
            <para>With an output device, the BASS_DATA_AVAILABLE return value may be larger than the buffer size indicated by <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/> due to additional latency in the device/driver. 
            When a mixer is feeding an output device, the BASS_DATA_AVAILABLE return value can be used with the BASS_ATTRIB_MIXER_LATENCY attribute and/or the <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_ChannelGetPositionEx(System.Int32,Un4seen.Bass.BASSMode,System.Int32)"/> function, to have the mixer account for the latency in its source position reporting and data/level retrieval.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>The device was not initialized using buffering (BASS_WASAPI_BUFFER).</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceLevel(System.Int32,System.Int32)">
            <summary>
            Gets the audio meter information of the current Wasapi device/driver (endpoint).
            </summary>
            <param name="device">The device to use... 0 = first device. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/> can be used to get the total number of devices.</param>
            <param name="chan">The channel number to get the audio level meter information from (0=first, -1=all).</param>
            <returns>The audio level between 0.0 (silence) and 1.0 (maximum).</returns>
            <remarks>This method returns the global session level for the device which might include the level of other applications using the same device in shared-mode.
            <para>This function gets the level from the device/driver, or WASAPI if the device does not have its own level meter. If the latter case, the level will be unavailable when exclusive mode is active.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_WASAPI</term><description>WASAPI is not available.</description></item>
            <item><term>BASS_ERROR_DEVICE</term><description><paramref name="device"/> is not valid.</description></item>
            <item><term>BASS_ERROR_DRIVER</term><description>The device driver does not support level retrieval.</description></item>
            <item><term>BASS_ERROR_ILLPARAM</term><description><paramref name="chan"/> is not valid.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetMute(Un4seen.BassWasapi.BASSWASAPIVolume,System.Boolean)">
            <summary>
            Sets the mute status of the current Wasapi device/driver (endpoint).
            </summary>
            <param name="mode">The type of volume to set:
            <list type="table">
            <item><term>BASS_WASAPI_VOL_SESSION</term><description>Set the session volume.</description></item>
            <item><term>BASS_WASAPI_VOL_DEVICE</term><description>Set the device volume.</description></item>
            </list>
            </param>
            <param name="mute"><see langword="true"/> to mute the device, <see langword="false"/> to unmute the device.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There is no volume control available.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetMute(Un4seen.BassWasapi.BASSWASAPIVolume)">
            <summary>
            Gets the mute status of the current Wasapi device/driver (endpoint).
            </summary>
            <param name="mode">The type of volume to get:
            <list type="table">
            <item><term>BASS_WASAPI_VOL_SESSION</term><description>Get the session volume.</description></item>
            <item><term>BASS_WASAPI_VOL_DEVICE</term><description>Get the device volume.</description></item>
            </list>
            </param>
            <returns>Returns <see langword="true"/>, if the device/session is muted and <see langword="false"/> if unmuted, else -1 is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            <para>When using multiple devices, the current thread's device setting (as set with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetDevice(System.Int32)"/>) determines which device this function call applies to.</para>
            <para>
            <list type="table">
            <listheader><term><see cref="T:Un4seen.Bass.BASSError">ERROR CODE</see></term><description>Description</description></listheader>
            <item><term>BASS_ERROR_INIT</term><description><see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> has not been successfully called.</description></item>
            <item><term>BASS_ERROR_NOTAVAIL</term><description>There is no volume control available.</description></item>
            <item><term>BASS_ERROR_UNKNOWN</term><description>Some other mystery problem!</description></item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetNotify(Un4seen.BassWasapi.WASAPINOTIFYPROC,System.IntPtr)">
            <summary>
            Sets a device change notification callback.
            </summary>
            <param name="proc">User defined notification function... <see langword="null"/> = disable notifications.</param>
            <param name="user">User instance data to pass to the callback function.</param>
            <returns>If successful, <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>
            A previously set notification callback can be changed (or removed) at any time, by calling this function again.
            <para>If the BASSWASAPI DLL is loaded dynamically (eg. via LoadLibrary), this function should be called with NULL parameters prior to unloading the DLL.</para>
            </remarks>
        </member>
        <member name="F:Un4seen.BassWasapi.BassWasapi.BASSWASAPIVERSION">
            <summary>
            Current BASSWASAPI version (without minor revision).
            </summary>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.LoadMe">
            <summary>
            Loads this library into memory. The library will be search in the current application directory.
            </summary>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSWMA from the application's startup path:
            <code lang="C#">
            Bass.LoadMe();
            BassWma.LoadMe();
            ...
            // when not used anymore...
            BassWma.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.LoadMe(System.String)">
            <summary>
            Loads this library into memory. The library will be loaded from the given path.
            </summary>
            <param name="path">The path of the directory in which to search.</param>
            <returns><see langword="true"/>, if the module could be loaded successfully, else <see langword="false"/>.</returns>
            <remarks>This method can be used to make sure, that this specific library has been loaded.
            <para>Normally an external library will be loaded into memory when either of the declared methods will be called for the very first time.
            This results in the very first call to a library method being slower than all subsequent calls.</para>
            <para>Moreover some of the BASS libraries and add-ons will introduce new options to the main BASS lib, e.g. new parameters which can be used with <see cref="M:Un4seen.Bass.Bass.BASS_SetConfig(Un4seen.Bass.BASSConfig,System.Int32)"/> or <see cref="M:Un4seen.Bass.Bass.BASS_GetConfig(Un4seen.Bass.BASSConfig)"/>.
            But in order to enable BASS using these new options the respective library must have been already loaded. This method can be used to ensure this.</para>
            <para>This method can also be used as an alternative way to load a library instead of using the BASS way via <see cref="M:Un4seen.Bass.Bass.BASS_PluginLoad(System.String)"/>.
            The advantage of this is method here is, that you might locate all your bass dll's in a different directory.</para>
            </remarks>
            <example>
            Load BASS and BASSWMA from a different directory:
            <code lang="C#">
            Bass.LoadMe( @"C:\Development\BASS\_libs" );
            BassWma.LoadMe( @"C:\Development\BASS\_libs" );
            ...
            // when not used anymore...
            BassWma.FreeMe();
            Bass.FreeMe();
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapi.FreeMe">
            <summary>
            Unloads this library. This must be called when you have previously called <see cref="M:Un4seen.BassWasapi.BassWasapi.LoadMe"/>.
            </summary>
            <returns><see langword="true"/>, if the module has been unloaded successfully, else <see langword="false"/>.</returns>
            <remarks>For more information see <see cref="M:Un4seen.BassWasapi.BassWasapi.LoadMe"/>.</remarks>
        </member>
        <member name="T:Un4seen.BassWasapi.BASSWASAPIDeviceType">
            <summary>
            BassWasapi device info types to be used with <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_NETWORKDEVICE">
            <summary>
            A network device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_SPEAKERS">
            <summary>
            A speakers device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_LINELEVEL">
            <summary>
            A line level device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_HEADPHONES">
            <summary>
            A headphone device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_MICROPHONE">
            <summary>
             A microphone device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_HEADSET">
            <summary>
             A headset device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_HANDSET">
            <summary>
             A handset device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_DIGITAL">
            <summary>
             A digital device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_SPDIF">
            <summary>
             A S/PDIF device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_HDMI">
            <summary>
             A HDMI device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceType.BASS_WASAPI_TYPE_UNKNOWN">
            <summary>
             An unknown device.
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.BASSWASAPIDeviceInfo">
            <summary>
            BassWasapi device info flags to be used with <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceInfo.BASS_DEVICE_UNKNOWN">
            <summary>
            Unknown flags.
            <para>E.g. the WASAPI device is not present.</para>
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceInfo.BASS_DEVICE_ENABLED">
            <summary>
            The WASAPI device is enabled (active).
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceInfo.BASS_DEVICE_DEFAULT">
            <summary>
            The WASAPI device is the default device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceInfo.BASS_DEVICE_INIT">
            <summary>
            The WASAPI device is initialized.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceInfo.BASS_DEVICE_LOOPBACK">
            <summary>
            The WASAPI device is a loopback device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceInfo.BASS_DEVICE_INPUT">
            <summary>
            The WASAPI device is an input (capture) device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceInfo.BASS_DEVICE_UNPLUGGED">
            <summary>
            The WASAPI device is unplugged.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIDeviceInfo.BASS_DEVICE_DISABLED">
            <summary>
            The WASAPI device is disabled.
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.BASSWASAPIInit">
            <summary>
            BassWasapi initialization flags to be used with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/>.
            </summary>
            <remarks>The BASS_WASAPI_CATEGORY_xxx flags might be used to request a particular audio category.
            Audio categories (selected by applications) are mapped to audio modes (defined by drivers). In order to inform the system about the usage of an audio stream, applications have the option to tag the stream with a specific audio stream category.
            </remarks>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_SHARED">
            <summary>
            Init the device (endpoint) in shared mode.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_EXCLUSIVE">
            <summary>
            Init the device (endpoint) in exclusive mode.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_AUTOFORMAT">
            <summary>
            Automatically choose another sample format if the specified format is not supported.
            If possible, a higher sample rate than freq will be used, rather than a lower one.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_BUFFER">
            <summary>
            Enable double buffering, for use by <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetLevel"/>. 
            This requires the BASS "no sound" device to have been initilized, via <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.
            <para>Internally, a BASS stream is used for that, so the usual BASS_DATA_xxx flags are supported.</para>
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_EVENT">
            <summary>
            Enables the event-driven WASAPI system.
            <para>It is only supported when a WASAPIPROC function is provided, ie. not when using <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_PutData(System.IntPtr,System.Int32)"/>.</para>
            <para>When used with shared mode, the user-provided 'buffer' and 'period' lengths are ignored and WASAPI decides what buffer to use (<see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/> can be used to check that).</para>
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_SAMPLES">
            <summary>
            Allows 'buffer' and 'period' to be specified in samples instead of seconds in the <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> call.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_DITHER">
            <summary>
            Requests to apply dither to the output.
            <para>Dither is optional rather than automatic because it destroys bit-perfect output; you probably don't want to enable it unless you're applying DSP (including volume changes).
            When the output is floating-point (eg. in shared mode), the flag will have no effect.</para>
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_RAW">
            <summary>
            Requests raw output (sets the audio category RAW for the application).
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_MASK">
            <summary>
            Flag: to mask the category flags.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_OTHER">
            <summary>
            Flags: Requests the category uncategorized streams.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_FOREGROUNDONLYMEDIA">
            <summary>
            Flags: Requests the category foreground music.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_BACKGROUNDCAPABLEMEDIA">
            <summary>
            Flags: Requests the category background music.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_COMMUNICATIONS">
            <summary>
            Flags: Requests the category VoIP, real-time chat.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_ALERTS">
            <summary>
            Flags: Requests the category alarm, ring tone, notifications.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_SOUNDEFFECTS">
            <summary>
            Flags: Requests the category beeps, dings, etc.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_GAMEEFFECTS">
            <summary>
            Flags: Requests the category in-game balls bouncing, car engine sounds, bullets, etc.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_GAMEMEDIA">
            <summary>
            Flags: Requests the category in-game music.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_GAMECHAT">
            <summary>
            Flags: Requests the category in-game communication between users.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_SPEECH">
            <summary>
            Flags: Requests the category speech input (e.g. personal assistant) and output (e.g. navigation apps).
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_MOVIE">
            <summary>
            Flags: Requests the category movies, video with dialog.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIInit.BASS_WASAPI_CATEGORY_MEDIA">
            <summary>
            Flags: Requests the default category for media playback.
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.BASSWASAPIFormat">
            <summary>
            BassWasapi sample formats to be used with <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_INFO"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIFormat.BASS_WASAPI_FORMAT_UNKNOWN">
            <summary>
            32-bit floating-point.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIFormat.BASS_WASAPI_FORMAT_FLOAT">
            <summary>
            32-bit floating-point.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIFormat.BASS_WASAPI_FORMAT_8BIT">
            <summary>
            8-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIFormat.BASS_WASAPI_FORMAT_16BIT">
            <summary>
            16-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIFormat.BASS_WASAPI_FORMAT_24BIT">
            <summary>
            24-bit integer.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIFormat.BASS_WASAPI_FORMAT_32BIT">
            <summary>
            32-bit integer.
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.BASSWASAPIVolume">
            <summary>
            The BassWasapi Volume curve to use with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetVolume(Un4seen.BassWasapi.BASSWASAPIVolume)"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetVolume(Un4seen.BassWasapi.BASSWASAPIVolume,System.Single)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIVolume.BASS_WASAPI_CURVE_DB">
            <summary>
            Logarithmic curve.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIVolume.BASS_WASAPI_CURVE_LINEAR">
            <summary>
            Linear curve.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIVolume.BASS_WASAPI_CURVE_WINDOWS">
            <summary>
            Windows' hybrid curve.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIVolume.BASS_WASAPI_VOL_SESSION">
            <summary>
            Use the session volume.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPIVolume.BASS_WASAPI_VOL_DEVICE">
            <summary>
            Use the device volume.
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.BASSWASAPINotify">
            <summary>
            BassWasapi sample formats to be used with <see cref="T:Un4seen.BassWasapi.BASS_WASAPI_INFO"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPINotify.BASS_WASAPI_NOTIFY_ENABLED">
            <summary>
            The device's status has changed, ie. it has been enabled. The new status is also available from <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPINotify.BASS_WASAPI_NOTIFY_DISABLED">
            <summary>
            The device's status has changed, ie. it has been disabled. The new status is also available from <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPINotify.BASS_WASAPI_NOTIFY_DEFOUTPUT">
            <summary>
            The device is now the default input device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPINotify.BASS_WASAPI_NOTIFY_DEFINPUT">
            <summary>
            The device is now the default input device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASSWASAPINotify.BASS_WASAPI_NOTIFY_FAIL">
            <summary>
            The device has failed and been stopped. 
            <para>If the device is still enabled and shared mode was being used, then it may be that the device's sample format has changed. 
            It can be freed and reinitialized, with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Free"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/>, to resume in that case.</para>
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO">
            <summary>
            Used with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/> to retrieve information on a Wasapi device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.name">
            <summary>
            The description of the device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.id">
            <summary>
            The ID of the driver being used.
            </summary>
            <remarks>The "id" can be matched-up the <see cref="T:Un4seen.Bass.BASS_DEVICEINFO"/> "driver", to match-up the WASAPI and DirectSound device list entries.</remarks>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.type">
            <summary>
            The type of the devices. One of the <see cref="T:Un4seen.BassWasapi.BASSWASAPIDeviceType"/> values.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.flags">
            <summary>
            The device's current and input/output status. Any combination of <see cref="T:Un4seen.BassWasapi.BASSWASAPIDeviceInfo"/>.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.minperiod">
            <summary>
            The minimum update period (in seconds) of the device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.defperiod">
            <summary>
            The default update period (in seconds) of the device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.mixfreq">
            <summary>
            The shared-mode format mixers sample rate.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.mixchans">
            <summary>
            The shared-mode format mixers number of channels.
            </summary>
        </member>
        <member name="M:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.ToString">
            <summary>
            A description of the decive info object (name).
            </summary>
            <returns>The name of the device/driver.</returns>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.IsEnabled">
            <summary>
            The device is enabled and can be used (i.e. it is active).
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.IsDisabled">
            <summary>
            The device is plugged but disabled (in the windows sound control panel) and can not be used.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.IsUnplugged">
            <summary>
            The device is unplugged and can not be used.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.IsDefault">
            <summary>
            The device is the system default device.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.IsInitialized">
            <summary>
            The device is already initialized.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.IsLoopback">
            <summary>
            The device is a loopback device (capturing from output).
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.IsInput">
            <summary>
            The device is an input (capture) device.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO.SupportsRecording">
            <summary>
            The device supportes recording (either an INPUT or LOOPBACK device).
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.BASS_WASAPI_INFO">
            <summary>
            Used with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetInfo(Un4seen.BassWasapi.BASS_WASAPI_INFO)"/> to retrieve information on the current device.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_INFO.initflags">
            <summary>
            The flags parameter of the <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> call.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_INFO.freq">
            <summary>
            The sample rate used.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_INFO.chans">
            <summary>
            The number of channels used (1 = mono, 2 = stereo, etc.).
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_INFO.format">
            <summary>
            The device's sample format used (one of the <see cref="T:Un4seen.BassWasapi.BASSWASAPIFormat"/>).
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_INFO.buflen">
            <summary>
            The buffer size in bytes.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_INFO.volmax">
            <summary>
            The maximum volume setting in dB.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_INFO.volmin">
            <summary>
            The minimum volume setting in dB.
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BASS_WASAPI_INFO.volstep">
            <summary>
            The volume step size in dB.
            </summary>
        </member>
        <member name="M:Un4seen.BassWasapi.BASS_WASAPI_INFO.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Un4seen.BassWasapi.BASS_WASAPI_INFO.ToString">
            <summary>
            A description of the decive info object (the format, sample rate and number of channels).
            </summary>
            <returns>The description string of the device/driver.</returns>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_INFO.IsExclusive">
            <summary>
            Is the device used in exclusive mode?
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BASS_WASAPI_INFO.IsEventDriven">
            <summary>
            Is the device used in event-driven mode?
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.WASAPIPROC">
            <summary>
            User defined WASAPI output/input processing callback function (to be used with <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/>).
            </summary>
            <param name="buffer">Pointer to the buffer to put the sample data for an output device, or to get the data from an input device. The sample data is always 32-bit floating-point.</param>
            <param name="length">The number of bytes to process.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> was called.</param>
            <returns>In the case of an output device, the number of bytes written to the buffer. If the value is negative (high bit set), it will be treated as 0. In the case of an input device, 0 = stop the device, else continue.</returns>
            <remarks>
            <para>An output/input processing function should obviously be as quick as possible, to avoid buffer underruns (output) or overruns (input). Using a larger buffer makes that less crucial. <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> (BASS_DATA_AVAILABLE) can be used to check how much data is buffered.</para>
            <para>An output device's WASAPIPROC may return less data than requested, but be careful not to do so by too much, too often. If the buffer gets exhausted, output will stall until more data is provided. If you do return less than the requested amount of data, the number of bytes should still equate to a whole number of samples.</para>
            <para>When multiple channels are used, the sample data of the channels is interleaved. For example, with 2 channels (ie. stereo), the sample data would be arranged as channel 1, channel 2, channel 1, channel 2, channel 1, etc.</para>
            <para>When an output channel needs to be empty/silent but still enabled, the channel's function could fill the buffer with 0s to achieve that.</para>
            <para>Do not call <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Free"/> from within a callback function.</para>
            <para>Prior to calling this function, BASSWASAPI will set the thread's device context to the device that the channel belongs to. So when using multiple devices, <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDevice"/> can be used to determine which device the channel is on.</para>
            <para>NOTE: When you pass an instance of a callback delegate to one of the BASS functions, this delegate object will not be reference counted. 
            This means .NET would not know, that it might still being used by BASS. The Garbage Collector might (re)move the delegate instance, if the variable holding the delegate is not declared as global.
            So make sure to always keep your delegate instance in a variable which lives as long as BASS needs it, e.g. use a global variable or member.</para>
            <para>It is not supported to change the <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/> once a device was initialized via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/>.
            If you need to change some internal processing logic during processing, you might use some kind of "if" statements within this callback procedure.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.BassWasapi.WASAPINOTIFYPROC">
            <summary>
            User defined notification callback function.
            </summary>
            <param name="notify">The notification, one of the following:
            <list type="table">
            <item><term>BASS_WASAPI_NOTIFY_CHANGE</term><description>The device's status has changed, eg. it has been enabled or disabled. The new status is available from <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetDeviceInfo(System.Int32,Un4seen.BassWasapi.BASS_WASAPI_DEVICEINFO)"/>.</description></item>
            <item><term>BASS_WASAPI_NOTIFY_DEFINPUT</term><description>The device is now the default input device.</description></item>
            <item><term>BASS_WASAPI_NOTIFY_DEFOUTPUT</term><description>The device is now the default output device.</description></item>
            </list>
            </param>
            <param name="device">The device that the notification applies to.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_SetNotify(Un4seen.BassWasapi.WASAPINOTIFYPROC,System.IntPtr)"/> was called.</param>
        </member>
        <member name="T:Un4seen.BassWasapi.BassWasapiHandler">
            <summary>
            This class provides ready-made members for direct and more simple WASAPI usage together with BASS channels.
            </summary>
            <remarks>
            You might use this class for almost all use cases in terms of Wasapi handling, e.g.:
            <list type="table">
            <listheader><term>Scenario:</term><description>How-To:</description></listheader>
            <item><term>Wasapi output</term><description>A Bass decoding channel feeding Wasapi output.
            <para>Simply create an instance of this class using an output device endpoint and then call the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.AddOutputSource(System.Int32,Un4seen.Bass.BASSFlag)"/> method to add your decoding channel(s) to be used for output.
            Now you call the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Init(System.Boolean)"/> and <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Start"/> methods to actually start the Wasapi output processing.
            You might also use the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.InternalMixer"/> property (which returns the internally used <see cref="N:Un4seen.Bass.AddOn.Mix"/> mixer channel) to add or remove any decoding channel yourself.</para>
            </description></item>
            <item><term>Wasapi input</term><description>Directly record from Wasapi input.
            <para>Simply create an instance of this class using an input device endpoint you want to record at (this automatically sets the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.UseInput"/> property to <see langword="true"/>).
            To retrieve the input sample data use the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.InputChannel"/> channel (e.g. setup an <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)">own DSP</see>, use it with the <see cref="T:Un4seen.Bass.Misc.WaveWriter"/> or <see cref="T:Un4seen.Bass.Misc.BaseEncoder">Encoder Framework</see>).</para>
            </description></item>
            <item><term>Wasapi input, full-duplex to Wasapi</term><description>Monitor your Wasapi input on any Wasapi output.
            <para>Not supported directly by this class (but you can simply do this yourself, by initializing an output device with a <see langword="null"/> <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/> and calling <seealso cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_PutData(System.IntPtr,System.Int32)"/> from within your input devices <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/>).</para>
            </description></item>
            <item><term>Wasapi input, full-duplex to BASS</term><description>Monitor your Wasapi input on any BASS device.
            <para>To enable full-duplex just call the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)"/> method (when done call <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.RemoveFullDuplex"/>).
            Note: You might also specify the "no sound" BASS device (0) and use the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> with the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)"/> call in order to retrieve a full-duplex decoding Bass stream, which you can now assign to an output instance of this class via <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.AddOutputSource(System.Int32,Un4seen.Bass.BASSFlag)"/> to preform a full-duplex Wasapi input to output monitoring.</para>
            </description></item>
            <item><term>DSP/FX</term><description>You can set any DSP/FX on either the input and/or the output (full-duplex).
            <para>See <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.InputChannel"/> and <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.InternalMixer"/> for more details.</para>
            </description></item>
            In addition to the above this class supports overloading of the default Wasapi callbacks (<see cref="M:Un4seen.BassWasapi.BassWasapiHandler.WasapiOutputCallback(System.IntPtr,System.Int32,System.IntPtr)"/>, <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.WasapiInputCallback(System.IntPtr,System.Int32,System.IntPtr)"/>).
            </list>
            <para>You might use the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Volume"/> and <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Pan"/> properties to easily control your Wasapi input/output settings.</para>
            <para>Wasapi channels can be paused and resumed at any time by using the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Pause(System.Boolean)"/> method.
            To physically start the Wasapi device the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Init(System.Boolean)"/> followed by <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Start"/> methods might be used. <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Stop"/> will disable and stop the Wasapi device (if really needed).</para>
            <para>Caution: Once you created an instance of this class and called the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Init(System.Boolean)"/> method, the respective WASAPI device is enabled and a session is created.
            The used WASAPI device will be disabled and freed automatically when an instance of this class is being disposed by the .Net Garbage Collector!
            Call the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Dispose"/> method manually to free the WASAPI device, including any full-duplex options.</para>
            <para>Note: This class internally uses <see cref="N:Un4seen.Bass"/> as well as the <see cref="N:Un4seen.Bass.AddOn.Mix"/> add-on, so you need to provide the native bass.dll and the bassmix.dll as well when using this class.</para>
            </remarks>
            <example>
            Automatic use of the BassWasapiHandler (a Bass channel is feeding Wasapi output):
            <code lang="C#">
            private BassWasapiHandler _wasapi;
            ...
            // 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
            Bass.BASS_Init(0, 48000, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            ...
            int stream = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                              BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);
            if (stream != 0)
            {
            	// assign WASAPI output in shared-mode
            	_wasapi = new BassWasapiHandler(-1, false, 48000, 2, 0f, 0f);
            	// add the source channel
            	_wasapi.AddOutputSource(stream, BASSFlag.BASS_DEFAULT)
            	// init and start WASAPI
            	_wasapi.Init();
            	_wasapi.Start();
            }
            </code>
            <code lang="VB">
            Private _wasapi As BassWasapiHandler
            ...
            ' 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
            Bass.BASS_Init(0, 48000, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            ...
            Dim stream As Integer = Bass.BASS_StreamCreateFile(fileName, 0, 0, 
                                         BASSFlag.BASS_STREAM_DECODE Or BASSFlag.BASS_SAMPLE_FLOAT)
            If stream &lt;&gt; 0 Then
              ' assign WASAPI output in shared-mode
              _wasapi = new BassWasapiHandler(-1, false, 48000, 2, 0f, 0f)
              ' add the source channel
              _wasapi.AddOutputSource(stream, BASSFlag.BASS_DEFAULT)
              ' init and start WASAPI
              _wasapi.Init()
              _wasapi.Start()
            End If
            </code>
            Automatic use of the BassWasapiHandler (Wasapi recording input):
            <code lang="C#">
            private BassWasapiHandler _wasapi;
            ...
            // 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
            Bass.BASS_Init(0, 48000, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
            ...
            // assign WASAPI input in shared-mode
            _wasapi = new BassWasapiHandler(-2, false, 48000, 2, 0f, 0f);
            // init and start WASAPI
            _wasapi.Init();
            int recordStream = _wasapi.InputChannel;
            // double check, that the device is not muted externally
            if (_wasapi.DeviceMute)
                _wasapi.DeviceMute = false;
            _wasapi.Start();
            ...
            // now you can use recordStream to setup any DSP/FX etc.
            </code>
            <code lang="VB">
            Private _wasapi As BassWasapiHandler
            ...
            ' 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
            Bass.BASS_Init(0, 48000, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero)
            ...
            ' assign WASAPI input in shared-mode
            _wasapi = new BassWasapiHandler(-2, false, 48000, 2, 0f, 0f)
            ' init and start WASAPI
            _wasapi.Init()
            Dim recordStream As Integer = _wasapi.InputChannel
            ' double check, that the device is not muted externally
            If _wasapi.DeviceMute Then
               _wasapi.DeviceMute = False
            End If
            _wasapi.Start()
            End If
            ...
            ' now you can use recordStream to setup any DSP/FX etc.
            </code>
            Setup a full-duplex stream on Wasapi input and pass that to an Wasapi output instance:
            <code lang="C#">
            // setup a full-duplex stream
            _wasapiInput.SetFullDuplex(0, BASSFlag.BASS_STREAM_DECODE, false, 2000);
            int fullDuplexStream = _wasapiInput.OutputChannel;
            // and assign it to an output
            _wasapiOutput.AddOutputSource(fullDuplexStream, BASSFlag.BASS_DEFAULT);
            </code>
            <code lang="VB">
            ' setup a full-duplex stream
            _wasapiInput.SetFullDuplex(0, BASSFlag.BASS_STREAM_DECODE, False, 2000)
            Dim fullDuplexStream As Integer = _wasapiInput.OutputChannel
            ' and assign it to an output
            _wasapiOutput.AddOutputSource(fullDuplexStream, BASSFlag.BASS_DEFAULT)
            </code>
            </example>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.#ctor(System.Int32,System.Boolean,System.Int32,System.Int32,System.Single,System.Single)">
            <summary>
            Creates an instance of the WASAPI handler.
            </summary>
            <param name="device">The device to use... 0 = first device.</param>
            <param name="exclusive">Use the WASAPI device in exclusive mode?</param>
            <param name="freq">The sample rate to use (only used in exclusive mode, in shared mode the default mixer sample rate is used).</param>
            <param name="chans">The number of channels to use (only used in exclusive mode, in shared mode the default mixer number of channels are used).</param>
            <param name="buffer">The buffer size (in seconds) to use (set to 0 to use the default buffer length).</param>
            <param name="period">The update period (in seconds) to use (set to 0 to use the default update period).</param>
            <remarks>
            <para>The instance automatically detects according to the <paramref name="device"/> being used, if this handler will be dealing with as input (capture or loopback) or with output (rendering) endpoint device.
            You might use the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.IsInput"/> property to validate this.</para>
            <para>Exclusive Mode: The requested number of channels are used. The requested sample rate is used.</para>
            <para>Shared Mode: The default mixer number of channels are used. The default mixer sample rate is used (the <paramref name="freq"/> parameter is ignored).</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid device: the Wasapi device is invalid.</exception>
            <exception cref="T:System.NotSupportedException">Internal Mixer: the internal mixer cannot be created (e.g. <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> was never called).</exception>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.#ctor(System.Int32,System.Boolean,System.Boolean,System.Int32,System.Int32,System.Single,System.Single)">
            <summary>
            Creates an instance of the WASAPI handler.
            </summary>
            <param name="device">The device to use... 0 = first device.</param>
            <param name="exclusive">Use the WASAPI device in exclusive mode?</param>
            <param name="eventSystem">Use the event-driven system?</param>
            <param name="freq">The sample rate to use (only used in exclusive mode, in shared mode the default mixer sample rate is used).</param>
            <param name="chans">The number of channels to use (only used in exclusive mode, in shared mode the default mixer number of channels are used).</param>
            <param name="buffer">The buffer size (in seconds) to use (set to 0 to use the default buffer length).</param>
            <param name="period">The update period (in seconds) to use (set to 0 to use the default update period).</param>
            <remarks>
            <para>The instance automatically detects according to the <paramref name="device"/> being used, if this handler will be dealing with as input (capture or loopback) or with output (rendering) endpoint device.
            You might use the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.IsInput"/> property to validate this.</para>
            <para>Exclusive Mode: The requested number of channels are used. The requested sample rate is used.</para>
            <para>Shared Mode: The default mixer number of channels are used. The default mixer sample rate is used (the <paramref name="freq"/> parameter is ignored).</para>
            <para>Session volume limits the effect of <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.DeviceVolume"/> and <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.DeviceMute"/> to the current process; other users of the device are unaffected.
            Session volume has no effect on exclusive mode output, and maps to the device volume with input devices (so does affect other users).</para>
            <para>If the event-driven system is used, the (the <paramref name="buffer"/> and <paramref name="period"/> parameters are ignored in shared-mode).</para>
            </remarks>
            <exception cref="T:System.ArgumentException">Invalid device: the Wasapi device is invalid.</exception>
            <exception cref="T:System.NotSupportedException">Internal Mixer: the internal mixer cannot be created (e.g. <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/> was never called).</exception>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.Dispose">
            <summary>
            Disposes an instance of this class also stops and frees the used WASAPI device/driver (endpoint).
            </summary>
            <remarks>The used WASAPI device/driver (endpoint) will be stopped and freed!
            <para>Caution: Once you created an instance of this class and called <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Init(System.Boolean)"/>, the respective WASAPI device/driver (endpoint) is initialized.
            Calling this method will automatically stopp and free the used WASAPI device/driver (endpoint) as well as the full-duplex option will be removed!</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.Finalize">
            <summary>
            Finalization code.
            </summary>
            <remarks>This destructor will run only if the Dispose method does not get called.
            It gives your base class the opportunity to finalize. Do not provide destructors in types derived from this class.</remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.InternalWasapiProc">
            <summary>
            Gets the <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/> currently being used by the Wasapi handler.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.IsInput">
            <summary>
            Returns <see langword="true"/>, if the WASAPI handler is used with a WASAPI input device (capture or loopback endpoint).
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.Exclusive">
            <summary>
            Returns <see langword="true"/>, if the WASAPI handler is used in exclusive mode - else shared mode is used.
            </summary>
            <remarks>
            <para>Exclusive mode: The device can only be used exclusivly by the application - which allows greater precision and lets you choose the output sample rate.</para>
            <para>Shared mode: The device can be shared by multiple applications. Enforces to use the default sample rate, number of channels and format.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.EventSystem">
            <summary>
            Returns <see langword="true"/>, if the WASAPI event-driven system is used - else the standard push system is used.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.Device">
            <summary>
            Returns the WASAPI device (endpoint) being used by the Wasapi handler.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.SampleRate">
            <summary>
            Gets the actual sample rate in Hz which is being used.
            </summary>
            <remarks>
            Depending if you use the Wasapi device in exclusive or shared mode the actual sample rate might be different from the sample rate requested.
            <para>In exclusive mode: The sample rate as specified in the constructor will be used.</para>
            <para>In shared mode: The default sample rate as specified in the mixer control panel will always be used.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.NumChans">
            <summary>
            Gets the actual number of channels being used with the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/>.
            </summary>
            <remarks>
            Depending if you use the Wasapi device in exclusive or shared mode the actual number of channels might be different from the number of channels requested.
            <para>In exclusive mode: The maximum available number of channels will always be used.</para>
            <para>In shared mode: The default number of channels as specified in the mixer control panel will always be used.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.BufferLength">
            <summary>
            Gets the actual buffer length (in seconds) being used with the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/>.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.UpdatePeriod">
            <summary>
            Gets the actual update period (in seconds) being used with the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/>.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.InternalMixer">
            <summary>
            Gets the internal mixer being used with this WASAPI handler (when used with an output device).
            </summary>
            <remarks>
            As WASAPI might require resampling or the used number of channels might not always match the requested number of channels
            an internal mixer stream is always created to perform these tasks.
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel">
            <summary>
            Gets the BASS output channel handle which is used with this WASAPI input handler in case of full-duplex monitoring.
            </summary>
            <remarks>
            You must call the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)"/> method in order to use this output channel.
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.Volume">
            <summary>
            Gets or Sets the volume of the channels between 0 (silent) and 1 (full).
            </summary>
            <remarks>
            <para>The volume level ranges from 0 (silent) to 1 (normal) or above 1 to amplify the sound.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.Pan">
            <summary>
            Gets or Sets the panning of the channels between -1 (left) to +1 (right), 0=centered.
            </summary>
            <remarks>Setting the panning uses the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Volume"/> property in order to calculate the individual channel volume.
            E.g. if you set the panning to -0.7 at a volume of 1.0: chan1-volume (left) = 0.3, chan2-volume (right) = 1.0.
            <para>The panning value ranges from -1 (left) to 0 (center) to +1 (right).</para>
            <para>In case of multi-channel (not stereo, <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.NumChans"/> is greater than 2) the left/right positions are interleaved between the additional channels.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.SessionVolume">
            <summary>
            Gets or Sets the session volume between 0 (silent) and 1 (full).
            </summary>
            <remarks>Whereas the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Volume"/> and the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Pan"/> properties directly effect the internally used channel volume,
            this property effects the session volume setting.
            Session volume only affects the current process, so other users of the device are unaffected.
            It has no effect on exclusive mode output, and maps to the device volume with input devices (so does affect other users). Session volume always uses the BASS_WASAPI_CURVE_WINDOWS curve.
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.SessionMute">
            <summary>
            Gets or Sets the mute status of the session.
            </summary>
            <remarks>
            Session volume only affects the current process, so other users of the device are unaffected.
            It has no effect on exclusive mode output, and maps to the device volume with input devices (so does affect other users). Session volume always uses the BASS_WASAPI_CURVE_WINDOWS curve.
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.DeviceVolume">
            <summary>
            Gets or Sets the linear volume of the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/> between 0 (silent) and 1 (full).
            </summary>
            <remarks>Whereas the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Volume"/> and the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Pan"/> properties directly effect the internally used channel volume,
            this property effects the global WASAPI device volume setting (which might be shared among other applications).
            <para>The volume level ranges from 0 (silent) to 1 (normal) or above 1 to amplify the sound.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.DeviceMute">
            <summary>
            Gets or Sets the mute status of the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/>.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.InputChannel">
            <summary>
            Returns an input channel which allows you to retrieve the recorded sample data and/or apply any DSP/FX on Wasapi input.
            </summary>
            <remarks>When you are using WASAPI with input (<see cref="P:Un4seen.BassWasapi.BassWasapiHandler.IsInput"/> must return <see langword="true"/>) and have set the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.UseInput"/> property to <see langword="true"/> 
            you might use this channel to setup any DSP/FX to be applied to the Wasapi input or just retrieve the recorded sample data. 
            Any DSP/FX set on this channel will also be passed through to the output, if you are using <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)"/>.
            <para>As the InputChannel is a dummy custom decoding stream you can not call <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> directly on it in order to directly get the sample data; 
            nor can you use it directly as a source stream for any (mixer)output!
            Instead use a <see cref="T:Un4seen.Bass.DSPPROC"/> via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetDSP(System.Int32,Un4seen.Bass.DSPPROC,System.IntPtr,System.Int32)"/> to retrieve the sample data.</para>
            <para>Note: However, you might independently set any DSP/FX on the full-duplex output using the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/> instead.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.UseInput">
            <summary>
            Enables the use of the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.InputChannel"/> channel with WASAPI input (which is the default for Wasapi input).
            </summary>
            <remarks>When you are using WASAPI with input (<see cref="P:Un4seen.BassWasapi.BassWasapiHandler.IsInput"/> must return <see langword="true"/>) and set this property to <see langword="true"/> 
            you might use the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.InputChannel"/> to setup any DSP/FX to be applied to the Wasapi input or retrieve the recorded sample data. 
            Any DSP/FX set on this channel will also be passed through to the output, if you are using <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)"/>.
            <para>Note: However, you might independently set any DSP/FX on the full-duplex output using the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/> instead.</para>
            </remarks>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.IsInputFullDuplex">
            <summary>
            Returns <see langword="true"/>, if the WASAPI handler is used with an WASAPI input device and the full-duplex option was set via <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)"/>.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandler.BypassFullDuplex">
            <summary>
            Gets or Sets the bypass flag for full-duplex WASAPI output processing (default is <see langword="false"/>).
            </summary>
            <remarks>If this property is set to <see langword="true"/> any full-duplex output processing is bypassed.
            When setting this property to <see langword="true"/> prior to creating a full-duplex <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/> via the <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)"/> method this enables you to start full-duplex without processing the output yet.
            Setting this property to <see langword="false"/> will start the full-duplex output processing.
            <para>This flag will automatically set back to <see langword="false"/> when calling <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.RemoveFullDuplex"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.Init(System.Boolean)">
            <summary>
            Initialises the WASAPI <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/> (must be called before <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Start"/>).
            </summary>
            <param name="buffered">Enable double buffering, for use by <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetData(System.IntPtr,System.Int32)"/> and <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_GetLevel"/>. 
            This requires the BASS "no sound" device to have been initilized, via <see cref="M:Un4seen.Bass.Bass.BASS_Init(System.Int32,System.Int32,Un4seen.Bass.BASSInit,System.IntPtr,System.IntPtr)"/>.</param>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.Start">
            <summary>
            Starts the WASAPI <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/>.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Calls <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Start"/> internally on the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/> being used by the Wasapi handler (if not already started).
            <para>If you need to stop the WASAPI device you might call <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Stop"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.Stop">
            <summary>
            Stops the WASAPI <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/>.
            </summary>
            <returns>If successful, then <see langword="true"/> is returned, else <see langword="false"/> is returned. Use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to get the error code.</returns>
            <remarks>Calls <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Stop(System.Boolean)"/> internally on the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/> being used by the Wasapi handler (if not already stopped).
            <para>If you need to start the WASAPI device you might call <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.Start"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.Pause(System.Boolean)">
            <summary>
            Pauses or Unpauses the WASAPI <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.Device"/> being used.
            </summary>
            <param name="pause"><see langword="true"/> if you want to pause the WASAPI device - <see langword="false"/> if you want to unpause.</param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to retrieve the error code).</returns>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.AddOutputSource(System.Int32,Un4seen.Bass.BASSFlag)">
            <summary>
            Adds a new source to the WASAPI handler for output.
            </summary>
            <param name="channel">The decoding stream to add to the output (must be a decoding channel).</param>
            <param name="flags">The speaker flags to use with the channel (use BASS_DEFAULT or any of the BASS_SPEAKER_xxx flags).</param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>
            In case the Wasapi handler is used for output an <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.InternalMixer"/> is always internally created in order to handle possible resampling.
            You might use this method to add new source channels to this internal mixer in order to play them to the output.
            <para>Note, that the following flags will be added automatically as necessary: BASS_MIXER_CHAN_DOWNMIX (in case you don't provide any speaker flags), BASS_MIXER_FILTER (in case the <paramref name="channel"/>'s sample rate doesn't match the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.SampleRate"/>).</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)">
            <summary>
            Sets the full-duplex option for WASAPI input using the given BASS output device.
            </summary>
            <param name="bassDevice">The BASS output device which should be used for full-duplex monitoring.</param>
            <param name="flags">The optional <see cref="T:Un4seen.Bass.BASSFlag"/> flags to be used to create the full-duplex monitoring <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/>.
            Typically only the following flags should be used: BASS_STREAM_DECODE, BASS_SAMPLE_SOFTWARE or BASS_SPEAKER_xxx.</param>
            <param name="buffered"><see langword="true"/>, if the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/> should be (pre)buffered - else <see langword="false"/>.
            <para>Prebuffering of sample data is often requied for buffered output to enable a constant playback. So even if you are using a BASS_STREAM_DECODE flag you might need to prebuffer it's data.</para>
            </param>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>
            <para>The following will be done internally:</para>
            <para>1. The BASS output <paramref name="bassDevice"/> will be used.</para>
            <para>2. A custom push stream (see <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/>) will be created (using the given <paramref name="flags"/>) with an internal WASAPI callback feeding the stream with the sample data from the input.</para>
            <para>3. The samplerate, format and number of channels will not be changed for WASAPI input, since this will be used as already specified in the constructor.</para>
            <para>4. The custom push stream will be started playing (via <see cref="M:Un4seen.Bass.Bass.BASS_ChannelPlay(System.Int32,System.Boolean)"/>) - unless the <see cref="F:Un4seen.Bass.BASSFlag.BASS_STREAM_DECODE"/> flag has been specified.</para>
            <para>This method can not be used with WASAPI output (see <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.IsInput"/>). It will immediately return with no effect.</para>
            <para>To disable and remove the full-duplex option call <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.RemoveFullDuplex"/>.</para>
            <para>The full-duplex BASS output is provided by the internal custom push stream <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/>. You might use this stream to set up DSPs or FX on it so that these are applied on the BASS output.</para>
            <para>You might use the 0 (no-sound) bass device together with the BASS_STREAM_DECODE flag in order to create a custom decoding <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/> which might for example be used with an <see cref="T:Un4seen.Bass.Misc.BaseEncoder"/> or <see cref="T:Un4seen.Bass.Misc.WaveWriter"/> or 
            as a source for a <see cref="M:Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamCreate(System.Int32,System.Int32,Un4seen.Bass.BASSFlag)">mixer channel</see>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.RemoveFullDuplex">
            <summary>
            Removes the full-duplex option from WASAPI input.
            </summary>
            <returns>On success <see langword="true"/> is returned, else <see langword="false"/> will be returned (use <see cref="M:Un4seen.Bass.Bass.BASS_ErrorGetCode"/> to retrieve the error code).</returns>
            <remarks>The full-duplex option must have been set before via <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)"/>.
            <para>This method can not be used with WASAPI output (see <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.IsInput"/>). It will immediately return with no effect.</para>
            <para>To enable the full-duplex option again, call <see cref="M:Un4seen.BassWasapi.BassWasapiHandler.SetFullDuplex(System.Int32,Un4seen.Bass.BASSFlag,System.Boolean)"/>.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.WasapiOutputCallback(System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            Provides a ready made <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/> callback procedure which might be used for WASAPI output.
            </summary>
            <param name="buffer">The pointer to the buffer in which to put the data to output. Will always be floating point!</param>
            <param name="length">The number of bytes to process.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> was called.</param>
            <returns>The number of bytes written.</returns>
            <remarks>Notes:
            <para>In order to use this default output WASAPI callback (playback), you need to make sure that you use this callback only with WASAPI output (<see cref="P:Un4seen.BassWasapi.BassWasapiHandler.IsInput"/> must be <see langword="false"/>).</para>
            <para>Furthermore the following should be considered: If the underlying stream channel <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/> is at the end (all data was decoded), 
            this callback does NOT automatically stop WASAPI via <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Stop(System.Boolean)"/>.
            So you need to do that by yourself (if you whish to save some performance), e.g. setup a <see cref="M:Un4seen.Bass.Bass.BASS_ChannelSetSync(System.Int32,Un4seen.Bass.BASSSync,System.Int64,Un4seen.Bass.SYNCPROC,System.IntPtr)">BASS_SYNC_END</see> on the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/>.
            If the underlying <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/> returns less data, than requested the WASAPI output buffer will be filled with 0's (silence).</para>
            <para>Internally <see cref="M:Un4seen.Bass.Bass.BASS_ChannelGetData(System.Int32,System.IntPtr,System.Int32)"/> will be called on the underlying <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.OutputChannel"/> to request sample data, before the sample data is send to the WASAPI output.</para>
            <para>If you intend to overload this callback in a derive implementation make sure to call the base method to not loose any functionatily.</para>
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandler.WasapiInputCallback(System.IntPtr,System.Int32,System.IntPtr)">
            <summary>
            Provides a ready made <see cref="T:Un4seen.BassWasapi.WASAPIPROC"/> callback procedure which might be used for WASAPI input.
            </summary>
            <param name="buffer">The pointer to the buffer containing the sample data. Will always be floating point!</param>
            <param name="length">The number of bytes to process.</param>
            <param name="user">The user instance data given when <see cref="M:Un4seen.BassWasapi.BassWasapi.BASS_WASAPI_Init(System.Int32,System.Int32,System.Int32,Un4seen.BassWasapi.BASSWASAPIInit,System.Single,System.Single,Un4seen.BassWasapi.WASAPIPROC,System.IntPtr)"/> was called.</param>
            <returns>Will always return 0 here (as it is ignored with input channels).</returns>
            <remarks>
            To receive the recorded sample data you might use the <see cref="P:Un4seen.BassWasapi.BassWasapiHandler.InputChannel"/> and set up a DSP on it.
            <para>If you intend to overload this callback in a derive implementation make sure to call the base method to not loose any functionatily.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.BassWasapi.BassWasapiHandler.BassWasapiHandlerEventHandler">
            <summary>
            Definition of the <see cref="E:Un4seen.BassWasapi.BassWasapiHandler.Notification"/> event handler.
            </summary>
            <remarks>
            This definition complies with the .NET Framework's standard for event handlers.
            The sender is always set to the <see cref="T:Un4seen.BassWasapi.BassWasapiHandler"/> object instance that raised the event.
            </remarks>
        </member>
        <member name="E:Un4seen.BassWasapi.BassWasapiHandler.Notification">
            <summary>
            Event handler used to notify that an Wasapi handler notification event (sync) has occurred.
            </summary>
            <remarks>
            <para>The <see cref="T:Un4seen.BassWasapi.BassWasapiHandlerEventArgs"/> contains a <see cref="T:Un4seen.BassWasapi.BassWasapiHandlerSyncType"/> which allows you to react to a possible sync scenarios.</para>
            </remarks>
        </member>
        <member name="T:Un4seen.BassWasapi.BassWasapiHandlerEventArgs">
            <summary>
            EventArgs class to be passed as the second parameter of a <see cref="E:Un4seen.BassWasapi.BassWasapiHandler.Notification" /> event handler.
            </summary>
            <remarks>
            This class provides all the information relevant to an event which might occur to a <see cref="T:Un4seen.BassWasapi.BassWasapiHandler"/> class.
            </remarks>
        </member>
        <member name="M:Un4seen.BassWasapi.BassWasapiHandlerEventArgs.#ctor(Un4seen.BassWasapi.BassWasapiHandlerSyncType,System.Int32)">
            <summary>
            Initializes a new instance of the BassWasapiHandlerEventArgs class by initializing all of its properties.
            </summary>
            <param name="syncType">The type of event which occurred (see <see cref="T:Un4seen.BassWasapi.BassWasapiHandlerSyncType"/>).</param>
            <param name="data">Some data which should be passed along with the notification event.</param>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandlerEventArgs.SyncType">
            <summary>
            Gets the type of sync which occurred.
            </summary>
        </member>
        <member name="P:Un4seen.BassWasapi.BassWasapiHandlerEventArgs.Data">
            <summary>
            Gets the data which was passed along with the event.
            </summary>
        </member>
        <member name="T:Un4seen.BassWasapi.BassWasapiHandlerSyncType">
            <summary>
            Types of event that has occurred with the <see cref="T:Un4seen.BassWasapi.BassWasapiHandler"/> class.
            </summary>
            <remarks>
            A variable of this type is passed inside the <see cref="T:Un4seen.BassWasapi.BassWasapiHandlerEventArgs"/> object 
            for the <see cref="E:Un4seen.BassWasapi.BassWasapiHandler.Notification" /> event.
            </remarks>
        </member>
        <member name="F:Un4seen.BassWasapi.BassWasapiHandlerSyncType.SourceStalled">
            <summary>
            The Wasapi source is stalled.
            <para>data: the source stream channel which was stalled.</para>
            </summary>
        </member>
        <member name="F:Un4seen.BassWasapi.BassWasapiHandlerSyncType.SourceResumed">
            <summary>
            The Wasapi source is resumed.
            <para>data: the source stream channel which was resumed.</para>
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.Midi">
            <summary>
            This class represents the general Win32 MIDI Functions and Constants.
            <para>Requires: winmm.dll - Microsoft Multimedia Win32 library.</para>
            </summary>
            <remarks>The Musical Instrument Digital Interface (MIDI) is a protocol and set of commands for storing and transmitting information about music or devices. MIDI output devices for example might interpret this information and use it to synthesize music.
            <para>Querying MIDI Devices:</para>
            <para>Before playing or recording MIDI data, you must determine the capabilities of the MIDI hardware present in the system. MIDI capability can vary from one multimedia computer to the next. Applications should not make assumptions about the hardware present in a given system.</para>
            <para>The following functions are provided to determine how many MIDI devices are available for input or output in a given system: <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InGetNumDevs"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InGetDevCaps(System.Int32,radio42.Multimedia.Midi.MIDI_INCAPS)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutGetNumDevs"/> and <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutGetDevCaps(System.Int32,radio42.Multimedia.Midi.MIDI_OUTCAPS)"/>.</para>
            <para>Like other audio devices, MIDI devices are identified by a device identifier, which is determined implicitly from the number of devices present in a given system. Device identifiers range from zero to the number of devices present, minus one. For example, if there are two MIDI output devices in a system, valid device identifiers are 0 and 1.
            After you determine how many MIDI input or output devices are present in a system, you can inquire about the capabilities of each device. Windows provides the following functions to determine the capabilities of audio devices.</para>
            <para> </para>
            <para>Opening and Closing Device Drivers:</para>
            <para>You must open a MIDI device before using it, and you should close the device as soon as you finish using it. The following functions are provided to open and close different types of MIDI devices: <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIINPROC,System.IntPtr,radio42.Multimedia.Midi.MIDIFlags)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InClose(System.IntPtr)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIOUTPROC,System.IntPtr)"/> and <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutClose(System.IntPtr)"/>.</para>
            <para>Each function that opens a MIDI device takes as parameters a device identifier, an address of a memory location, and some parameters unique to MIDI devices. The memory location is filled with a device handle, which is used to identify the open audio device in calls to other audio functions.</para>
            <para>Many MIDI functions can accept either a device handle or a device identifier. Although you can use a device handle wherever you would use a device identifier, you cannot always use a device identifier when a handle is called for.</para>
            <para>Note: MIDI devices are not necessarily shareable, so a particular device may not be available when a user requests it. If this happens, the application should notify the user and allow the user to try to open the device again.</para>
            <para> </para>
            <para>Allocating and Preparing MIDI Data Blocks:</para>
            <para>The <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> and <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> functions require that applications to allocate data blocks to pass to the device drivers for playback or recording purposes. Each of these functions uses a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure to describe its data block.</para>
            <para>Before you use one of these functions to pass a data block to a device driver, you must allocate memory for the buffer and the header structure that describes the data block.</para>
            <para>The following functions are provided for preparing and cleaning up MIDI data blocks: <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InUnprepareHeader(System.IntPtr,System.IntPtr)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutPrepareHeader(System.IntPtr,System.IntPtr)"/> and <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutUnprepareHeader(System.IntPtr,System.IntPtr)"/>.</para>
            <para>Before you pass a MIDI data block to a device driver, you must prepare the buffer by passing it to the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutPrepareHeader(System.IntPtr,System.IntPtr)"/> function. When the device driver is finished with the buffer and returns it, you must clean up this preparation by passing the buffer to the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InUnprepareHeader(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutUnprepareHeader(System.IntPtr,System.IntPtr)"/> function before any allocated memory can be freed.</para>
            <para> </para>
            <para>Managing MIDI Data Blocks:</para>
            <para>Applications that use data blocks for passing system-exclusive messages (using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> and <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> functions) and stream buffers must continually supply the device driver with data blocks until playback or recording is complete.</para>
            <para>Even if a single data block is used, an application must be able to determine when a device driver is finished with the data block so it can free the memory associated with the data block and header structure. Three methods can be used to determine when a device driver is finished with a data block:
            <list type="bullet">
            <item><description>Specify a callback function to receive a message sent by the driver when it is finished with a data block. To get time-stamped MIDI input data, you must use a callback function.</description></item>
            <item><description>Use an event callback (for output only).</description></item>
            <item><description>Use a window or thread callback to receive a message sent by the driver when it is finished with a data block. Note: This is not recommended in a .Net environment!</description></item>
            </list>
            If an application does not get a data block to the device driver when it is needed, an audible gap in playback or a loss of incoming recorded information can occur. At a minimum, an application should use a double-buffering scheme to stay at least one data block ahead of the device driver.
            </para>
            <para>You can write your own callback function to process messages sent by the device driver. To use a callback function, specify the <see cref="F:radio42.Multimedia.Midi.MIDIFlags.MIDI_CALLBACK_FUNCTION"/> flag in the flags parameter and the address of the callback function in the proc parameter of the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIINPROC,System.IntPtr,radio42.Multimedia.Midi.MIDIFlags)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIOUTPROC,System.IntPtr)"/> function.</para>
            <para>Sending System-Exclusive Messages:</para>
            <para>MIDI system-exclusive messages are the only MIDI messages that will not fit into a single Int32 value. System-exclusive messages can be any length. The <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> function is provided for sending system-exclusive messages to MIDI output devices. 
            To specify MIDI system-exclusive data blocks, use the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure.</para>
            <para>After you send a system-exclusive data block using <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>, you must wait until the device driver is finished with the data block before freeing it. If you are sending multiple data blocks, you must monitor the completion of each data block so you know when to send additional blocks.</para>
            <para>Note: Any MIDI status byte other than a system-real-time message will terminate a system-exclusive message. If you are using multiple data blocks to send a single system-exclusive message, do not send any MIDI messages other than system-real-time messages between data blocks.</para>
            <para> </para>
            <para>Managing MIDI Recording:</para>
            <para>After you open a MIDI device, you can begin recording MIDI data. The following functions are provided for managing MIDI recording: <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InReset(System.IntPtr)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/> and <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStop(System.IntPtr)"/>.</para>
            <para>To send buffers to the device driver for recording system-exclusive messages, use <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/>. The application is notified as the buffers are filled with system-exclusive recorded data.</para>
            <para>The <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/> function begins the recording process. When recording system-exclusive messages, send at least one buffer to the driver before starting recording. To stop recording, use <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStop(System.IntPtr)"/>. Before closing the device by using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InClose(System.IntPtr)"/> function, mark any pending data blocks as being done by calling <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InReset(System.IntPtr)"/>.</para>
            <para>Applications that require time-stamped data use a callback function to receive MIDI data.</para>
            <para>To record system-exclusive messages with applications that do not use stream buffers, you must supply the device driver with buffers. These buffers are specified by using a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure.</para>
            <para> </para>
            <para>Managing MIDI Thru:</para>
            <para>You can connect a MIDI input device directly to a MIDI output device so that when the input device receives an MIM_DATA message, the system sends a message with the same MIDI event data to the output device driver. 
            To connect a MIDI output device to a MIDI input device, use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_Connect(System.IntPtr,System.IntPtr)"/> function.</para>
            <para>To achieve the best possible performance with multiple outputs, an application can choose to supply a special form of MIDI output driver, called a thru driver. Although the system allows only one MIDI output device to be connected to a MIDI input device, multiple MIDI output devices can be connected to a thru driver. 
            An application on such a system could connect the MIDI input device to this thru device and connect the MIDI thru device to as many MIDI output devices as needed. For more information about thru drivers, see the Windows device-driver documentation.</para>
            <para> </para>
            <para>Receiving Running-Status Messages:</para>
            <para>The Standard MIDI Files 1.0 specification allows the use of running status when a message has the same status byte as the previous message. When running status is used, the status byte of subsequent messages can be omitted. All MIDI input device drivers are required to expand messages using running status into complete messages, so that you always receive complete MIDI messages from a MIDI input device driver.</para>
            <para> </para>
            <para>Handling Errors with MIDI Functions:</para>
            <para>MIDI audio functions return a nonzero error code. For MIDI-associated errors, the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_GetErrorText(System.Boolean,System.Int32)"/> functions retrieve textual descriptions for the error codes. The application must still look at the error value itself to determine how to proceed, but it can use the error descriptions in dialog boxes to inform users of the error conditions.</para>
            <para>The only MIDI functions that do not return error codes are the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InGetNumDevs"/> and <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutGetNumDevs"/> functions. These functions return a value of zero if no devices are present in a system or if any errors are encountered by the function.</para>
            <para> </para>
            <para>This class does not implement MIDI Streams (see the <see cref="N:Un4seen.Bass.AddOn.Midi"/> add-on for real-time playback of MIDI streams)!</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_GetErrorText(System.Boolean,System.Int32)">
            <summary>
            Returns the error message for a given error code.
            </summary>
            <param name="input">Dealing with an input device? <see langword="true"/>=input, <see langword="false"/>=output.</param>
            <param name="errCode">The error code to get the message from.</param>
            <returns>The error message associated with the error code.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InGetDevCaps(System.Int32,radio42.Multimedia.Midi.MIDI_INCAPS)">
            <summary>
            Determines the capabilities of a specified MIDI input device.
            </summary>
            <param name="deviceID">Identifier of the MIDI input device. The device identifier varies from zero to one less than the number of devices present.</param>
            <param name="caps">An instance of the <see cref="T:radio42.Multimedia.Midi.MIDI_INCAPS"/> class that is filled with information about the capabilities of the device.</param>
            <returns>Returns 0 if successful or an error otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>To determine the number of MIDI input devices present on the system, use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InGetNumDevs"/> function.</remarks>
            <example>
            List all Midi input devices:
            <code lang="C#">
            int count = Midi.MIDI_InGetNumDevs();
            MIDI_INCAPS inCaps = new MIDI_INCAPS();
            for (int i=0; i&lt;count; i++)
            {
              Midi.MIDI_InGetDevCaps(i, inCaps);
              Console.WriteLine( inCaps.name );
            }
            </code>
            <code lang="VB">
            Dim count As Integer = Midi.MIDI_InGetNumDevs()
            Dim inCaps As New MIDI_INCAPS()
            Dim i As Integer
            For i = 0 To count-1
              Midi.MIDI_InGetDevCaps(i, inCaps)
              Console.WriteLine(inCaps.name)
            Next i
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InGetNumDevs">
            <summary>
            Retrieves the number of MIDI input devices in the system.
            </summary>
            <returns>Returns the number of MIDI input devices present in the system. A return value of zero means that there are no devices (not that there is no error).</returns>
            <example>
            List all Misi input devices:
            <code lang="C#">
            int count = Midi.MIDI_InGetNumDevs();
            MIDI_INCAPS inCaps = new MIDI_INCAPS();
            for (int i=0; i&lt;count; i++)
            {
            	Midi.MIDI_InGetDevCaps(i, inCaps);
            	Console.WriteLine( inCaps.name );
            }
            </code>
            <code lang="VB">
            Dim count As Integer = Midi.MIDI_InGetNumDevs()
            Dim inCaps As New MIDI_INCAPS()
            Dim i As Integer
            For i = 0 To count-1
            Midi.MIDI_InGetDevCaps(i, inCaps)
              Console.WriteLine(inCaps.name)
            Next i
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutGetDevCaps(System.Int32,radio42.Multimedia.Midi.MIDI_OUTCAPS)">
            <summary>
            Queries a specified MIDI output device to determine its capabilities.
            </summary>
            <param name="deviceID">Identifier of the MIDI output device. The device identifier varies from zero to one less than the number of devices present.</param>
            <param name="caps">An instance of the <see cref="T:radio42.Multimedia.Midi.MIDI_OUTCAPS"/> class that is filled with information about the capabilities of the device.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>To determine the number of MIDI output devices present on the system, use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutGetNumDevs"/> function.</remarks>
            <example>
            List all Midi output port devices:
            <code lang="C#">
            int count = Midi.MIDI_OutGetNumDevs();
            MIDI_OUTCAPS outCaps = new MIDI_OUTCAPS();
            for (int i=0; i&lt;count; i++)
            {
              Midi.MIDI_OutGetDevCaps(i, outCaps);
              if (outCaps.IsMidiPort)
                Console.WriteLine( outCaps.name );
            }
            </code>
            <code lang="VB">
            Dim count As Integer = Midi.MIDI_OutGetNumDevs()
            Dim outCaps As New MIDI_OUTCAPS()
            Dim i As Integer
            For i = 0 To count-1
              Midi.MIDI_OutGetDevCaps(i, outCaps)
              If outCaps.IsMidiPort Then
                Console.WriteLine(outCaps.name)
              End If
            Next i
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutGetNumDevs">
            <summary>
            Retrieves the number of MIDI output devices present in the system.
            </summary>
            <returns>Returns the number of MIDI output devices. A return value of zero means that there are no devices (not that there is no error).</returns>
            <example>
            List all Midi output devices:
            <code lang="C#">
            int count = Midi.MIDI_OutGetNumDevs();
            MIDI_OUTCAPS outCaps = new MIDI_OUTCAPS();
            for (int i=0; i&lt;count; i++)
            {
              Midi.MIDI_OutGetDevCaps(i, outCaps);
              Console.WriteLine( outCaps.name );
            }
            </code>
            <code lang="VB">
            Dim count As Integer = Midi.MIDI_OutGetNumDevs()
            Dim outCaps As New MIDI_OUTCAPS()
            Dim i As Integer
            For i = 0 To count-1
              Midi.MIDI_OutGetDevCaps(i, outCaps)
              Console.WriteLine(outCaps.name)
            Next i
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIINPROC,System.IntPtr,radio42.Multimedia.Midi.MIDIFlags)">
            <summary>
            Opens a MIDI input device.
            </summary>
            <param name="handle">Returns the MIDI input handle. The handle is used to identify the device in calls to other MIDI input functions.</param>
            <param name="deviceID">Identifier of the MIDI input device to be opened (see <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InGetDevCaps(System.Int32,radio42.Multimedia.Midi.MIDI_INCAPS)"/> for details).</param>
            <param name="proc">The <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> callback delegate to use (which will receive all messages). For more information on the callback function, see <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/>.</param>
            <param name="user">User instance data passed to the callback function.</param>
            <param name="flags">A combination of the following (see <see cref="T:radio42.Multimedia.Midi.MIDIFlags"/>):
            <list type="table">
            <item><term>MIDI_IO_STATUS</term><description>When this parameter is also specified with MIDI_CALLBACK_FUNCTION, then MIM_MOREDATA messages are sent to the callback function as well as MIM_DATA messages.</description></item>
            <item><term>MIDI_CALLBACK_FUNCTION</term><description>The proc parameter is a callback procedure address.</description></item>
            <item><term>MIDI_CALLBACK_NULL</term><description>There is no callback mechanism (proc must be <see langword="null"/>).</description></item>
            </list>
            </param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>You only need to set the MIDI_IO_STATUS flag if needed, since the other flags are automatically set according to the given <paramref name="proc"/>.</para>
            <para>To determine the number of MIDI input devices present in the system, use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InGetNumDevs"/> function. The device identifier specified by <paramref name="deviceID"/> varies from zero to one less than the number of devices present.</para>
            <para>If a function is chosen to receive callback information, the following messages are sent to the function to indicate the progress of MIDI input (see <see cref="T:radio42.Multimedia.Midi.MIDIMessage"/>): MIM_OPEN, MIM_CLOSE, MIM_DATA, MIM_LONGDATA, MIM_ERROR, MIM_LONGERROR, and MIM_MOREDATA.</para>
            <para>If you use the MIDI_IO_STATUS flag with this method, the system uses the MIM_MOREDATA message to alert your application's callback function when it is not processing MIDI data fast enough to keep up with the input device driver.
            If your application processes MIDI data in a separate thread, boosting the thread's priority can have a significant impact on the application's ability to keep up with the data flow.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MIDIINPROC _midiProc;
            private IntPtr _midiInHandle;
            ...
            // Open the Midi device #1
            _midiProc = new MIDIINPROC(MyMidiProc);
            MIDIError ret = Midi.MIDI_InOpen(ref _midiInHandle, 1, _midiProc, IntPtr.Zero, MIDIFlags.MIDI_IO_STATUS);
            if (ret == MIDIError.MIDI_OK)
            {
              // Start the device
              ret = Midi.MIDI_InStart(_midiInHandle);
            }
            ...
            // when not needed anymore...stop the device
            Midi.MIDI_InReset(_midiInHandle);
            // and close the device
            Midi.MIDI_InClose(_midiInHandle);
            ...
            public void MyMidiProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              // handle all Midi messages here
              if (msg == MIDIMessage.MIM_OPEN)
              {
                // nothing to do
              }
              else if (msg == MIDIMessage.MIM_CLOSE)
              {
                // handle is from now on invalid
              }
              else if (msg == MIDIMessage.MIM_DATA)
              {
                // process the message...
                int p1 = param1.ToInt32();
                int p2 = param2.ToInt32();
                ...
              }
              else if (msg == MIDIMessage.MIM_MOREDATA)
              {
                // we are not fast enough in this callback to keep up...
                // the input device is sending messages to fast
                ...
              }
              else if (msg == MIDIMessage.MIM_LONGDATA)
              {
                // process the message...
                ...
              }
              else if (msg == MIDIMessage.MIM_ERROR)
              {
                // process the invalid message...
                ...
              }
              else if (msg == MIDIMessage.MIM_LONGERROR)
              {
                // process the invalid message...
                ...
              }
            }
            </code>
            <code lang="VB">
            Private _midiProc As MIDIINPROC
            Private _midiInHandle As IntPtr
            ...
            ' Open the Midi device #1
            _midiProc = New MIDIINPROC(AddressOf MyMidiProc)
            Dim ret As MIDIError = Midi.MIDI_InOpen(_midiInHandle, 1, _midiProc, IntPtr.Zero, MIDIFlags.MIDI_IO_STATUS)
            If ret = MIDIError.MIDI_OK Then
              ' Start the device
              ret = Midi.MIDI_InStart(_midiInHandle)
            End If
            ...
            ' when not needed anymore...stop the device
            Midi.MIDI_InReset(_midiInHandle)
            ' and close the device
            Midi.MIDI_InClose(_midiInHandle)
            ...
            Public Sub MyMidiProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              ' handle all Midi messages here
              If msg = MIDIMessage.MIM_OPEN Then
                ' nothing to do
              Else
                If msg = MIDIMessage.MIM_CLOSE Then
                  ' handle is from now on invalid
                Else
                  If msg = MIDIMessage.MIM_DATA Then
                    ' process the message...
                    Dim p1 As Integer = param1.ToInt32()
                    Dim p2 As Integer = param2.ToInt32()
                    ...
                  Else
                    If msg = MIDIMessage.MIM_MOREDATA Then
                      ' we are not fast enough in this callback to keep up...
                      ' the input device is sending messages to fast
                      ...
                    Else
                      If msg = MIDIMessage.MIM_LONGDATA Then
                        ' process the message...
                        ...
                      Else
                        If msg = MIDIMessage.MIM_ERROR Then
                          ' process the invalid message...
                          ...
                        Else
                          If msg = MIDIMessage.MIM_LONGERROR Then
                            ' process the invalid message...
                            ...
                          End If
                        End If 
                      End If
                    End If
                  End If
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InClose(System.IntPtr)">
            <summary>
            Closes the specified MIDI input device.
            </summary>
            <param name="handle">Handle to the MIDI input device. If the function is successful, the handle is no longer valid after the call to this function.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>If there are input buffers that have been sent by using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> function and have not been returned to the application, the close operation will fail. 
            To return all pending buffers through the callback function, use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InReset(System.IntPtr)"/> function.
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIOUTPROC,System.IntPtr)">
            <summary>
            Opens a MIDI output device for playback.
            </summary>
            <param name="handle">Returns the MIDI output handle. The handle is used to identify the device in calls to other MIDI output functions.</param>
            <param name="deviceID">Identifier of the MIDI output device to be opened (see <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutGetDevCaps(System.Int32,radio42.Multimedia.Midi.MIDI_OUTCAPS)"/> for details).</param>
            <param name="proc">The <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/> callback delegate to use. Called during MIDI playback to process messages related to the progress of the playback. If no callback is desired, specify <see langword="null"/> for this parameter. For more information on the callback function, see <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/>.</param>
            <param name="user">User instance data passed to the callback function.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>The flags are automatically set according to the given <paramref name="proc"/> (thats why this method does not contain any flags parameter).</para>
            <para>To determine the number of MIDI output devices present in the system, use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutGetNumDevs"/> function. The device identifier specified by <paramref name="deviceID"/> varies from zero to one less than the number of devices present.</para>
            <para>If a function is chosen to receive callback information, the following messages are sent to the function to indicate the progress of MIDI output: MOM_OPEN, MOM_CLOSE, and MOM_DONE.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MIDIOUTPROC _midiProc;
            private IntPtr _midiOutHandle;
            ...
            // Open the Midi device #2
            _midiProc = new MIDIOUTPROC(MyMidiProc);
            MIDIError ret = Midi.MIDI_OutOpen(ref _midiOutHandle, 2, _midiProc, 0);
            if (ret == MIDIError.MIDI_OK)
            {
              // device opened and ready
            }
            ...
            // When not needed anymore...stop the device
            Midi.MIDI_OutReset(_midiOutHandle);
            // and close the device
            Midi.MIDI_OutClose(_midiOutHandle);
            ...
            private void SendShortMessage(int message)
            {
              MIDI_OutShortMsg(_midiOutHandle, message);
            }
            
            private void SendSysExMessage(byte[] data)
            {
              MIDI_HEADER header = new MIDI_HEADER(data);
              header.Prepare(false, _midiOutHandle);
              // If the header was perpared successfully.
              if (header.HeaderPtr != IntPtr.Zero)
              {
                // send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(_midiOutHandle, header.HeaderPtr);
              }
            }
            
            public void MyMidiProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              // handle all Midi messages here
              if (msg == MIDIMessage.MOM_OPEN)
              {
                // nothing to do
              }
              else if (msg == MIDIMessage.MOM_CLOSE)
              {
                // handle is from now on invalid
              }
              else if (msg == MIDIMessage.MOM_DONE)
              {
                // process the message...
                // param1 will contain the pointer to the MIDI_HEADER
                MIDI_HEADER header = new MIDI_HEADER(param1);
                // process the header if needed
                ...
                // and finally unprepare the header
                header.Unprepare(false, handle);
              }
            }
            </code>
            <code lang="VB">
            Private _midiProc As MIDIOUTPROC
            Private _midiOutHandle As IntPtr
            ...
            ' Open the Midi device #2
            _midiProc = New MIDIOUTPROC(MyMidiProc)
            Dim ret As MIDIError = Midi.MIDI_OutOpen(_midiOutHandle, 2, _midiProc, 0)
            If ret = MIDIError.MIDI_OK Then
              ' device opened and ready
            End If
            ...
            ' when not needed anymore...stop the device
            Midi.MIDI_OutReset(_midiOutHandle)
            ' and close the device
            Midi.MIDI_OutClose(_midiOutHandle)
            ...
            Private Sub SendShortMessage(message As Integer)
              MIDI_OutShortMsg(_midiOutHandle, message)
            End Sub
            
            Private Sub SendSysExMessage(data() As Byte)
              Dim header As New MIDI_HEADER(data)
              header.Prepare(False, _midiOutHandle)
              ' If the header was perpared successfully.
              If header.HeaderPtr &lt;&gt; IntPtr.Zero Then
                ' send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(_midiOutHandle, header.HeaderPtr)
              End If
            End Sub
            
            Public Sub MyMidiProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              ' handle all Midi messages here
              If msg = MIDIMessage.MOM_OPEN Then
                ' nothing to do
              Else
                If msg = MIDIMessage.MOM_CLOSE Then
                  ' handle is from now on invalid
                Else
                  If msg = MIDIMessage.MOM_DONE Then
                    ' process the message...
                    ' param1 will contain the pointer to the MIDI_HEADER
                    Dim header As New MIDI_HEADER(param1)
                    ' process the header if needed
                    ...
                    ' and finally unprepare the header
                    header.Unprepare(False, handle)
                  End If
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutClose(System.IntPtr)">
            <summary>
            Closes the specified MIDI output device.
            </summary>
            <param name="handle">Handle to the MIDI output device. If the function is successful, the handle is no longer valid after the call to this function.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>If there are output buffers that have been sent by using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> function and have not been returned to the application, the close operation will fail. 
            To mark all pending buffers as being done, use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutReset(System.IntPtr)"/> function.
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_Connect(System.IntPtr,System.IntPtr)">
            <summary>
            Connects a MIDI input device to a MIDI thru or output device, or connects a MIDI thru device to a MIDI output device. 
            </summary>
            <param name="handleA">Handle to a MIDI input device or a MIDI thru device (for thru devices, this handle must belong to a MIDI output device).</param>
            <param name="handleB">Handle to the MIDI output device or thru device.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>After calling this function, the MIDI input device receives event data in an MIM_DATA message whenever a message with the same event data is sent to the output device driver.
            <para>A thru driver is a special form of MIDI output driver. The system will allow only one MIDI output device to be connected to a MIDI input device, but multiple MIDI output devices can be connected to a MIDI thru device. 
            Whenever the given MIDI input device receives event data in an MIM_DATA message, a message with the same event data is sent to the given output device driver (or through the thru driver to the output drivers).</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_Disconnect(System.IntPtr,System.IntPtr)">
            <summary>
            Disconnects a MIDI input device from a MIDI thru or output device, or disconnects a MIDI thru device from a MIDI output device.
            </summary>
            <param name="handleA">Handle to a MIDI input device or a MIDI thru device.</param>
            <param name="handleB">Handle to the MIDI output device to be disconnected.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>MIDI input, output, and thru devices can be connected by using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_Connect(System.IntPtr,System.IntPtr)"/> function. 
            Thereafter, whenever the MIDI input device receives event data in an MIM_DATA message, a message with the same event data is sent to the output device driver (or through the thru driver to the output drivers).
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)">
            <summary>
            Starts MIDI input on the specified MIDI input device.
            </summary>
            <param name="handle">Handle to the MIDI input device.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>This function resets the time stamp to zero. Time stamp values for subsequently received messages are relative to the time that this function was called.</para>
            <para>All messages except system-exclusive messages are sent directly to the client when they are received. System-exclusive messages are placed in the buffers supplied by the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> function. 
            If there are no buffers in the queue, the system-exclusive data is thrown away without notification to the client and input continues. 
            Buffers are returned to the client when they are full, when a complete system-exclusive message has been received, or when the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InReset(System.IntPtr)"/> function is used. 
            The <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.Data"/> member of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure will contain the actual data received.</para>
            <para>Calling this function when input is already started has no effect, and the function returns zero.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InStop(System.IntPtr)">
            <summary>
            Stops MIDI input on the specified MIDI input device.
            </summary>
            <param name="handle">Handle to the MIDI input device.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>If there are any system-exclusive messages or stream buffers in the queue, the current buffer is marked as done (the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.Data"/> member of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure will contain the actual data received), but any empty buffers in the queue remain there and are not marked as done.</para>
            <para>Calling this function when input is not started has no effect, and the function returns zero.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InReset(System.IntPtr)">
            <summary>
            Stops input on a given MIDI input device.
            </summary>
            <param name="handle">Handle to the MIDI input device.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>This function returns all pending input buffers to the callback function and sets the <see cref="F:radio42.Multimedia.Midi.MIDIHeader.MHDR_DONE"/> flag in the Flags member of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutReset(System.IntPtr)">
            <summary>
            Turns off all notes on all MIDI channels for the specified MIDI output device.
            </summary>
            <param name="handle">Handle to the MIDI output device.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>Any pending system-exclusive or stream output buffers are returned to the callback function and the MHDR_DONE flag is set in the Flags member of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure.</para>
            <para>Terminating a system-exclusive message without sending an EOX (end-of-exclusive) byte might cause problems for the receiving device. 
            The <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutReset(System.IntPtr)"/> function does not send an EOX byte when it terminates a system-exclusive message — applications are responsible for doing this.</para>
            <para>To turn off all notes, a note-off message for each note in each channel is sent. In addition, the sustain controller is turned off for each channel.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutShortMsg(System.IntPtr,System.Int32)">
            <summary>
            Sends a short MIDI message to the specified MIDI output device.
            </summary>
            <param name="handle">Handle to the MIDI output device.</param>
            <param name="message">MIDI message. The message is packed into a double word value with the first byte of the message in the low-order byte. The message is packed into this parameter as follows:
            <para>High-Word: High-order byte: Not used. Low-order byte: The second byte of MIDI data (when needed).</para>
            <para>Low-Word: High-order byte: The first byte of MIDI data (when needed). Low-order byte: The MIDI status.</para>
            <para>The two MIDI data bytes are optional, depending on the MIDI status byte. When a series of messages have the same status byte, the status byte can be omitted from messages after the first one in the series, creating a running status.</para>
            </param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>This function is used to send any MIDI message except for system-exclusive or stream messages.</para>
            <para>This function might not return until the message has been sent to the output device. You can send short messages while streams are playing on the same device (although you cannot use a running status in this case).</para>
            <para>You might used the <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> class to construct and or pack the message with it's components.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MIDIOUTPROC _midiProc;
            private IntPtr _midiOutHandle;
            ...
            // Open the Midi device #2
            _midiProc = new MIDIOUTPROC(MyMidiProc);
            MIDIError ret = Midi.MIDI_OutOpen(ref _midiOutHandle, 2, _midiProc, 0);
            if (ret == MIDIError.MIDI_OK)
            {
              // device opened and ready
            }
            ...
            // When not needed anymore...stop the device
            Midi.MIDI_OutReset(_midiOutHandle);
            // and close the device
            Midi.MIDI_OutClose(_midiOutHandle);
            ...
            private void SendShortMessage(int message)
            {
              MIDI_OutShortMsg(_midiOutHandle, message);
            }
            
            private void SendSysExMessage(byte[] data)
            {
              MIDI_HEADER header = new MIDI_HEADER(data);
              header.Prepare(false, _midiOutHandle);
              // If the header was perpared successfully.
              if (header.HeaderPtr != IntPtr.Zero)
              {
                // send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(_midiOutHandle, header.HeaderPtr);
              }
            }
            
            public void MyMidiProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              // handle all Midi messages here
              if (msg == MIDIMessage.MOM_OPEN)
              {
                // nothing to do
              }
              else if (msg == MIDIMessage.MOM_CLOSE)
              {
                // handle is from now on invalid
              }
              else if (msg == MIDIMessage.MOM_DONE)
              {
                // process the message...
                // param1 will contain the pointer to the MIDI_HEADER
                MIDI_HEADER header = new MIDI_HEADER(param1);
                // process the header if needed
                ...
                // and finally unprepare the header
                header.Unprepare(false, handle);
              }
            }
            </code>
            <code lang="VB">
            Private _midiProc As MIDIOUTPROC
            Private _midiOutHandle As IntPtr
            ...
            ' Open the Midi device #2
            _midiProc = New MIDIOUTPROC(MyMidiProc)
            Dim ret As MIDIError = Midi.MIDI_OutOpen(_midiOutHandle, 2, _midiProc, 0)
            If ret = MIDIError.MIDI_OK Then
              ' device opened and ready
            End If
            ...
            ' when not needed anymore...stop the device
            Midi.MIDI_OutReset(_midiOutHandle)
            ' and close the device
            Midi.MIDI_OutClose(_midiOutHandle)
            ...
            Private Sub SendShortMessage(message As Integer)
              MIDI_OutShortMsg(_midiOutHandle, message)
            End Sub
            
            Private Sub SendSysExMessage(data() As Byte)
              Dim header As New MIDI_HEADER(data)
              header.Prepare(False, _midiOutHandle)
              ' If the header was perpared successfully.
              If header.HeaderPtr &lt;&gt; IntPtr.Zero Then
                ' send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(_midiOutHandle, header.HeaderPtr)
              End If
            End Sub
            
            Public Sub MyMidiProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              ' handle all Midi messages here
              If msg = MIDIMessage.MOM_OPEN Then
                ' nothing to do
              Else
                If msg = MIDIMessage.MOM_CLOSE Then
                  ' handle is from now on invalid
                Else
                  If msg = MIDIMessage.MOM_DONE Then
                    ' process the message...
                    ' param1 will contain the pointer to the MIDI_HEADER
                    Dim header As New MIDI_HEADER(param1)
                    ' process the header if needed
                    ...
                    ' and finally unprepare the header
                    header.Unprepare(False, handle)
                  End If
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)">
            <summary>
            Sends a system-exclusive MIDI message to the specified MIDI output device.
            </summary>
            <param name="handle">Handle to the MIDI output device.</param>
            <param name="headerPtr">Pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure that identifies the MIDI buffer.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <example>
            <code lang="C#">
            private MIDIOUTPROC _midiProc;
            private IntPtr _midiOutHandle;
            ...
            // Open the Midi device #2
            _midiProc = new MIDIOUTPROC(MyMidiProc);
            MIDIError ret = Midi.MIDI_OutOpen(ref _midiOutHandle, 2, _midiProc, 0);
            if (ret == MIDIError.MIDI_OK)
            {
              // device opened and ready
            }
            ...
            // When not needed anymore...stop the device
            Midi.MIDI_OutReset(_midiOutHandle);
            // and close the device
            Midi.MIDI_OutClose(_midiOutHandle);
            ...
            private void SendShortMessage(int message)
            {
              MIDI_OutShortMsg(_midiOutHandle, message);
            }
            
            private void SendSysExMessage(byte[] data)
            {
              MIDI_HEADER header = new MIDI_HEADER(data);
              header.Prepare(false, _midiOutHandle);
              // If the header was perpared successfully.
              if (header.HeaderPtr != IntPtr.Zero)
              {
                // send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(_midiOutHandle, header.HeaderPtr);
              }
            }
            
            public void MyMidiProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              // handle all Midi messages here
              if (msg == MIDIMessage.MOM_OPEN)
              {
                // nothing to do
              }
              else if (msg == MIDIMessage.MOM_CLOSE)
              {
                // handle is from now on invalid
              }
              else if (msg == MIDIMessage.MOM_DONE)
              {
                // process the message...
                // param1 will contain the pointer to the MIDI_HEADER
                MIDI_HEADER header = new MIDI_HEADER(param1);
                // process the header if needed
                ...
                // and finally unprepare the header
                header.Unprepare(false, handle);
              }
            }
            </code>
            <code lang="VB">
            Private _midiProc As MIDIOUTPROC
            Private _midiOutHandle As IntPtr
            ...
            ' Open the Midi device #2
            _midiProc = New MIDIOUTPROC(MyMidiProc)
            Dim ret As MIDIError = Midi.MIDI_OutOpen(_midiOutHandle, 2, _midiProc, 0)
            If ret = MIDIError.MIDI_OK Then
              ' device opened and ready
            End If
            ...
            ' when not needed anymore...stop the device
            Midi.MIDI_OutReset(_midiOutHandle)
            ' and close the device
            Midi.MIDI_OutClose(_midiOutHandle)
            ...
            Private Sub SendShortMessage(message As Integer)
              MIDI_OutShortMsg(_midiOutHandle, message)
            End Sub
            
            Private Sub SendSysExMessage(data() As Byte)
              Dim header As New MIDI_HEADER(data)
              header.Prepare(False, _midiOutHandle)
              ' If the header was perpared successfully.
              If header.HeaderPtr &lt;&gt; IntPtr.Zero Then
                ' send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(_midiOutHandle, header.HeaderPtr)
              End If
            End Sub
            
            Public Sub MyMidiProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              ' handle all Midi messages here
              If msg = MIDIMessage.MOM_OPEN Then
                ' nothing to do
              Else
                If msg = MIDIMessage.MOM_CLOSE Then
                  ' handle is from now on invalid
                Else
                  If msg = MIDIMessage.MOM_DONE Then
                    ' process the message...
                    ' param1 will contain the pointer to the MIDI_HEADER
                    Dim header As New MIDI_HEADER(param1)
                    ' process the header if needed
                    ...
                    ' and finally unprepare the header
                    header.Unprepare(False, handle)
                  End If
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)">
            <summary>
            Prepares a buffer for MIDI input.
            </summary>
            <param name="handle">Handle to the MIDI input device.</param>
            <param name="headerPtr">Pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure that identifies the buffer to be prepared.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>Preparing a header that has already been prepared has no effect, and the function returns zero.</para>
            <para>After the header has been prepared, do not modify the buffer. To free the buffer, use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InUnprepareHeader(System.IntPtr,System.IntPtr)"/> function.</para>
            <para>Before using this function, you must set the data, bufferLength, and flags members of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure. The flags member must be set to zero.</para>
            <para>For convenience the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> might also be used, which calls the method internally and returns the header pointer in the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> member.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MIDIINPROC _midiInProc;
            private IntPtr _midiInHandle;
            ...
            private void StartRecording()
            {
              _midiInProc = new MIDIINPROC(MyMidiInProc);
              MIDIError ret = Midi.MIDI_InOpen(ref _midiInHandle, 1, _midiInProc, 0, MIDIFlags.MIDI_IO_STATUS);
              if (ret == MIDIError.MIDI_OK)
              {
                // supply the device with 2 buffers
                AddSysExBuffer(_midiInHandle, 1024);
                AddSysExBuffer(_midiInHandle, 1024);
                ret = Midi.MIDI_InStart(_midiInHandle);
              }
            }
            
            // prepare receiving system-exclusive messages
            private void AddSysExBuffer(IntPtr handle, int size)
            {
              // prepare a empty midi header
              MIDI_HEADER header = new MIDI_HEADER(size);
              header.Prepare(true, handle);
              // If the header was perpared successfully.
              if (header.HeaderPtr != IntPtr.Zero)
              {
                // Add the buffer to the InputDevice.
                Midi.MIDI_InAddBuffer(handle, header.HeaderPtr);
              }
            }
            
            private void MyMidiInProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              // handle all Midi messages here
              if (msg == MIDIMessage.MIM_DATA)
              {
                // process the short message...
                int p1 = param1.ToInt32();
                int p2 = param2.ToInt32();
                ...
                Console.WriteLine("Msg={0}\r\nParam1={1}\r\nParam2={2}" , msg, p1, p2);
              }
              else if (msg == MIDIMessage.MIM_LONGDATA)
              {
                // process the system-exclusive message...
                MIDI_HEADER header = new MIDI_HEADER(param1);
                if (header.IsDone)
                {
                  byte[] data = header.Data;
                  ...
                  Console.WriteLine(header.ToString());
                }
                // must unprepare the processed header
                header.Unprepare(true, handle);
                // add a new buffer
                // we must constantly provide new buffers until we finished recording
                AddSysExBuffer(handle, 1024);
              }
              ...
            }
            </code>
            <code lang="VB">
            Private _midiInProc As MIDIINPROC
            Private _midiInHandle As IntPtr
            ...
            Private Sub StartRecording()
              _midiInProc = New MIDIINPROC(AddressOf MyMidiInProc)
              Dim ret As MIDIError = Midi.MIDI_InOpen(_midiInHandle, 1, _midiInProc, 0, MIDIFlags.MIDI_IO_STATUS)
              If ret = MIDIError.MIDI_OK Then
                ' supply the device with 2 buffers
                AddSysExBuffer(_midiInHandle, 1024)
                AddSysExBuffer(_midiInHandle, 1024)
                ret = Midi.MIDI_InStart(_midiInHandle)
              End If
            End Sub
            
            ' prepare receiving system-exclusive messages
            Private Sub AddSysExBuffer(handle As IntPtr, size As Integer)
              ' prepare a empty midi header
              Dim header As New MIDI_HEADER(size)
              header.Prepare(True, handle)
              ' If the header was perpared successfully.
              If header.HeaderPtr &lt;&gt; IntPtr.Zero Then
                ' Add the buffer to the InputDevice.
                Midi.MIDI_InAddBuffer(handle, header.HeaderPtr)
              End If
            End Sub
            
            Private Sub MyMidiInProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              ' handle all Midi messages here
              If msg = MIDIMessage.MIM_DATA Then
                ' process the short message...
                Dim p1 As Integer = param1.ToInt32()
                Dim p2 As Integer = param2.ToInt32()
                ...
                Console.WriteLine("Msg={0}" + ControlChars.Cr + ControlChars.Lf + "Param1={1}" + ControlChars.Cr + ControlChars.Lf + "Param2={2}", msg, p1, p2)
              Else
                If msg = MIDIMessage.MIM_LONGDATA Then
                  ' process the system-exclusive message...
                  Dim header As New MIDI_HEADER(param1)
                  If header.IsDone Then
                    Dim data As Byte() = header.Data
                    ...
                    Console.WriteLine(header.ToString())
                  End If
                  ' must unprepare the processed header
                  header.Unprepare(True, handle)
                  ' add a new buffer
                  ' we must constantly provide new buffers until we finished recording
                  AddSysExBuffer(handle, 1024)
                End If
                ...
              End If 
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InUnprepareHeader(System.IntPtr,System.IntPtr)">
            <summary>
            Cleans up the preparation performed by the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/> function.
            </summary>
            <param name="handle">Handle to the MIDI input device.</param>
            <param name="headerPtr">Pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure identifying the buffer to be cleaned up.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>This function is complementary to <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/>. You must use this function before freeing the buffer. After passing a buffer to the device driver by using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> function, you must wait until the driver is finished with the buffer before using <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InUnprepareHeader(System.IntPtr,System.IntPtr)"/>. 
            Unpreparing a buffer that has not been prepared has no effect, and the function returns 0.</para>
            <para>For convenience the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/> might also be used, which calls this method internally.
            In order to convert an IntPtr (e.g. as given in the <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> with the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> or <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR"/> as param1) back to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure use the appropriate constructor overload of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> class taking a headerPtr.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MIDIINPROC _midiInProc;
            private IntPtr _midiInHandle;
            ...
            private void StartRecording()
            {
            	_midiInProc = new MIDIINPROC(MyMidiInProc);
            	MIDIError ret = Midi.MIDI_InOpen(ref _midiInHandle, 1, _midiInProc, 0, MIDIFlags.MIDI_IO_STATUS);
            
            	if (ret == MIDIError.MIDI_OK)
            	{
            		// supply the device with 2 buffers
            		AddSysExBuffer(_midiInHandle, 1024);
            		AddSysExBuffer(_midiInHandle, 1024);
            	
            		ret = Midi.MIDI_InStart(_midiInHandle);
            	}
            }
            
            // prepare receiving system-exclusive messages
            public void AddSysExBuffer(IntPtr handle, int size)
            {
            	// prepare a empty midi header
            	MIDI_HEADER header = new MIDI_HEADER(size);
            	header.Prepare(true, handle);
            	// If the header was perpared successfully.
            	if (header.HeaderPtr != IntPtr.Zero)
            	{
            		// Add the buffer to the InputDevice.
            		Midi.MIDI_InAddBuffer(handle, header.HeaderPtr);
            	}
            }
            
            private void MyMidiInProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
            	// handle all Midi messages here
            	if (msg == MIDIMessage.MIM_DATA)
            	{
            		// process the short message...
            		// on Win32 system the param1 and param2 values might be converted like this:
            		int p1 = param1.ToInt32();
            		int p2 = param2.ToInt32();
            		Console.WriteLine( "Msg={0}\r\nParam1={1}\r\nParam2={2}" , msg, p1, p2);
            	}
            	else if (msg == MIDIMessage.MIM_LONGDATA)
            	{
            		// process the system-exclusive message...
            		MIDI_HEADER header = new MIDI_HEADER(param1);
            		if (header.IsDone)
            		{
            			byte[] data = header.Data;
            			...
            			Console.WriteLine( header.ToString() );
            		}
            		header.Unprepare(true, handle);
            		
            		// add a new buffer
            		// since we should constantly provide new buffers until we finished recording
            		AddSysExBuffer(handle, 1024);
            	}
            	...
            }
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)">
            <summary>
            Sends an input buffer to a specified opened MIDI input device. This function is used for system-exclusive messages.
            </summary>
            <param name="handle">Handle to the MIDI input device.</param>
            <param name="headerPtr">Pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure that identifies the buffer.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>When the buffer is filled, it is sent back to the application (see <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/>).</para>
            <para>The buffer must be prepared by using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/> function before it is passed to this function.</para>
            <para>For convenience the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> might also be used, which calls <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/> internally and provides the prepared header pointer in it's <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> member.
            In order to convert an IntPtr (e.g. as given in the <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> with the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> or <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR"/> as param1) back to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure use the appropriate constructor overload of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> class taking a headerPtr.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MIDIINPROC _midiInProc;
            private IntPtr _midiInHandle;
            ...
            private void StartRecording()
            {
            	_midiInProc = new MIDIINPROC(MyMidiInProc);
            	MIDIError ret = Midi.MIDI_InOpen(ref _midiInHandle, 1, _midiInProc, 0, MIDIFlags.MIDI_IO_STATUS);
            
            	if (ret == MIDIError.MIDI_OK)
            	{
            		// supply the device with 2 buffers
            		AddSysExBuffer(_midiInHandle, 1024);
            		AddSysExBuffer(_midiInHandle, 1024);
            	
            		ret = Midi.MIDI_InStart(_midiInHandle);
            	}
            }
            
            // prepare receiving system-exclusive messages
            public void AddSysExBuffer(IntPtr handle, int size)
            {
            	// prepare a empty midi header
            	MIDI_HEADER header = new MIDI_HEADER(size);
            	header.Prepare(true, handle);
            	// If the header was perpared successfully.
            	if (header.HeaderPtr != IntPtr.Zero)
            	{
            		// Add the buffer to the InputDevice.
            		Midi.MIDI_InAddBuffer(handle, header.HeaderPtr);
            	}
            }
            
            private void MyMidiInProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
            	// handle all Midi messages here
            	if (msg == MIDIMessage.MIM_DATA)
            	{
            		// process the short message...
            		// on Win32 system the param1 and param2 values might be converted like this:
            		int p1 = param1.ToInt32();
            		int p2 = param2.ToInt32();
            		Console.WriteLine( "Msg={0}\r\nParam1={1}\r\nParam2={2}" , msg, p1, p2);
            	}
            	else if (msg == MIDIMessage.MIM_LONGDATA)
            	{
            		// process the system-exclusive message...
            		MIDI_HEADER header = new MIDI_HEADER(param1);
            		if (header.IsDone)
            		{
            			byte[] data = header.Data;
            			...
            			Console.WriteLine( header.ToString() );
            		}
            		header.Unprepare(true, handle);
            		
            		// add a new buffer
            		// since we should constantly provide new buffers until we finished recording
            		AddSysExBuffer(handle, 1024);
            	}
            	...
            }
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutPrepareHeader(System.IntPtr,System.IntPtr)">
            <summary>
            Prepares a MIDI system-exclusive or stream buffer for output.
            </summary>
            <param name="handle">Handle to the MIDI output device.</param>
            <param name="headerPtr">Pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure that identifies the buffer to be prepared.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>A stream buffer cannot be larger than 64K.</para>
            <para>Preparing a header that has already been prepared has no effect, and the function returns 0.</para>
            <para>After the header has been prepared, do not modify the buffer. To free the buffer, use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutUnprepareHeader(System.IntPtr,System.IntPtr)"/> function.</para>
            <para>Before using this function, you must set the data, bufferLength, and flags members of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure. The flags member must be set to zero.</para>
            <para>For convenience the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> might also be used, which calls <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/> internally and provides the prepared header pointer in it's <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> member.
            In order to convert an IntPtr (e.g. as given in the <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> with the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> or <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR"/> as param1) back to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure use the appropriate constructor overload of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> class taking a headerPtr.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutUnprepareHeader(System.IntPtr,System.IntPtr)">
            <summary>
            Cleans up the preparation performed by the midiOutPrepareHeader function.
            </summary>
            <param name="handle">Handle to the MIDI output device.</param>
            <param name="headerPtr">Pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure identifying the buffer to be cleaned up.</param>
            <returns>Returns 0 if successful or an error code otherwise. For possible error values see <see cref="T:radio42.Multimedia.Midi.MIDIError"/>.</returns>
            <remarks>
            <para>This function is complementary to the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutPrepareHeader(System.IntPtr,System.IntPtr)"/> function. You must call <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutUnprepareHeader(System.IntPtr,System.IntPtr)"/> before freeing the buffer. 
            After passing a buffer to the device driver with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> function, you must wait until the device driver is finished with the buffer before calling <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutUnprepareHeader(System.IntPtr,System.IntPtr)"/>.</para>
            <para>Unpreparing a buffer that has not been prepared has no effect, and the function returns 0.</para>
            <para>For convenience the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> might also be used, which calls <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/> internally and provides the prepared header pointer in it's <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> member.
            In order to convert an IntPtr (e.g. as given in the <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> with the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> or <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR"/> as param1) back to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure use the appropriate constructor overload of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> class taking a headerPtr.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_InMessage(System.IntPtr,radio42.Multimedia.Midi.MIDIMessage,System.IntPtr,System.IntPtr)">
            <summary>
            Sends a message to the MIDI device driver (input).
            </summary>
            <param name="handle">Identifier of the MIDI device that receives the message (must be a handle type).</param>
            <param name="msg">Message to send (e.g. one of the <see cref="T:radio42.Multimedia.Midi.MIDIMessage"/> values).</param>
            <param name="param1">Message parameter 1.</param>
            <param name="param2">Message parameter 2.</param>
            <returns>Returns the value returned by the audio device driver.</returns>
            <remarks>This function is used only for driver-specific messages that are not supported by the MIDI API.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_OutMessage(System.IntPtr,radio42.Multimedia.Midi.MIDIMessage,System.IntPtr,System.IntPtr)">
            <summary>
            Sends a message to the MIDI device driver (output).
            </summary>
            <param name="handle">Identifier of the MIDI device that receives the message (must be a handle type).</param>
            <param name="msg">Message to send (e.g. one of the <see cref="T:radio42.Multimedia.Midi.MIDIMessage"/> values).</param>
            <param name="param1">Message parameter 1.</param>
            <param name="param2">Message parameter 2.</param>
            <returns>Returns the value returned by the audio device driver.</returns>
            <remarks>This function is used only for driver-specific messages that are not supported by the MIDI API.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.Midi.MIDI_Note2Frequency(System.Int32)">
            <summary>
            Converts a MIDI note number to its corresponding frequency.
            </summary>
            <param name="noteNumber">The number of the note to convert.</param>
            <returns>The frequency of the specified note in Hz.</returns>
            <remarks>MIDI notes will typically be numbered from 0 (C-1) to 127 (G8).
            The reference is the standard pitch (A3) which has the number 69 and represents 440 Hz.
            <para>See the <see cref="T:radio42.Multimedia.Midi.MIDINote"/> enummeration for possible note values.</para>
            </remarks>
            <example>
            <code lang="C#">
            // the following code will return 440Hz for the C
            int freq = Utils.NoteToFrequency(69);
            </code>
            <code lang="VB">
            ' the following code will return 440Hz for the C
            Dim freq As Integer = Utils.NoteToFrequency(69)
            </code>
            </example>
        </member>
        <member name="T:radio42.Multimedia.Midi.MidiShortMessage">
            <summary>
            This class represents a Midi short (data) message as for example received in a <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_DATA"/> message of a <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/>.
            </summary>
            <remarks>You might use the class to pack (encode, construct) or unpack (decode) any Midi short message.
            <para>Use this class with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutShortMsg(System.IntPtr,System.Int32)"/> method to send a message to an output device. Use the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Message"/> property in that case to get the constructed message value.</para>
            <para>Use this class with the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_DATA"/> message of a <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> to decode the received message.</para>
            </remarks>
            <example>
            Using the MidiShortMessage with an MIDIINPROC:
            <code lang="C#">
            private MIDIINPROC _midiProc;
            private int _midiInHandle;
            ...
            // Open the Midi device #2
            _midiProc = new MIDIINPROC(MyMidiProc);
            MIDIError ret = Midi.MIDI_InOpen(ref _midiInHandle, 2, _midiProc, IntPtr.Zero, MIDIFlags.MIDI_IO_STATUS);
            if (ret == MIDIError.MIDI_OK)
            {
              // supply the device with 2 buffers
              AddSysExBuffer(_midiInHandle, 1024);
              AddSysExBuffer(_midiInHandle, 1024);
              // Start the device
              ret = Midi.MIDI_InStart(_midiInHandle);
            }
            ...
            // when not needed anymore...stop the device
            Midi.MIDI_InReset(_midiInHandle);
            // and close the device
            Midi.MIDI_InClose(_midiInHandle);
            ...
            // prepare receiving system-exclusive messages
            private void AddSysExBuffer(IntPtr handle, int size)
            {
              // prepare a empty midi header
              MIDI_HEADER header = new MIDI_HEADER(size);
              header.Prepare(true, handle);
              // If the header was perpared successfully.
              if (header.HeaderPtr != IntPtr.Zero)
              {
                // Add the buffer to the InputDevice.
                Midi.MIDI_InAddBuffer(handle, header.HeaderPtr);
              }
            }
            ...
            private MidiShortMessage _shortMsg  = null;
            private MidiSysExMessage _sysExMsg  = null;
            
            public void MyMidiProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              // handle all Midi messages here
              if(msg == MIDIMessage.MIM_OPEN)
              {
                // nothing to do
              }
              else if(msg == MIDIMessage.MIM_CLOSE)
              {
                // handle is from now on invalid
              }
              else if(msg == MIDIMessage.MIM_DATA)
              {
                // process the message...
                _shortMsg = new MidiShortMessage(param1, param2, _shortMsg);
                Console.WriteLine(_shortMsg.ToString());
              }
              else if(msg == MIDIMessage.MIM_MOREDATA)
              {
                // we are not fast enough in this callback to keep up...
                // the input device is sending messages to fast
                ...
              }
              else if(msg == MIDIMessage.MIM_LONGDATA)
              {
                // process the message...
                // param1 will contain the pointer to the MIDI_HEADER
                _sysExMsg  = new MidiSysExMessage(true, handle, param1, _sysExMsg);
                if (_sysExMsg.IsDone)
                {
                  Console.WriteLine(_sysExMsg.ToString());
                }
                // add a new buffer
                // since we must constantly provide new buffers until we finished recording
                AddSysExBuffer(handle, 1024);
              }
              else if(msg == MIDIMessage.MIM_ERROR)
              {
                // process the invalid message...
                ...
              }
              else if(msg == MIDIMessage.MIM_LONGERROR)
              {
                // process the invalid message...
                // param1 will contain the pointer to the MIDI_HEADER
                MIDI_HEADER header = new MIDI_HEADER(param1);
                header.Unprepare(true, handle);
                // add a new buffer
                // since we should constantly provide new buffers until we finished recording
                AddSysExBuffer(handle, 1024);
              }
            }
            </code>
            <code lang="VB">
            Private _midiInProc As MIDIINPROC
            Private _midiInHandle As IntPtr
            ...
            ' Open the Midi device #2
            _midiProc = New MIDIINPROC(AddressOf MyMidiProc)
            Dim ret As MIDIError = Midi.MIDI_InOpen(_midiInHandle, 2, _midiProc, IntPtr.Zero, MIDIFlags.MIDI_IO_STATUS)
            If ret = MIDIError.MIDI_OK Then
              ' supply the device with 2 buffers
              AddSysExBuffer(_midiInHandle, 1024)
              AddSysExBuffer(_midiInHandle, 1024)
              ' Start the device
              ret = Midi.MIDI_InStart(_midiInHandle)
            End If
            ...
            ' when not needed anymore...stop the device
            Midi.MIDI_InReset(_midiInHandle)
            ' and close the device
            Midi.MIDI_InClose(_midiInHandle)
            ...
            Private _shortMsg As MidiShortMessage = Nothing
            Private _sysExMsg As MidiSysExMessage = Nothing
            ...
            Public Sub MyMidiProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              ' handle all Midi messages here
              If msg = MIDIMessage.MIM_OPEN Then
                ' nothing to do
              Else
                If msg = MIDIMessage.MIM_CLOSE Then
                  ' handle is from now on invalid
                Else
                  If msg = MIDIMessage.MIM_DATA Then
                    ' process the message...
                    _shortMsg = New MidiShortMessage(param1, param2, _shortMsg)
                    Console.WriteLine(_shortMsg.ToString())
                  Else
                    If msg = MIDIMessage.MIM_MOREDATA Then
                      ' we are not fast enough in this callback to keep up...
                      ' the input device is sending messages to fast
                      ...
                    Else
                      If msg = MIDIMessage.MIM_LONGDATA Then
                        ' process the message...
                        ' param1 will contain the pointer to the MIDI_HEADER
                        _sysExMsg = New MidiSysExMessage(True, handle, param1, _sysExMsg)
                        If _sysExMsg.IsDone Then
                          Console.WriteLine(_sysExMsg.ToString())
                        End If
                        ' add a new buffer
                        ' since we must constantly provide new buffers until we finished recording
                        AddSysExBuffer(handle, 1024)
                      Else
                        If msg = MIDIMessage.MIM_ERROR Then
                          ' process the invalid message...
                          ...
                        Else
                          If msg = MIDIMessage.MIM_LONGERROR Then
                            ' process the invalid message...
                            ' param1 will contain the pointer to the MIDI_HEADER
                            Dim header As New MIDI_HEADER(param1)
                            header.Unprepare(True, handle)
                            ' add a new buffer
                            ' since we should constantly provide new buffers until we finished recording
                            AddSysExBuffer(handle, 1024)
                          End If
                        End If
                      End If
                    End If
                  End If
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.#ctor">
            <summary>
            Default constructor.
            </summary>
            <remarks>You might use this one together with the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.BuildMessage(radio42.Multimedia.Midi.MIDIStatus,System.Byte,System.Byte,System.Byte,System.Int64)"/> method to construct your own Midi data message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.#ctor(System.IntPtr,System.IntPtr)">
            <summary>
            Creates a new instance of the MidiShortMessage.
            </summary>
            <param name="param1">The MIDI message that was received.</param>
            <param name="param2">The timestamp that the message was received by the input device driver.</param>
            <remarks>
            <para>You might use this constuctor for example in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> when receiving a <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_DATA"/> message.</para>
            <para>MIDI messages received from a MIDI input port have running status disabled; each message is expanded to include the MIDI status byte.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.#ctor(System.IntPtr,System.IntPtr,radio42.Multimedia.Midi.MidiShortMessage)">
            <summary>
            Creates a new instance of the MidiShortMessage and also evaluates a previous short message..
            </summary>
            <param name="param1">The MIDI message that was received.</param>
            <param name="param2">The timestamp that the message was received by the input device driver.</param>
            <param name="previous">The previous short message received (e.g. in order to check, if a <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> message need to be paired - which is not done automatically here!).</param>
            <remarks>
            <para>You might use this constuctor for example in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> when receiving a <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_DATA"/> message.</para>
            <para>MIDI messages received from a MIDI input port have running status disabled; each message is expanded to include the MIDI status byte.</para>
            <para>Note: Some ControlChange messages might actually use two short messages (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>) to support paired values with a higher resolution (16384 instead of 128 values).
            In such case two messages will be send, where one contains the the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte and the other on the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.</para>
            <para>For this special case it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last (previous) message.
            Use this overload to always keep your previous message with the current short message.
            NOTE: The <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> property will only be set in case this current message and the <paramref name="previous"/> are having the same <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> (otherwise all previous messages would be links together and memory wil simply increase and increase, since the Garbage Collector would never release any un-needed messages)!
            In case of real-time messages the the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> will also not be set.</para>
            <para>To access the single value assigned to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/>/<see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerType"/> access the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue"/> property.</para>
            <para>You might use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)"/>, <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.#ctor(radio42.Multimedia.Midi.MIDIStatus,System.Byte,System.Byte,System.Byte,System.Int64)">
            <summary>
            Creates a new instance of the MidiShortMessage.
            </summary>
            <param name="status">The <see cref="T:radio42.Multimedia.Midi.MIDIStatus"/> status to use.</param>
            <param name="channel">The Midi channel number to use (0 to 15).</param>
            <param name="data1">The data 1 value to use.</param>
            <param name="data2">The data 2 value to use.</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.#ctor(System.Byte,System.Byte,System.Byte,System.Byte,System.Int64)">
            <summary>
            Creates a new instance of the MidiShortMessage.
            </summary>
            <param name="status">The Midi status byte value to use.</param>
            <param name="data1">The data 1 value to use.</param>
            <param name="data2">The data 2 value to use.</param>
            <param name="data3">The data 3 value to use (typically never used).</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0 if not applicable).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.#ctor(radio42.Multimedia.Midi.MIDIStatus,System.Byte,System.Int32,System.Int64)">
            <summary>
            Creates a new instance of the MidiShortMessage.
            </summary>
            <param name="status">The <see cref="T:radio42.Multimedia.Midi.MIDIStatus"/> status to use.</param>
            <param name="channel">The Midi channel number to use (0 to 15).</param>
            <param name="data">The data value to use (autofils Data1, Data2 and optionally Data3).</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.#ctor(System.Byte,System.Int32,System.Int64)">
            <summary>
            Creates a new instance of the MidiShortMessage.
            </summary>
            <param name="status">The Midi status byte value to use.</param>
            <param name="data">The data value to use (autofils Data1, Data2 and optionally Data3).</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.ID">
            <summary>
            Gets a unique overall short message ID.
            </summary>
            <remarks>The message ID is an internal counter which might be used to track the message order.
            <para>It will be incremented with every short-message created in the system. 
            So it might not be linear when using multiple devices in parallel, but it will for sure be incremental for each device, meaning each message ID generated on a device will be greater as the the previous message.</para>
            <para>But note, that the counter will be wrapped to 0 when it reaches a value of 9,223,372,036,854,775,807.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage">
            <summary>
            Gets or Sets the previous short message (preceding this short message) if set (or <see langword="null"/> if not set).
            </summary>
            <remarks>
            <para>Note: Some <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> messages might actually use two short messages (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>) to support paired values with a higher resolution (16384 instead of 128 values).
            In such case two messages will be send, where one contains the the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte and the other on the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.</para>
            <para>For this special case it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last (previous) message.
            Use this property to keep your previous message with the current short message.</para>
            <para>To access the single value assigned to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/>/<see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerType"/> access the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue"/> property.</para>
            <para>You might use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)"/>, <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            <para>Typically the messages with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> and with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 0 and 31 (MSB, coarse) are paired with a message of a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 32 and 63 (LSB, fine).
            But also a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 98 (LSB, fine) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 99 (MSB, coarse) as well as a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 100 (LSB, fine) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 101 (MSB, coarse).
            Other pairs might be hardware specific.</para>
            <para>If no previous message was set (e.g. see constructor overloads) this member might return <see langword="null"/>.
            It is also not possible to get a series of previous messages (i.e. the previous of the previous etc.) - only the last previous message is kept here.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Status">
            <summary>
            Gets or Sets the MIDI status byte.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Data1">
            <summary>
            Gets or Sets the MIDI data byte 1.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Data2">
            <summary>
            Gets or Sets the MIDI data byte 2.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.PairedData2">
            <summary>
            Gets the paired <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> value (from an optional <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/>).
            </summary>
            <remarks>The controller value normally ranges from 0 to 127.
            But if the controller is a continuous controller, this simply means that it's value can be set to any value within the range from 0 to 16383 (for 14-bit coarse/fine resolution).
            <para>To set a continuous controllers use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.SetContinuousController(System.Boolean,System.Boolean)"/>. By default this is never set.
            In such case this property will return the combined controller value by pairing this contoller value with the one from the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/>.
            Note: You must explicitly call the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.SetContinuousController(System.Boolean,System.Boolean)"/> method in order to obtain the paired value. 
            There is also no additional check performed (except that the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> must exist and must have a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of value <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/>).
            Setting this member if <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.IsSetAsContinuousController"/> will in such case also modify this short-message as well as the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/>!</para>
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/>.</para>
            <para>Note: Some ControlChange messages might actually use two short messages (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>) to support paired values with a higher resolution (16384 instead of 128 values).
            In such case two messages will be send, where one contains the the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte and the other on the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.</para>
            <para>For this special case it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last message.</para>
            <para>You might use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)"/>, <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            <para>To access the controller number using this value access the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> or <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerType"/> property.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Data3">
            <summary>
            Gets or Sets the MIDI data byte 3.
            </summary>
            <remarks>This member is only used, if the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.None"/>,
            for all recognized <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/>s the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data3"/> byte is not used and has a default value of 0!
            So it is here just for completeness and will typically never be used.</remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Timespan">
            <summary>
            Gets or Sets the time that the message was received by the input device driver. The time stamp is specified as milliseconds, beginning at zero when the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/> function was called.
            </summary>
            <remarks>The <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Timespan"/> and the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Timestamp"/> members can be used in exchange and will express the same time stamp..</remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Timestamp">
            <summary>
            Gets or Sets the time that the message was received by the input device driver. The time stamp is specified in milliseconds, beginning at zero when the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/> function was called.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.TimestampAsIntPtr">
            <summary>
            Gets or Sets the time span value (typically the param2 of a Midi message).
            </summary>
            <remarks>See <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Timestamp"/> for details (uses the same value as <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Timestamp"/> but represented as an IntPtr).</remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Message">
            <summary>
            Gets or Sets the constructed Midi message value.
            </summary>
            <remarks>If a MIDI method requires an IntPtr instead on an Int32 value, please use the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.MessageAsIntPtr"/> property.
            <para>This property will get or set all relevant bytes: <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/>, <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/>, <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> and <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data3"/>.</para>
            </remarks>
            <example>
            Sending a short message:
            <code lang="C#">
            // construct a message
            MidiShortMessage msg = new MidiShortMessage(MIDIStatus.NoteOn, channel, note, velocity, 0, 0);
            // send the message
            int result = MIDI_OutShortMsg(handle, msg.Message);
            </code>
            <code lang="VB">
            ' construct a message
            Dim msg As New MidiShortMessage(MIDIStatus.NoteOn, channel, note, velocity, 0, 0)
            ' send the message
            Dim result As Integer = MIDI_OutShortMsg(handle, msg.Message)
            </code>
            </example>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.MessageAsIntPtr">
            <summary>
            Gets or Sets the constructed Midi message value (typically the param1 of a Midi message).
            </summary>
            <remarks>See <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Message"/> for details (uses the same value as <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Message"/> but represented as an IntPtr).</remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.MessageType">
            <summary>
            Gets or Sets the Midi message type (one of the <see cref="T:radio42.Multimedia.Midi.MIDIMessageType"/> values) from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/> byte.
            </summary>
            <remarks>Here is an overview on how the messaage type is mapped evaluating the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/> byte:
            <para>Channel Message: 0x8n - 0xEn (n = any value between 0 and F). Any NoteOff, NoteOn, Aftertouch, ControlChange, ProgramChange, ChannelPressure and PitchBend message.</para>
            <para>SystemCommon Message: hex F0 (SystemMsgs), F1 (MidiTimeCode), F2 (SongPosition), F3 (SongSelect), F6 (TuneRequest) and F7 (EOX).</para>
            <para>SystemRealtime Message: F8 (Clock), F9 (Tick), FA (Start), FB (Continue), FC (Stop), FE (ActiveSense) and FF (Reset).</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType">
            <summary>
            Gets or Sets the Midi status type (one of the <see cref="T:radio42.Multimedia.Midi.MIDIStatus"/> values) from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/> byte.
            </summary>
            <remarks>The status type is kept in the 4 upper bits of the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/> byte 
            and is also often called the type of the message (e.g. NoteOn, NoteOff, Aftertouch, ControlChange etc.).
            <para>If no usefull status type could be evaluated <see cref="F:radio42.Multimedia.Midi.MIDIStatus.None"/> will be returned (which might not reflect the actual status byte value, e.g. if the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/> has a value of 0xFD there will be no useful status type associated).</para>
            <para>When assigning a status type the following will apply: If the new value is 0xF0 or above, the full <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/> byte will be set with the new value, else only the 4 upper bits will be set with the new value.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Channel">
            <summary>
            Gets or Sets the channel number from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/> byte.
            </summary>
            <remarks>The channel number is kept in the 4 lower bits of the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/> byte 
            and is also often just called the channel of the message (between 0 and 15).
            <para>When assigning a channel number only the lower 4-bit of the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Status"/> byte will be set.</para>
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.MessageType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIMessageType.Channel"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Note">
            <summary>
            Gets or Sets the Midi note number from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            </summary>
            <remarks>The note number ranges from 0 to 127.
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.NoteOn"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.NoteOff"/> or <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Aftertouch"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.NoteString">
            <summary>
            Gets the Midi note from the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte as a string representation.
            </summary>
            <remarks>Exmple is: "C-1" or "DSharp0" or "A4". The latter number represents the octave (i.e. the '-1', '0' resp. '4').
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.NoteOn"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.NoteOff"/> or <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Aftertouch"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Velocity">
            <summary>
            Gets or Sets the velocity (key pressure speed) from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.
            </summary>
            <remarks>The velocity ranges from 0 to 127.
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.NoteOn"/> or <see cref="F:radio42.Multimedia.Midi.MIDIStatus.NoteOff"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Aftertouch">
            <summary>
            Gets or Sets the polyphonic aftertouch (polyphonic key pressure) from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.
            </summary>
            <remarks>The polyphonic aftertouch (or key pressure) ranges from 0 (no pressure) to 127 (full pressure).
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Aftertouch"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.ChannelPressure">
            <summary>
            Gets or Sets the channel pressure (channel aftertouch) from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            </summary>
            <remarks>The channel pressure ranges from 0 (no pressure) to 127 (full pressure).
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ChannelPressure"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Program">
            <summary>
            Gets or Sets the changed program number from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            </summary>
            <remarks>The program change number ranges from 0 to 127.
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ProgramChange"/>.</para>
            <para>If multiple banks do exist a <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ProgramChange"/> command will select a new program number from the current bank only.
            A different bank will be selected with two sub-sequent <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> commands. This will also be called a Bank-Select-Command.
            For this special case it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last message.</para>
            <para>You might use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)"/>, <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.PitchBend">
            <summary>
            Gets or Sets the pitch bend value from/to <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> and <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> as a combined value.
            </summary>
            <remarks>The pitch bend value ranges from 0 to 16383 (128*128 values).
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.PitchBend"/>.</para>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte will contain the LSB value (single steps) and the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte the MSB value (128th steps) both ranging from 0 to 128.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Controller">
            <summary>
            Gets or Sets the controller number from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            </summary>
            <remarks>The controller number ranges from 0 to 127.
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/>.</para>
            <para>Note: Some ControlChange messages might actually use two short messages (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>) to support paired values with a higher resolution (16384 instead of 128 values).
            In such case two messages will be send, where one contains the the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte and the other on the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.</para>
            <para>For this special case it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last message.</para>
            <para>You might use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)"/>, <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            <para>To access the single value assigned to the controler access the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue"/> property.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerType">
            <summary>
            Gets or Sets the controller type (one of the <see cref="T:radio42.Multimedia.Midi.MIDIControllerType"/> values) from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            </summary>
            <remarks>
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/>.</para>
            <para>Note: Some ControlChange messages might actually use two short messages (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>) to support paired values with a higher resolution (16384 instead of 128 values).
            In such case two messages will be send, where one contains the the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte and the other on the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.</para>
            <para>For this special case it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last message.</para>
            <para>You might use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)"/>, <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            <para>To access the single value assigned to the controler access the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue"/> property.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.ThisIsMSB">
            <summary>
            Returns <see langword="true"/>, if this short-message contains the MSB (coarse) <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue"/> and the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> the LSB (fine) value - only in case the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.IsSetAsContinuousController"/> value is set to <see langword="true"/>.
            </summary>
            <remarks>In case the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.IsSetAsContinuousController"/> value returns <see langword="false"/> this property has no meaning!</remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousIsMSB">
            <summary>
            Returns <see langword="true"/>, if the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> contains the MSB (coarse) <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue"/> and this message the LSB (fine) value - only in case the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.IsSetAsContinuousController"/> value is set to <see langword="true"/>.
            </summary>
            <remarks>In case the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.IsSetAsContinuousController"/> value returns <see langword="false"/> this property has no meaning!</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.SetContinuousController(System.Boolean,System.Boolean)">
            <summary>
            Defines that this message is related to a continuous controller.
            </summary>
            <param name="thisIsMSB">Set to <see langword="true"/>, if this message contains the MSB (coarse) controller value - else this message contains the LSB (fine) controller value.</param>
            <param name="previousIsMSB">Set to <see langword="true"/>, if the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> contains the MSB (coarse) controller value - else the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> contains the LSB (fine) controller value.</param>
            <remarks>If you set both parameters to <see langword="false"/> the message is not related to a continuous controller (default).
            <para>In addition this message is only set to be a continuous controller message, if the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> exists and it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> also has a value of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> and the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Channel"/> is the same.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.IsSetAsContinuousController">
            <summary>
            Gets, if this message was manually set to be a continuous controller message.
            </summary>
            <remarks>
            <para>This message is only a continuous controller message, if set via <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.SetContinuousController(System.Boolean,System.Boolean)"/> and if the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> exists and it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> also has a value of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> and the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Channel"/> is the same.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue">
            <summary>
            Gets or Sets the controller value from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte (and optionally from the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/>).
            </summary>
            <remarks>The controller value normally ranges from 0 to 127.
            But if the controller is a continuous controller, this simply means that it's value can be set to any value within the range from 0 to 16383 (for 14-bit coarse/fine resolution).
            <para>To set a continuous controllers use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.SetContinuousController(System.Boolean,System.Boolean)"/>. By default this is never set.
            In such case this property will return the combined controller value by pairing this contoller value with the one from the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/>.
            Note: You must explicitly call the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.SetContinuousController(System.Boolean,System.Boolean)"/> method in order to obtain the paired value. 
            There is also no additional check performed (except that the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> must exist and must have a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of value <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/>).
            Setting this member if <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.IsSetAsContinuousController"/> will in such case also modify this short-message as well as the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/>!</para>
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/>.</para>
            <para>Note: Some ControlChange messages might actually use two short messages (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>) to support paired values with a higher resolution (16384 instead of 128 values).
            In such case two messages will be send, where one contains the the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte and the other on the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.</para>
            <para>For this special case it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last message.</para>
            <para>You might use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)"/>, <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            <para>To access the controller number using this value access the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> or <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerType"/> property.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.TimeCodeType">
            <summary>
            Gets or Sets the Midi Time Code type (one of the <see cref="T:radio42.Multimedia.Midi.MIDIMTCType"/> values) from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            </summary>
            <remarks>
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.MidiTimeCode"/>.</para>
            <para>For more details about the Midi Time Code (MTC) representation see <see cref="T:radio42.Multimedia.Midi.MIDIMTCType"/>.</para>
            <para>Setting this property will only modify the upper half of the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.TimeCodeValue">
            <summary>
            Gets or Sets the Midi Time Code value (partial) from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            </summary>
            <remarks>
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.MidiTimeCode"/>.</para>
            <para>For more details about the Midi Time Code (MTC) representation see <see cref="T:radio42.Multimedia.Midi.MIDIMTCType"/>.</para>
            <para>Setting this property will only modify the lower half of the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.SongPosition">
            <summary>
            Gets or Sets the song position value from/to <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> and <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> as a combined value.
            </summary>
            <remarks>The song position value ranges from 0 to 16383 (128*128 values).
            <para>Some master device that controls sequence playback sends this message to force a slave device to cue the playback to a certain point in the song/sequence. In other words, this message sets the device's "Song Position". This message doesn't actually start the playback. It just sets up the device to be "ready to play" at a particular point in the song.</para>
            <para>This value is the also called the MIDI Beat upon which to start the song. Songs are always assumed to start on a MIDI Beat of 0. Each MIDI Beat spans 6 MIDI Clocks. In other words, each MIDI Beat is a 16th note (since there are 24 MIDI Clocks in a quarter note).</para>
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.SongPosition"/>.</para>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte will contain the LSB value (single steps) and the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte the MSB value (128th steps) both ranging from 0 to 128.</para>
            <para>Example: 
            If a Song Position value of 8 is received, then a sequencer (or drum box) should cue playback to the third quarter note of the song. (8 MIDI beats * 6 MIDI clocks per MIDI beat = 48 MIDI Clocks. Since there are 24 MIDI Clocks in a quarter note, the first quarter occurs on a time of 0 MIDI Clocks, the second quarter note occurs upon the 24th MIDI Clock, and the third quarter note occurs on the 48th MIDI Clock).</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Song">
            <summary>
            Gets or Sets the song number from/to the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            </summary>
            <remarks>The song number ranges from 0 to 127.
            <para>This property should only be used when <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.SongSelect"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiShortMessage.Data">
            <summary>
            Gets or Sets the combined <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/>, <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> and possibly <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data3"/> values as an integer.
            </summary>
            <remarks>The full data value ranges from 0 to 16383 (128*128 values, default) resp. from 0 to 2097151 (128*128*128 values, in case of <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.None"/>).
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte will contain the LSB value (single steps), the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte the MSB1 value (128th steps) and the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data3"/> byte the MSB2 value (16384th steps) all ranging from 0 to 127.</para>
            <para>Only in case that the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.None"/> the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data3"/> byte will be used, since for all recognized <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/>s the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data3"/> byte will not be used and set to 0 (zero).</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)">
            <summary>
            Returns a combined paired value from a MSB and a LSB data byte.
            </summary>
            <param name="dataMSB">The MSB (most significant) data byte value.</param>
            <param name="dataLSB">The LSB (least significant) data byte value.</param>
            <returns>The combined data value ranging from 0 to 16383 (128*128 values).</returns>
            <remarks>
            <para>The <paramref name="dataLSB"/> byte will contain the lower 7-bit value (single steps) and the <paramref name="dataMSB"/> byte the upper 7-bit value (128th steps) both ranging from 0 to 128.</para>
            <para>Some Midi data messages might actually use two sub-sequent short messages to construct a paired message representing a single value range (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> with a <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>).
            This to support paired values with a higher resolution (16384 instead of 128 values). The same might apply the the controller value itself.
            In such case two short messages will be send, where one contains the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> or <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte and the other message contains the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> or <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            Typically the messages with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> and with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 0 and 31 (MSB) are paired with a message of a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 32 and 63 (LSB).
            But also a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 98 (LSB) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 99 (MSB) as well as a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 100 (LSB) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 101 (MSB).
            Other pairs might be hardware specific.</para>
            <para>So it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last message.</para>
            <para>The resulting combined data value will be constructed like this: dataMSB=0xxxxxxx, dataLSB=0yyyyyyy = paired=00xxxxxxxyyyyyyy.</para>
            <para>You might also use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)">
            <summary>
            Returns a combined paired <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> value from a MSB and a LSB <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>.
            </summary>
            <param name="msgMSB">The <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> containing the MSB (most significant) <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte value.</param>
            <param name="msgLSB">The <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>containing the LSB (least significant) <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte value.</param>
            <returns>The combined data value ranging from 0 to 16383 (128*128 values).</returns>
            <remarks>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte of the <paramref name="msgLSB"/> message will contain the lower 7-bit value (single steps) and the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte of the <paramref name="msgMSB"/> message the upper 7-bit value (128th steps) both ranging from 0 to 128.</para>
            <para>Some Midi data messages might actually use two sub-sequent short messages to construct a paired message representing a single value range (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> with a <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>).
            This to support paired values with a higher resolution (16384 instead of 128 values). The same might apply the the controller value itself.
            In such case two short messages will be send, where one contains the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte and the other message contains the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            Typically the messages with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> and with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 0 and 31 (MSB) are paired with a message of a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 32 and 63 (LSB).
            But also a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 98 (LSB) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 99 (MSB) as well as a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 100 (LSB) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 101 (MSB).
            Other pairs might be hardware specific.</para>
            <para>So it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last message.</para>
            <para>The resulting combined data value will be constructed like this: dataMSB=0xxxxxxx, dataLSB=0yyyyyyy = paired=00xxxxxxxyyyyyyy.</para>
            <para>You might also use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData2(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)">
            <summary>
            Returns a combined paired <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> value from a MSB and a LSB <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>.
            </summary>
            <param name="msgMSB">The <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> containing the MSB (most significant) <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte value.</param>
            <param name="msgLSB">The <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>containing the LSB (least significant) <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte value.</param>
            <returns>The combined data value ranging from 0 to 16383 (128*128 values).</returns>
            <remarks>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte of the <paramref name="msgLSB"/> message will contain the lower 7-bit value (single steps) and the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte of the <paramref name="msgMSB"/> message the upper 7-bit value (128th steps) both ranging from 0 to 128.</para>
            <para>Some Midi data messages might actually use two sub-sequent short messages to construct a paired message representing a single value range (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> with a <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>).
            This to support paired values with a higher resolution (16384 instead of 128 values). The same might apply the the controller value itself.
            In such case two short messages will be send, where one contains the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte and the other message contains the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.
            Typically the messages with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> and with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 0 and 31 (MSB) are paired with a message of a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 32 and 63 (LSB).
            But also a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 98 (LSB) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 99 (MSB) as well as a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 100 (LSB) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 101 (MSB).
            Other pairs might be hardware specific.</para>
            <para>So it might be useful to keep in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> handler always the current and the last message.</para>
            <para>The resulting combined data value will be constructed like this: dataMSB=0xxxxxxx, dataLSB=0yyyyyyy = paired=00xxxxxxxyyyyyyy.</para>
            <para>You might also use the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData1(radio42.Multimedia.Midi.MidiShortMessage,radio42.Multimedia.Midi.MidiShortMessage)"/> resp. the <see cref="M:radio42.Multimedia.Midi.MidiShortMessage.GetPairedData(System.Byte,System.Byte)"/> method to retrieve a combined value from two short messages resp. two data value.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.BuildMessage(radio42.Multimedia.Midi.MIDIStatus,System.Byte,System.Byte,System.Byte,System.Int64)">
            <summary>
            Constructs a new Midi data message.
            </summary>
            <param name="status">The <see cref="T:radio42.Multimedia.Midi.MIDIStatus"/> status to use.</param>
            <param name="channel">The Midi channel number to use (0 to 15).</param>
            <param name="data1">The data 1 value to use.</param>
            <param name="data2">The data 2 value to use.</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0 if not applicable).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.BuildMessage(System.Byte,System.Byte,System.Byte,System.Byte,System.Int64)">
            <summary>
            Constructs a new Midi data message.
            </summary>
            <param name="status">The Midi status byte value to use.</param>
            <param name="data1">The data 1 value to use.</param>
            <param name="data2">The data 2 value to use.</param>
            <param name="data3">The data 3 value to use (typically never used).</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0 if not applicable).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.BuildMessage(radio42.Multimedia.Midi.MIDIStatus,System.Byte,System.Int32,System.Int64)">
            <summary>
            Constructs a new Midi data message.
            </summary>
            <param name="status">The <see cref="T:radio42.Multimedia.Midi.MIDIStatus"/> status to use.</param>
            <param name="channel">The Midi channel number to use (0 to 15).</param>
            <param name="data">The data value to use (autofils Data1, Data2 and optionally Data3).</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0 if not applicable).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.BuildMessage(System.Byte,System.Int32,System.Int64)">
            <summary>
            Constructs a new Midi data message.
            </summary>
            <param name="status">The Midi status byte value to use.</param>
            <param name="data">The data value to use (autofils Data1, Data2 and optionally Data3).</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0 if not applicable).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.BuildMessage(System.Int32,System.Int64)">
            <summary>
            Constructs a new Midi data message.
            </summary>
            <param name="message">The message value to use.</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0 if not applicable).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.BuildMessage(System.Int64,System.Int64)">
            <summary>
            Constructs a new Midi data message.
            </summary>
            <param name="message">The message value to use.</param>
            <param name="timestamp">The time stamp to use (expressed in milliseconds or 0 if not applicable).</param>
            <remarks>You might use this to construct for example a channel message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.ToString">
            <summary>
            Returns the string representation of the Midi short message.
            </summary>
            <returns>The string representing the Midi short message (same as ToString("G")).</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.ToString(System.String)">
            <summary>
            Returns the string representation of the Midi short message.
            </summary>
            <param name="format">The format to use (one of the following):
            <list type="table">
            <item><term>"G"</term><description>Combi-Format: Timestamp, Type, Channel, Status, Data in full text - same as "{T}\t{M} {C}\t{S}\t{D}" (for Channel messages) resp. "{T}\t{M}\t{S}\t{D}" (for other messages).</description></item>
            <item><term>"g"</term><description>Combi-Format: Timestamp, Type, Channel, Status, Data as numerical values - same as "{t}\t{m} {C}\t{s}\t{d}" (for Channel messages) resp. "{t}\t{m}\t{s}\t{d}" (for other messages).</description></item>
            <item><term>"X"</term><description>Combi-Format: Timespan and Message as hexadecimal values (big hex) - same as "{U} {A} {H}".</description></item>
            <item><term>"x"</term><description>Combi-Format: Timespan and Message as hexadecimal values (small hex) - same as "{u} {a} {h}".</description></item>
            <item><term>"Y"</term><description>Combi-Format: Message as hexadecimal values (big hex) - same as "{A} {H}".</description></item>
            <item><term>"y"</term><description>Combi-Format: Message as hexadecimal values (small hex) - same as "{a} {h}".</description></item>
            <item><term>"T"</term><description>Timespan only.</description></item>
            <item><term>"t"</term><description>Timestamp only.</description></item>
            <item><term>"U"</term><description>Timestamp only as hexadecimal values (big hex).</description></item>
            <item><term>"u"</term><description>Timestamp only as hexadecimal values (small hex).</description></item>
            <item><term>"M"</term><description>MessageType only in full text.</description></item>
            <item><term>"m"</term><description>MessageType as numerical values.</description></item>
            <item><term>"S"</term><description>StatusType only in full text.</description></item>
            <item><term>"s"</term><description>StatusType only as numerical value.</description></item>
            <item><term>"A"</term><description>Status only as hexadecimal values (big hex).</description></item>
            <item><term>"a"</term><description>Status only as hexadecimal values (small hex).</description></item>
            <item><term>"C"</term><description>Channel only as numerical value.</description></item>
            <item><term>"D"</term><description>Data only in full text.</description></item>
            <item><term>"d"</term><description>Data only as numerical value.</description></item>
            <item><term>"H"</term><description>Data only as hexadecimal values (big hex).</description></item>
            <item><term>"h"</term><description>Data only as hexadecimal values (small hex).</description></item>
            </list>
            <para>You might also combine the single values into a full format string when enclosed in brackets (e.g. "Time={T}: Msg={M}, Chan={C}, Status={S}, Data={D}").
            In such case all the format values enclosed in brackets will be replaced by the above value representations. This allows you to format your individual message string.</para>
            </param>
            <returns>The string representing the Midi short message.</returns>
            <example>
            <code lang="C#">
            public void MyMidiProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              if (msg == MIDIMessage.MIM_DATA)
              {
                // process the message...
                MidiShortMessage shortMsg = new MidiShortMessage(param1, param2);
                if (shortMsg.MessageType == MIDIMessageType.Channel)
                  Console.WriteLine(shortMsg.ToString("Time={T}: Msg={M}, Chan={C}, Status={S}, {D}"));
                else if (shortMsg.MessageType == MIDIMessageType.SystemCommon)
                  Console.WriteLine(shortMsg.ToString("Time={T}: Msg={M}, Status={S}, {D}"));
                else
                  Console.WriteLine(shortMsg.ToString("G"));
                ...
              }
              ...
            }
            </code>
            <code lang="VB">
            Public Sub MyMidiProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              If msg = MIDIMessage.MIM_DATA Then
                ' process the message...
                Dim shortMsg As New MidiShortMessage(param1, param2)
                If shortMsg.MessageType = MIDIMessageType.Channel Then
                  Console.WriteLine(shortMsg.ToString("Time={T}: Msg={M}, Chan={C}, Status={S}, {D}"))
                Else
                  If shortMsg.MessageType = MIDIMessageType.SystemCommon Then
                    Console.WriteLine(shortMsg.ToString("Time={T}: Msg={M}, Status={S}, {D}"))
                  Else
                    Console.WriteLine(shortMsg.ToString("G"))
                  End If
                End If
                ...
              End If 
              ...
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiShortMessage.ToString(System.String,System.IFormatProvider)">
            <summary>
            Returns the string representation of the Midi short message.
            </summary>
            <param name="format">The format to use (one of the following):
            <list type="table">
            <item><term>"G"</term><description>Combi-Format: Timestamp, Type, Channel, Status, Data in full text - same as "{T}\t{M} {C}\t{S}\t{D}" (for Channel messages) resp. "{T}\t{M}\t{S}\t{D}" (for other messages).</description></item>
            <item><term>"g"</term><description>Combi-Format: Timestamp, Type, Channel, Status, Data as numerical values - same as "{t}\t{m} {C}\t{s}\t{d}" (for Channel messages) resp. "{t}\t{m}\t{s}\t{d}" (for other messages).</description></item>
            <item><term>"X"</term><description>Combi-Format: Timespan and Message as hexadecimal values (big hex) - same as "{U} {A} {H}".</description></item>
            <item><term>"x"</term><description>Combi-Format: Timespan and Message as hexadecimal values (small hex) - same as "{u} {a} {h}".</description></item>
            <item><term>"Y"</term><description>Combi-Format: Message as hexadecimal values (big hex) - same as "{A} {H}".</description></item>
            <item><term>"y"</term><description>Combi-Format: Message as hexadecimal values (small hex) - same as "{a} {h}".</description></item>
            <item><term>"T"</term><description>Timespan only.</description></item>
            <item><term>"t"</term><description>Timestamp only.</description></item>
            <item><term>"U"</term><description>Timestamp only as hexadecimal values (big hex).</description></item>
            <item><term>"u"</term><description>Timestamp only as hexadecimal values (small hex).</description></item>
            <item><term>"M"</term><description>MessageType only in full text.</description></item>
            <item><term>"m"</term><description>MessageType as numerical values.</description></item>
            <item><term>"S"</term><description>StatusType only in full text.</description></item>
            <item><term>"s"</term><description>StatusType only as numerical value.</description></item>
            <item><term>"A"</term><description>Status only as hexadecimal values (big hex).</description></item>
            <item><term>"a"</term><description>Status only as hexadecimal values (small hex).</description></item>
            <item><term>"C"</term><description>Channel only as numerical value.</description></item>
            <item><term>"D"</term><description>Data only in full text.</description></item>
            <item><term>"d"</term><description>Data only as numerical value.</description></item>
            <item><term>"H"</term><description>Data only as hexadecimal values (big hex).</description></item>
            <item><term>"h"</term><description>Data only as hexadecimal values (small hex).</description></item>
            </list>
            <para>You might also combine the single values into a full format string when enclosed in brackets (e.g. "Time={T}: Msg={M}, Chan={C}, Status={S}, Data={D}").
            In such case all the format values enclosed in brackets will be replaced by the above value representations. This allows you to format your individual message string.</para>
            </param>
            <param name="formatProvider">The <see cref="T:System.IFormatProvider"/> which should be used or <see langword="null"/> if the default schema values should be used.
            </param>
            <returns>The string representing the Midi short message.</returns>
            <example>
            <code lang="C#">
            public void MyMidiProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              if (msg == MIDIMessage.MIM_DATA)
              {
                // process the message...
                MidiShortMessage shortMsg = new MidiShortMessage(param1, param2);
                if (shortMsg.MessageType == MIDIMessageType.Channel)
                  Console.WriteLine(shortMsg.ToString("Time={T}: Msg={M}, Chan={C}, Status={S}, {D}"));
                else if (shortMsg.MessageType == MIDIMessageType.SystemCommon)
                  Console.WriteLine(shortMsg.ToString("Time={T}: Msg={M}, Status={S}, {D}"));
                else
                  Console.WriteLine(shortMsg.ToString("G"));
                ...
              }
              ...
            }
            </code>
            <code lang="VB">
            Public Sub MyMidiProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              If msg = MIDIMessage.MIM_DATA Then
                ' process the message...
                Dim shortMsg As New MidiShortMessage(param1, param2)
                If shortMsg.MessageType = MIDIMessageType.Channel Then
                  Console.WriteLine(shortMsg.ToString("Time={T}: Msg={M}, Chan={C}, Status={S}, {D}"))
                Else
                  If shortMsg.MessageType = MIDIMessageType.SystemCommon Then
                    Console.WriteLine(shortMsg.ToString("Time={T}: Msg={M}, Status={S}, {D}"))
                  Else
                    Console.WriteLine(shortMsg.ToString("G"))
                  End If
                End If
                ...
              End If 
              ...
            End Sub
            </code>
            </example>
        </member>
        <member name="T:radio42.Multimedia.Midi.MidiSysExMessage">
            <summary>
            This class represents a Midi system-exclusive message as for example received in a <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> message of a <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/>
            or as being used with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> and returned back in the <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/> with the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MOM_DONE"/> message.
            </summary>
            <remarks>You might use the class to pack (encode, construct) or unpack (decode) any Midi system-exclusive message.
            <para>System-Exclusive message use a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure as the transport vehicle between devices. Internally a <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer needs to be prepared when sending or providing the buffer to a device. When the device finishes with the message processing you will be notified and you'll need to unprepare the buffer.</para>
            <para>Sending system-exclusive messages to an output device:</para>
            <para>Use this class with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> method to send a message to an output device.
            Beforehand use the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> method to construct your message buffer. You might then use the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite(System.Int32@,System.Byte)"/> methods to write data to the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer. When done call the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> method to prepare the data buffer and make it ready to be send to the device. Once prepared the data buffer can not be changed anymore.
            Finally use the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageAsIntPtr"/> property in the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> call to get the pointer to the constructed and prepared <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure.
            After sending the message make sure to capture the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MOM_DONE"/> message in your <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/> in order to unprepare the data buffer. This is actually automatically being done within the constructor of this class when using the overload taking an IntPtr argument.</para>
            <para>Receiving system-exclusive messages at an input device:</para>
            <para>Use this class with the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> message of a <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> to decode the received message.
            Before you can receive system-exclusive messages you must constantly provide data buffers to the device (which will then be filled with data by the device and returned to your input). So you might use the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> method to create such empty buffer and then call <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> to prepare the data buffer and make it ready to be send to the device. Once prepared the data buffer can not be changed anymore.
            Finally use the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageAsIntPtr"/> property in the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> call to get the pointer to the constructed and prepared <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure and provide the buffer to the device.
            After providing the buffer make sure to capture the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> resp. <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR"/> message in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> in order to unprepare the data buffer. This is actually automatically being done within the constructor of this class when using the overload taking an IntPtr argument.
            You might use the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead8(System.Int32@)"/>, <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead16(System.Int32@)"/>, <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead24(System.Int32@)"/> etc. methods to fianlly read data from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer you received and interpret it's content accordingly.</para>
            <para>The <see cref="T:radio42.Multimedia.Midi.MidiInputDevice"/> and <see cref="T:radio42.Multimedia.Midi.MidiOutputDevice"/> already handle most of these tasks (e.g. preparing and unpreparing of system-exclusive messages) for you.</para>
            </remarks>
            <example>
            Sending system-exclusive messages to an output device:
            <code lang="C#">
            private MIDIOUTPROC _midiProc;
            private IntPtr _midiOutHandle;
            ...
            // Open the Midi device #0
            _midiProc = new MIDIOUTPROC(MyMidiOutProc);
            MIDIError ret = Midi.MIDI_OutOpen(ref _midiOutHandle, 0, _midiProc, 0);
            if (ret == MIDIError.MIDI_OK)
            {
              // output ready
            }
            ...
            private void SendSysExBuffer(IntPtr handle, byte[] data)
            {
              MidiSysExMessage msg = new MidiSysExMessage(false, handle);
              msg.CreateBuffer(data);
              if (msg.Prepare())
              {
                // if the message was perpared successfully
                // send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(handle, msg.MessageAsIntPtr);
              }
            }
            
            public void MyMidiOutProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              // handle all Midi messages here
              if (msg == MIDIMessage.MOM_DONE)
              {
                // process the message...
                // param1 will contain the pointer to the MIDI_HEADER
                MidiSysExMessage sysexMsg = new MidiSysExMessage(false, handle, param1);
                // the internal header is already unprepared here
                // so you can still use the data...
                Console.WriteLine( sysexMsg.ToString() );
              }
              ...
            }
            </code>
            <code lang="VB">
            Private _midiProc As MIDIOUTPROC
            Private _midiOutHandle As IntPtr
            ...
            ' Open the Midi device #0
            _midiProc = New MIDIOUTPROC(AddressOf MyMidiOutProc)
            Dim ret As MIDIError = Midi.MIDI_OutOpen(_midiOutHandle, 0, _midiProc, 0)
            If ret = MIDIError.MIDI_OK Then
              ' output ready
            End If
            ...
            Private Sub SendSysExBuffer(handle As IntPtr, data() As Byte)
              Dim msg As New MidiSysExMessage(False, handle)
              msg.CreateBuffer(data)
              If msg.Prepare() Then
                ' if the message was perpared successfully
                ' send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(handle, msg.MessageAsIntPtr)
              End If
            End Sub
            
            Public Sub MyMidiOutProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              ' handle all Midi messages here
              If msg = MIDIMessage.MOM_DONE Then
                ' process the message...
                ' param1 will contain the pointer to the MIDI_HEADER
                Dim sysexMsg As New MidiSysExMessage(False, handle, param1)
                ' the internal header is already unprepared here
                ' so you can still use the data...
                Console.WriteLine(sysexMsg.ToString())
              End If
            End Sub
            </code>
            Receiving system-exclusive messages at an input device:
            <code lang="C#">
            private MIDIINPROC _midiProc;
            private IntPtr _midiInHandle;
            ...
            // Open the Midi device #0
            _midiProc = new MIDIINPROC(MyMidiInProc);
            MIDIError ret = Midi.MIDI_InOpen(ref _midiInHandle, 0, _midiProc, IntPtr.Zero, MIDIFlags.MIDI_IO_STATUS);
            if (ret == MIDIError.MIDI_OK)
            {
              // already supply the device with 2 buffers (each 1K)
              AddSysExBuffer(_midiInHandle, 1024);
              AddSysExBuffer(_midiInHandle, 1024);
              // Start the device
              ret = Midi.MIDI_InStart(_midiInHandle);
            }
            ...
            // prepare receiving system-exclusive messages
            private void AddSysExBuffer(IntPtr handle, int size)
            {
              MidiSysExMessage msg = new MidiSysExMessage(true, handle);
              msg.CreateBuffer(size);
              if (msg.Prepare())
              {
                // Add the buffer to the InputDevice.
                Midi.MIDI_InAddBuffer(handle, msg.MessageAsIntPtr);
              }
            }
            
            MidiSysExMessage _sysexMsg = null;
            public void MyMidiInProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              if (msg == MIDIMessage.MIM_LONGDATA || msg == MIDIMessage.MIM_LONGERROR)
              {
                // process the sysex message...
                // param1 will contain the pointer to the MIDI_HEADER
                _sysexMsg = new MidiSysExMessage(true, handle, param1, _sysexMsg);
                if (_sysexMsg.IsDone)
                {
                  // use it...
                  Console.WriteLine( sysexMsg.ToString() );
                }
                ...
                // add a new buffer
                // since we should constantly provide new buffers until we finished recording
                AddSysExBuffer(handle, 1024);
              }
              ...
            }
            </code>
            <code lang="VB">
            Private _midiProc As MIDIINPROC
            Private _midiInHandle As IntPtr
            ...
            ' Open the Midi device #0
            _midiProc = New MIDIINPROC(AddressOf MyMidiInProc)
            Dim ret As MIDIError = Midi.MIDI_InOpen(_midiInHandle, 0, _midiProc, IntPtr.Zero, MIDIFlags.MIDI_IO_STATUS)
            If ret = MIDIError.MIDI_OK Then
              ' already supply the device with 2 buffers (each 1K)
              AddSysExBuffer(_midiInHandle, 1024)
              AddSysExBuffer(_midiInHandle, 1024)
              ' Start the device
              ret = Midi.MIDI_InStart(_midiInHandle)
            End If
            ...
            ' prepare receiving system-exclusive messages
            Private Sub AddSysExBuffer(handle As IntPtr, size As Integer)
              Dim msg As New MidiSysExMessage(True, handle)
              msg.CreateBuffer(size)
              If msg.Prepare() Then
                ' Add the buffer to the InputDevice.
                Midi.MIDI_InAddBuffer(handle, msg.MessageAsIntPtr)
              End If
            End Sub
            
            ' prepare sending system-exclusive messages
            Dim _sysexMsg As MidiSysExMessage = Nothing
            Public Sub MyMidiInProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              If msg = MIDIMessage.MIM_LONGDATA OrElse msg = MIDIMessage.MIM_LONGERROR Then
                ' process the sysex message...
                ' param1 will contain the pointer to the MIDI_HEADER
                _sysexMsg = New MidiSysExMessage(True, handle, param1, _sysexMsg)
                If _sysexMsg.IsDone Then
                  ' use it...
                  Console.WriteLine(sysexMsg.ToString())
                End If
                ...
                ' add a new buffer
                ' since we should constantly provide new buffers until we finished recording
                AddSysExBuffer(handle, 1024)
              End If
              ...
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.#ctor(System.Boolean,System.IntPtr)">
            <summary>
            Creates a new and empty instance of the MidiSysExMessage.
            </summary>
            <param name="input">Dealing with a Midi input device? (<see langword="true"/>=input, <see langword="false"/>=output).</param>
            <param name="handle">The handle to the MIDI device.</param>
            <remarks>You might use this one together with the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> method to construct your own Midi system-exclusive message.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.#ctor(System.Boolean,System.IntPtr,System.IntPtr)">
            <summary>
            Creates a new instance of the MidiSysExMessage from a pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/>.
            </summary>
            <param name="input">Dealing with a Midi input device? (<see langword="true"/>=input, <see langword="false"/>=output).</param>
            <param name="handle">The handle to the MIDI device.</param>
            <param name="headerPtr">A pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure to use with this system-exclusive message.</param>
            <remarks>
            <para>You might use this constuctor in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> or <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/> when receiving a <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/>, <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR"/> resp. <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MOM_DONE"/> message with the 'prarm1' value.</para>
            <para>Calling this constructor with a valid pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure will automatically unprepare the header (using <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/>)!
            However, that data of the header will first be copied to this class so it is still accessable.</para>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer will only be set, if the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.IsDone"/> flag was set - meaning the Midi device finished with the buffer.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.#ctor(System.Boolean,System.IntPtr,System.IntPtr,radio42.Multimedia.Midi.MidiSysExMessage)">
            <summary>
            Creates a new instance of the MidiSysExMessage from a pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> and also evaluates a previous system-exclusive message.
            </summary>
            <param name="input">Dealing with a Midi input device? (<see langword="true"/>=input, <see langword="false"/>=output).</param>
            <param name="handle">The handle to the MIDI device.</param>
            <param name="headerPtr">A pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure to use with this system-exclusive message.</param>
            <param name="previous">The previous system-exclusive message received (in order to check, if data buffers need to be concatenated).</param>
            <remarks>
            <para>You might use this constuctor in your <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> or <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/> when receiving a <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/>, <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR"/> resp. <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MOM_DONE"/> message with the 'prarm1' value.</para>
            <para>This overload ensures, that sub-sequent system-exclusive messages are automatically concatenated (if needed) until the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsDone"/> property is set to <see langword="true"/>.
            It might be the case, that an input device needs to use more than one system-exclusive message in order to complete one message. This because for input devices your application provide empty buffers of a given size to the device. If this buffer is not large enough to keep the full message multiple system-exclusive messages are used.
            The <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsDone"/> property indicates, if the current data buffer is complete and the device driver indicates that it is finished with the buffer.
            If the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsDone"/> property is set to <see langword="false"/> this would indicate, that more data is about to come and the current <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer needs to be concatenated with sub-sequent system-exclusive messages until <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsDone"/> returns <see langword="true"/>.
            This overload ensures, that the current data buffer of the <paramref name="headerPtr"/> will automatically be appended to the data buffer of the <paramref name="previous"/> data buffer if the previous buffer was not finished, so that this instance will contain the data buffer of the previous and this message.
            If the <paramref name="previous"/> buffer was already done or is <see langword="null"/> nothing will be done and only the current data buffer will be used.
            All this only applies to input devices (<see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsInput"/> should be <see langword="true"/>), since when dealing with output devices you control the amount of data to send.</para>
            <para>Calling this constructor with a valid pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure will automatically unprepare the header (using <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/>)!</para>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer will only be set, if the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.IsDone"/> flag was set - meaning the Midi device finished with the buffer.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.ID">
            <summary>
            Gets a unique overall short message ID.
            </summary>
            <remarks>The message ID is an internal counter which might be used to track the message order.
            <para>It will be incremented with every short-message created in the system. 
            So it might not be linear when using multiple devices in parallel, but it will for sure be incremental for each device, meaning each message ID generated on a device will be greater as the the previous message.</para>
            <para>But note, that the counter will be wrapped to 0 when it reaches a value of 9,223,372,036,854,775,807.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.IsInput">
            <summary>
            Dealing with a Midi input device? (<see langword="true"/>=input, <see langword="false"/>=output).
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.Device">
            <summary>
            Gets the handle to the MIDI device.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.IsPrepared">
            <summary>
            Returns <see langword="true"/>, if the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer is prepared and can not be changed anymore (else <see langword="false"/>).
            </summary>
            <remarks>Once you called the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> method the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer will be prepared and sealed. It can therefore not be changed afterwards.
            Use the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageAsIntPtr"/> to retrieve the prepared pointer to the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure ready to be used for sending and receiving system-exclusive messages.</remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageType">
            <summary>
            Gets the Midi message type (one of the <see cref="T:radio42.Multimedia.Midi.MIDIMessageType"/> values).
            </summary>
            <remarks>Actually always returns <see cref="F:radio42.Multimedia.Midi.MIDIMessageType.SystemExclusive"/>.
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageAsIntPtr">
            <summary>
            Gets the prepared pointer to the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure ready to be used with a Midi device.
            </summary>
            <remarks>
            <para>Use this property with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> method to provide a data buffer to an input device in order to receive a system-exclusive message.</para>
            <para>Use this property with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> method to send a system-exclusive message to an output device.</para>
            <para>Will return <see cref="F:System.IntPtr.Zero"/>, if the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer is not already prepared (see <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>).</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.Message">
            <summary>
            Gets the raw data buffer bytes representing the system-exclusive message.
            </summary>
            <remarks>Once you called the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> method the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer will be prepared and sealed. It can therefore not be changed afterwards.
            Use the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageAsIntPtr"/> property to retrieve a prepared pointer to the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure ready to be used with a Midi device.
            <para>You might use the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsPrepared"/> property to check, if the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer is already prepared.</para>
            <para>Use the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Validate"/> method to check, if the data buffer contains a valid system-exclusive message.</para>
            <para>To create a new system-exclusive message use the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> method to initialize the data buffer and then call the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite(System.Int32@,System.Byte)"/> methods to write the actual data to the message data buffer.</para>
            <para>To unpack and read a system-exclusive message use the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead8(System.Int32@)"/>, <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead16(System.Int32@)"/>, <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead24(System.Int32@)"/> etc. methods to retrieve data from the message data buffer (e.g. as received from an input device).</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageLength">
            <summary>
            Gets the length of the system exclusive <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.IsDone">
            <summary>
            <see langword="true"/>, if the data in the buffer is complete and contains all data (else <see langword="false"/>).
            </summary>
            <remarks>This property is not mixed up with the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.IsDone"/> property - which is set by the device driver to indicate that it is finished with the buffer and is returning it to the application.
            Instead this property validates, if the data in the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> buffer represents a full system-exclusive message starting with a <see cref="F:radio42.Multimedia.Midi.MIDIStatus.SystemMsgs"/> byte and ending with a <see cref="F:radio42.Multimedia.Midi.MIDIStatus.EOX"/> byte.
            <para>If the member is <see langword="false"/> this would indicate, that more data is about to come and this <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer should be concatenated with sub-sequent system-exclusive messages until this flag returns <see langword="true"/>.</para>
            <para>You might use the constructor overload of this class which takes an instance of the MidiSysExMessage in order to automatically concatenate system-exclusive messages.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.User">
            <summary>
            Gets the user instance data as passed with the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> method.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType">
            <summary>
            Gets the Midi status type (one of the <see cref="T:radio42.Multimedia.Midi.MIDIStatus"/> values) from the first byte of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer.
            </summary>
            <remarks>The status type is kept in the first byte of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer.
            <para>If no usefull status type could be evaluated <see cref="F:radio42.Multimedia.Midi.MIDIStatus.None"/> will be returned (this will also be the case, if no <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer is available).</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.Manufacturer">
            <summary>
            Gets the manufacturer ID from a system-exclusive message (or -32768 if not applicable or no <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer is present).
            </summary>
            <remarks>The first data byte (after the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType"/>), should be a Manufacturer's ID.
            <para>Since a midi data byte can't be greater than 0x7F, that means there would only be 127 IDs to dole out to manufacturers. Well, there are more than 127 manufacturers of MIDI products.</para>
            <para>MMA has assigned particular values of the ID byte to various manufacturers, so that a device can determine whether a SysEx message is intended for it. For example, a Roland device expects an ID byte of 0x41. If a Roland device receives a SysEx message whose ID byte isn't 0x41, then the device ignores all of the rest of the bytes up to and including the final 0xF7 which indicates that the SysEx message is finished.</para>
            <para>To accomodate a greater range of manufacturer IDs, the MMA decided to reserve a manufacturer ID of 0 for a special purpose. When you see a manufacturer ID of 0, then there will be two more data bytes after this. These two data bytes combine to make the real manufacturer ID. So, some manufacturers have IDs that are 3 bytes, where the first byte is always 0. Using this "trick", the range of unique manufacturer IDs is extended to accomodate over 16,000 MIDI manufacturers.</para>
            <para>For example, Microsoft's manufacturer ID consists of the 3 bytes 0x00 0x00 0x41. Note that the first byte is 0 to indicate that the real ID is 0x0041, but is still different than Roland's ID which is only the single byte of 0x41.</para>
            <para>To accomodate this and differentiate between single-digit manufacture IDs and three digit manufacture IDs, this member will return posivive values for single-digit manufacture IDs and negavive values for all three digit manufacture IDs.</para>
            <para>So in the above example Microsoft's ID would be returned as -65, wheres Roland's ID would be returned as 65.</para>
            <para>There are also three special manufacturer ID reserved: <see cref="F:radio42.Multimedia.Midi.MIDIManufacturer.Educational"/>, <see cref="F:radio42.Multimedia.Midi.MIDIManufacturer.RealTime"/> and <see cref="F:radio42.Multimedia.Midi.MIDIManufacturer.NonRealTime"/>. The later two relate to universal SysEx messages.</para>
            <para>Note: If no manufacturer ID is actually present in the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer, this member might anyhow return a value, since this property simply evaluates the first data bytes after the initial <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.IsUniversalRealtime">
            <summary>
            <see langword="true"/>, if the system-exclusive message contains a <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Manufacturer"/> ID of <see cref="F:radio42.Multimedia.Midi.MIDIManufacturer.RealTime"/>.
            </summary>
            <remarks>
            <para>Universal SysEx messages are SysEx messages that are not for any one particular manufacturer, but rather, meant to be utilized by all manufacturer's products. For example, many manufacturers make digital samplers. It became desirable for manufacturers to allow exchange of waveform data between each others' products. So, a standard protocol was developed called MIDI Sample Dump Standard (SDS). Of course, since waveforms typically entail large amounts of data, SysEx messages (ie, containing over a hundred bytes each) were chosen as the most suitable vehicle to transmit the data over MIDI. But, it was decided not to use a particular manufacturer's ID for these SysEx messages. So, a universal ID was created. There are actually 2 IDs dedicated to Universal SysEx messages. There's a universal ID meant for realtime messages (ie, ones that need to be responded to immediately), and one for non-realtime (ie, ones which can be processed when the device gets around to it).</para>
            <para>No particular manufacturer is ever assigned an ID consisting of the single byte 0x7F or 0x7E. These are reserved for Universal SysEx messages adopted by the MMA.</para>
            <para>A general template for these two IDs was defined. After the ID byte is a SysEx Channel byte. This could be from 0 to 127 for a total of 128 SysEx channels. So, although "normal" SysEx messages have no MIDI channel like Voice Category messages do, a Universal SysEx message can be sent on one of 128 SysEx channels. This allows the musician to set various devices to ignore certain Universal SysEx messages (ie, if the device allows the musician to set its Base SysEx Channel. Most devices just set their Base Sysex channel to the same number as the Base Channel for Voice Category messages). On the other hand, a SysEx channel of 127 is actually meant to tell the device to "disregard the channel and pay attention to this message regardless".</para>
            <para>After the SysEx channel, the next two bytes are typically Sub IDs which tell what the SysEx is for. There are several Sub IDs defined for particular messages. There is a Sub ID for a Universal SysEx message to set a device's master volume. (This is different than Volume controller which sets the volume for only one particular MIDI channel). There is a Sub ID for a Universal SysEx message to set a device's Pitch Wheel bend range. There are a couple of Sub IDs for some Universal SysEx messages to implement a waveform (sample) dump over MIDI etc.</para>
            <para>Note: This member might anyhow return a valid value, since this property simply evaluates the second data byte after the initial <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.IsUniversalNonRealtime">
            <summary>
            <see langword="true"/>, if the system-exclusive message contains a <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Manufacturer"/> ID of <see cref="F:radio42.Multimedia.Midi.MIDIManufacturer.NonRealTime"/>.
            </summary>
            <remarks>
            <para>Universal SysEx messages are SysEx messages that are not for any one particular manufacturer, but rather, meant to be utilized by all manufacturer's products. For example, many manufacturers make digital samplers. It became desirable for manufacturers to allow exchange of waveform data between each others' products. So, a standard protocol was developed called MIDI Sample Dump Standard (SDS). Of course, since waveforms typically entail large amounts of data, SysEx messages (ie, containing over a hundred bytes each) were chosen as the most suitable vehicle to transmit the data over MIDI. But, it was decided not to use a particular manufacturer's ID for these SysEx messages. So, a universal ID was created. There are actually 2 IDs dedicated to Universal SysEx messages. There's a universal ID meant for realtime messages (ie, ones that need to be responded to immediately), and one for non-realtime (ie, ones which can be processed when the device gets around to it).</para>
            <para>No particular manufacturer is ever assigned an ID consisting of the single byte 0x7F or 0x7E. These are reserved for Universal SysEx messages adopted by the MMA.</para>
            <para>A general template for these two IDs was defined. After the ID byte is a SysEx Channel byte. This could be from 0 to 127 for a total of 128 SysEx channels. So, although "normal" SysEx messages have no MIDI channel like Voice Category messages do, a Universal SysEx message can be sent on one of 128 SysEx channels. This allows the musician to set various devices to ignore certain Universal SysEx messages (ie, if the device allows the musician to set its Base SysEx Channel. Most devices just set their Base Sysex channel to the same number as the Base Channel for Voice Category messages). On the other hand, a SysEx channel of 127 is actually meant to tell the device to "disregard the channel and pay attention to this message regardless".</para>
            <para>After the SysEx channel, the next two bytes are Sub IDs which tell what the SysEx is for. There are several Sub IDs defined for particular messages. There is a Sub ID for a Universal SysEx message to set a device's master volume. (This is different than Volume controller which sets the volume for only one particular MIDI channel). There is a Sub ID for a Universal SysEx message to set a device's Pitch Wheel bend range. There are a couple of Sub IDs for some Universal SysEx messages to implement a waveform (sample) dump over MIDI etc.</para>
            <para>Note: This member might anyhow return a valid value, since this property simply evaluates the second data byte after the initial <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.UniversalChannel">
            <summary>
            Gets the Universal SysEx Channel number (or 255 on error or not present).
            </summary>
            <remarks>If dealing with a Universal SysEx message the byte after the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Manufacturer"/> byte will typically contain a SysEx Channel number.
            <para>This could be from 0 to 127 for a total of 128 SysEx channels. So, although "normal" SysEx messages have no MIDI channel like Voice Category messages do, a Universal SysEx message can be sent on one of 128 SysEx channels. This allows the musician to set various devices to ignore certain Universal SysEx messages (ie, if the device allows the musician to set its Base SysEx Channel. Most devices just set their Base Sysex channel to the same number as the Base Channel for Voice Category messages). On the other hand, a SysEx channel of 127 is actually meant to tell the device to "disregard the channel and pay attention to this message regardless".</para>
            <para>Note: If not dealing with a universal SysEx 255 will be returned. This member might anyhow return a valid value, since this property simply evaluates the second data byte after the initial <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.UniversalSubID">
            <summary>
            Gets the Universal SysEx Sub ID (or 255 on error or not present).
            </summary>
            <remarks>If dealing with a Universal SysEx message, the next two bytes are Sub IDs which tell what the SysEx is for. 
            There are several Sub IDs defined for particular messages. There is a Sub ID for a Universal SysEx message to set a device's master volume. (This is different than Volume controller which sets the volume for only one particular MIDI channel). 
            There is a Sub ID for a Universal SysEx message to set a device's Pitch Wheel bend range. There are a couple of Sub IDs for some Universal SysEx messages to implement a waveform (sample) dump over MIDI etc.
            <para>Note: If not dealing with a universal SysEx 255 will be returned. This member might anyhow return a valid value, since this property simply evaluates the third data byte after the initial <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.UniversalSubID2">
            <summary>
            Gets the Universal SysEx Sub ID (or 255 on error or not present).
            </summary>
            <remarks>If dealing with a Universal SysEx message, the next two bytes are Sub IDs which tell what the SysEx is for. 
            There are several Sub IDs defined for particular messages. There is a Sub ID for a Universal SysEx message to set a device's master volume. (This is different than Volume controller which sets the volume for only one particular MIDI channel). 
            There is a Sub ID for a Universal SysEx message to set a device's Pitch Wheel bend range. There are a couple of Sub IDs for some Universal SysEx messages to implement a waveform (sample) dump over MIDI etc.
            <para>Note: If not dealing with a universal SysEx 255 will be returned. This member might anyhow return a valid value, since this property simply evaluates the forth data byte after the initial <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.MMCDeviceID">
            <summary>
            Gets the MMC Device ID (or 255 on error or not present).
            </summary>
            <remarks>If dealing with a MIDI Machine Control (MMC) protocol the byte after the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsUniversalRealtime"/> byte will contain a device ID.
            <para>Every device which can respond to MIDI Machine Control messages should have a unique (ie, individual) ID number. For example, a hard disk recorder may have an ID of 1. A MIDI sequencer controlling the hard disk recorder's record and playback may have an ID of 2. Usually, a device will allow the user to set its individual ID, so that any conflicts between devices can be resolved. The range of allowable ID numbers is 0 to 127 inclusive. By having unique ID numbers, you can use one of these ID numbers in a System Exclusive message, and then the various devices that are all daisy-chained together via MIDI can determine which device a particular System Exclusive message is meant for. Of course, even the master controller which is being used to control the entire MIDI Machine Control network can have its own, unique ID, in case slaved controllers wish to create and send messages back to the master.</para>
            <para>NOTE: It is possible to have two (or more) devices set to the same ID number. What this means is that both devices always respond to the same MIDI Machine Control messages with that ID number, and you completely lose individual control over each. There is also no limit as to how many individual ID numbers a given device can respond to. If desired, a device can even respond to all 127 individual ID numbers, but this would be akin to a sound module that only operates in Omni mode (ie, not too useful if you have other units daisy-chained).</para>
            <para>A channel number of 127 (referred to as the "All-Call channel number") is reserved to mean "all devices respond". When a MIDI Machine Control message with a channel nummer of 127 is sent along the MIDI bus, all devices should respond to this message if appropriate (ie, if they support the particular command of that message), regardless of their individual ID numbers.</para>
            <para>Note: If not dealing with a universal real-time SysEx 255 will be returned. This member might anyhow return a valid value, since this property simply evaluates the second data byte after the initial <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiSysExMessage.MMCCommand">
            <summary>
            Gets the MMC Device ID (or 255 on error or not present).
            </summary>
            <remarks>If dealing with a MIDI Machine Control (MMC) protocol the third byte after the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsUniversalRealtime"/> byte will contain the MMC command byte.
            <para>It is typically one of the following values:
            <list type="table">
            <item><term>0x01</term><description>Stop</description></item>
            <item><term>0x02</term><description>Play</description></item>
            <item><term>0x03</term><description>Deferred Play</description></item>
            <item><term>0x04</term><description>Fast Forward</description></item>
            <item><term>0x05</term><description>Rewind</description></item>
            <item><term>0x06</term><description>Record Strobe (Punch In)</description></item>
            <item><term>0x07</term><description>Record Exit (Punch Out)</description></item>
            <item><term>0x09</term><description>Pause</description></item>
            </list>
            </para>
            <para>There are many other MMC commands existing...however you might use the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead8(System.Int32@)"/>, <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead16(System.Int32@)"/>, <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead24(System.Int32@)"/> etc. methods to read any data from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer.</para>
            <para>Note: If not dealing with a universal real-time SysEx 255 will be returned. This member might anyhow return a valid value, since this property simply evaluates the forth data byte after the initial <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.StatusType"/>.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)">
            <summary>
            Creates an empty <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer of the given size (between 2 and 65536).
            </summary>
            <param name="size">The number of byte for to buffer to use.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>Note: The method clear all data in an existing buffer.
            Calling this method on an already prepared buffer will have no effect and <see langword="false"/> will be returned.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Byte[])">
            <summary>
            Creates a <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with the given data buffer.
            </summary>
            <param name="data">The byte array to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with.</param>
            <returns><see langword="true"/> on sucess - else <see langword="false"/> will be returned (e.g. data is <see langword="null"/> or it's length is less than 2).</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare">
            <summary>
            Prepares the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageAsIntPtr"/> out of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer ready to be used with a device.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>After you have called this method the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> should NOT be changed!
            <para>Use the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageAsIntPtr"/> property to retrieve the prepared pointer to the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> which must be used to handle any system-exclusive message.</para>
            <para>Use this property with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> method to provide a data buffer to an input device in order to receive a system-exclusive message.</para>
            <para>Use this property with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> method to send a system-exclusive message to an output device.</para>
            <para>Note: There is no 'Unprepare' method present in this class, since this will be handled automatically once you received a message back from the device and (re)create an instance of this class with the param1 IntPtr.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare(System.IntPtr)">
            <summary>
            Prepares the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageAsIntPtr"/> out of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer ready to be used with a device.
            </summary>
            <param name="user">User instance data to pass to the system-exclusive message (might be later retrieved via the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.User"/> property).</param>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>After you have called this method the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> should NOT be changed!
            <para>Use the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageAsIntPtr"/> property to retrieve the prepared pointer to the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> which must be used to handle any system-exclusive message.</para>
            <para>Use this property with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> method to provide a data buffer to an input device in order to receive a system-exclusive message.</para>
            <para>Use this property with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> method to send a system-exclusive message to an output device.</para>
            <para>Note: There is no 'Unprepare' method present in this class, since this will be handled automatically once you received a message back from the device and (re)create an instance of this class with the param1 IntPtr.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.Send">
            <summary>
            Sends this system-exclusive message to the given <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Device"/>.
            </summary>
            <returns><see langword="true"/> on success (message was send successfully), else <see langword="false"/>.</returns>
            <remarks>Note: Before sending this system-exclusive message it must have been prepared with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>!
            <para>This method will also fail, if the Midi <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Device"/> was not opened with <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIOUTPROC,System.IntPtr)"/> resp. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIINPROC,System.IntPtr,radio42.Multimedia.Midi.MIDIFlags)"/>. 
            If dealing with an input device (<see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsInput"/>) you must also start the device with <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/>.</para>
            <para>If dealing with an input device this system-exclusive message is used to provide a buffer to the input device (<see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> is used internally).</para>
            <para>If dealing with an output device this system-exclusive message is send as a long message to the output device (<see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> is used internally).</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.Validate">
            <summary>
            Validates the given <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer to ensure it contains a valid system-exclusive message.
            </summary>
            <returns><see langword="true"/>, if the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer contains a valid system-exclusive message, else <see langword="false"/>.</returns>
            <remarks>The following check is performed:
            <para>The first byte must be 0xF0 and the last byte in the buffer must be 0xF7.</para>
            <para>The data bytes in between must all having bit #7 clear, i.e. a 0 to 127 value.</para>
            <para>If you received a message and the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.IsDone"/> property is set to <see langword="false"/> it is very likely, that the message is not valid.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.ToString">
            <summary>
            Returns the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer as a string.
            </summary>
            <returns>The string representation of the Midi data in the data buffer as hexadecimal values.</returns>
            <remarks>If no <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> to the data buffer exists <see langword="null"/> will be returned. If the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.MessageLength"/> is zero an empty string will be returned - 
            else a hexadecimal representation of the byte array of the data will be returned, e.g. "F0 41 00 ... F7".</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead(System.Int32@)">
            <summary>
            Reads an 8-bit value from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (full).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer to start reading (the offset will be automatically be increased by the number of bytes read).</param>
            <returns>The byte value (between 0 and 255) at the given position.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite(System.Int32@,System.Byte)">
            <summary>
            Writes an 8-bit value to the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (full).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer where to start writing (the offset will be automatically be increased by the number of bytes written).</param>
            <param name="value">The full byte value to write.</param>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MIDIOUTPROC _midiOutProc;
            private IntPtr _midiOutHandle;
            ...
            _midiOutProc = new MIDIOUTPROC(MyMidiOutProc);
            Midi.MIDI_OutOpen(ref _midiOutHandle, 0, _midiOutProc, 0);
            ...
            // create a new system-exclusive message
            MidiSysExMessage sysex = new MidiSysExMessage(false, _midiOutHandle);
            // message will be 8 byte (incl. SoX and EoX)
            sysex.CreateBuffer(8);
            // write start-of-system-exclusive
            sysex.MessageWriteSoX();
            int offset = 1;
            // write 6 more bytes...
            sysex.MessageWrite8(ref offset, 65);
            sysex.MessageWrite16(ref offset, 1023);
            sysex.MessageWrite16(ref offset, 13);
            sysex.MessageWrite8(ref offset, 1);
            // write end-of-system-exclusive
            sysex.MessageWriteEoX();
            ...
            </code>
            <code lang="VB">
            Private _midiOutProc As MIDIOUTPROC
            Private _midiOutHandle As IntPtr
            ...
            _midiOutProc = New MIDIOUTPROC(AddressOf MyMidiOutProc)
            Midi.MIDI_OutOpen(_midiOutHandle, 0, _midiOutProc, 0)
            ...
            ' create a new system-exclusive message
            Dim sysex As New MidiSysExMessage(False, _midiOutHandle)
            ' message will be 8 byte (incl. SoX and EoX)
            sysex.CreateBuffer(8)
            ' write start-of-system-exclusive
            sysex.MessageWriteSoX()
            Dim offset As Integer = 1
            ' write 6 more bytes...
            sysex.MessageWrite8(offset, 65)
            sysex.MessageWrite16(offset, 1023)
            sysex.MessageWrite16(offset, 13)
            sysex.MessageWrite8(offset, 1)
            ' write end-of-system-exclusive
            sysex.MessageWriteEoX()
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWriteSoX">
            <summary>
            Writes the <see cref="F:radio42.Multimedia.Midi.MIDIStatus.SystemMsgs"/> byte (0xF0) to the first byte of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer.
            </summary>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWriteEoX">
            <summary>
            Writes the <see cref="F:radio42.Multimedia.Midi.MIDIStatus.EOX"/> byte (0xF7) to the last byte of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer.
            </summary>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead8(System.Int32@)">
            <summary>
            Reads a 7-bit value from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (right-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer to start reading (the offset will be automatically be increased by the number of bytes read).</param>
            <returns>The byte value (between 0 and 127) at the given position.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite8(System.Int32@,System.Byte)">
            <summary>
            Writes a 7-bit value to the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (right-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer where to start writing (the offset will be automatically be increased by the number of bytes written).</param>
            <param name="value">The byte value (between 0 and 127) to write to the given position.</param>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead8Wave(System.Int32@)">
            <summary>
            Reads an 8-bit waveform value (2 bytes) from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer  (left-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer to start reading (the offset will be automatically be increased by the number of bytes read).</param>
            <returns>The byte value (between 0 and 255) at the given position representing the waveform point.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite8Wave(System.Int32@,System.Byte)">
            <summary>
            Writes an 8-bit waveform value (2 bytes) to the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer  (left-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer where to start writing (the offset will be automatically be increased by the number of bytes written).</param>
            <param name="value">The byte value (between 0 and 255) to write to the given position representing the waveform point.</param>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead16(System.Int32@)">
            <summary>
            Reads a 14-bit value (2 bytes) from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (right-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer to start reading (the offset will be automatically be increased by the number of bytes read).</param>
            <returns>The short value (between 0 and 16383) at the given position.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite16(System.Int32@,System.Int16)">
            <summary>
            Writes a 14-bit value (2 bytes) to the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (right-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer where to start writing (the offset will be automatically be increased by the number of bytes written).</param>
            <param name="value">The short value (between 0 and 16383) to write to the given position.</param>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead16Wave(System.Int32@)">
            <summary>
            Reads a 16-bit waveform value (3 bytes) from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer  (left-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer to start reading (the offset will be automatically be increased by the number of bytes read).</param>
            <returns>The short value (between -32768 and 32767) at the given position representing the waveform point.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite16Wave(System.Int32@,System.Int16)">
            <summary>
            Writes a 16-bit waveform value (3 bytes) to the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer  (left-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer where to start writing (the offset will be automatically be increased by the number of bytes written).</param>
            <param name="value">The short value (between -32768 and 32767) to write to the given position representing the waveform point.</param>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead24(System.Int32@)">
            <summary>
            Reads a 21-bit value (3 bytes) from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (right-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer to start reading (the offset will be automatically be increased by the number of bytes read).</param>
            <returns>The int value (between 0 and 2097152) at the given position.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite24(System.Int32@,System.Int32)">
            <summary>
            Writes a 21-bit value (3 bytes) to the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (right-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer where to start writing (the offset will be automatically be increased by the number of bytes written).</param>
            <param name="value">The int value (between 0 and 2097152) to write to the given position.</param>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead24Wave(System.Int32@)">
            <summary>
            Reads a 24-bit waveform value (4 bytes) from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer  (left-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer to start reading (the offset will be automatically be increased by the number of bytes read).</param>
            <returns>The int value (between -8388608 and 8388607) at the given position representing the waveform point.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite16Wave(System.Int32@,System.Int32)">
            <summary>
            Writes a 24-bit waveform value (4 bytes) to the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer  (left-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer where to start writing (the offset will be automatically be increased by the number of bytes written).</param>
            <param name="value">The int value (between -8388608 and 8388607) to write to the given position representing the waveform point.</param>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageRead32(System.Int32@)">
            <summary>
            Reads a 28-bit value (4 bytes) from the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (right-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer to start reading (the offset will be automatically be increased by the number of bytes read).</param>
            <returns>The int value (between 0 and 268435456) at the given position.</returns>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiSysExMessage.MessageWrite32(System.Int32@,System.Int32)">
            <summary>
            Writes a 28-bit value (4 bytes) to the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer (right-justified).
            </summary>
            <param name="offset">The zero-base offset (index) of the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer where to start writing (the offset will be automatically be increased by the number of bytes written).</param>
            <param name="value">The int value (between 0 and 268435456) to write to the given position.</param>
            <remarks>
            <para>You first need to initialize the <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Message"/> data buffer with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.CreateBuffer(System.Int32)"/> before being able to write to the buffer.</para>
            <para>Do not call this method after you have prepared the message with <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/>, since after calling <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> this method would have no effect.</para>
            </remarks>
        </member>
        <member name="T:radio42.Multimedia.Midi.MidiInputDevice">
            <summary>
            This class handles all communication with a Midi input device.
            </summary>
            <remarks>Create an instance of this class and specify a <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.DeviceID"/> to be used. You might use the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.GetDeviceCount"/> and the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.GetDeviceDescriptions"/> to enumerate all available Midi input devices (use the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.GetInfo(System.Int32)"/> method to retrieve the device capabilities).
            <para>After you have called the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> method the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> is being used. However, Midi messages are not yet recorded and received. 
            To start recording Midi messages call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/> method.</para>
            <para>It is a good idea to subscribe to the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event handler before calling <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> and <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/>.
            The property <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.MessageFilter"/> might be used to suppress sending certain events.
            The <see cref="T:radio42.Multimedia.Midi.MidiMessageEventArgs"/> contains a <see cref="T:radio42.Multimedia.Midi.MidiMessageEventType"/> which allows you to react to all possible scenarios and to process all Midi messages and events.</para>
            <para>Call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Stop"/> method to stop recording and receiving Midi message. 
            Once you're done with the device call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Close"/> to close the device and release it.</para>
            </remarks>
            <example>
            <code lang="C#">
            using radio42.Multimedia.Midi;
            ...
            private MidiInputDevice _inDevice;
            ...
            // open and start a certain Midi input device
            private void OpenAndStartDevice(int device)
            {
              _inDevice = new MidiInputDevice(device);
              _inDevice.AutoPairController = true;
              _inDevice.MessageFilter = MIDIMessageType.SystemRealtime | MIDIMessageType.SystemExclusive;
              _inDevice.MessageReceived += new MidiMessageEventHandler(InDevice_MessageReceived);
              if (_inDevice.Open())
              {
                if (!_inDevice.Start())
                  MessageBox.Show(this, "Midi device could not be started! Error: " + _inDevice.LastErrorCode.ToString(), "Midi Error");
              }
              else
                MessageBox.Show(this, "Midi device could not be opened! Error: " + _inDevice.LastErrorCode.ToString(), "Midi Error");
            }
            
            // stop and close the Midi input device
            private void StopAndCloseDevice()
            {
              if (_inDevice != null &amp;&amp; _inDevice.IsStarted)
              {
                _inDevice.Stop();
                _inDevice.Close();
                _inDevice.MessageReceived -= new MidiMessageEventHandler(InDevice_MessageReceived);
              }
            }
            
            private void InDevice_MessageReceived(object sender, MidiMessageEventArgs e)
            {
              if (e.IsShortMessage)
              {
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString());
              }
              else if (e.IsSysExMessage)
              {
                Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString());
              }
              else if (e.EventType == MidiMessageEventType.Opened)
              {
                Console.WriteLine("Midi device {0} opened.", e.DeviceID);
              }
              else if (e.EventType == MidiMessageEventType.Closed)
              {
                Console.WriteLine("Midi device {0} closed.", e.DeviceID);
              }
              else if (e.EventType == MidiMessageEventType.Started)
              {
                Console.WriteLine("Midi device {0} started.", e.DeviceID);
              }
              else if (e.EventType == MidiMessageEventType.Stopped)
              {
                Console.WriteLine("Midi device {0} stopped.", e.DeviceID);
              }
            }
            </code>
            <code lang="VB">
            Imports radio42.Multimedia.Midi
            ...
            Private _inDevice As MidiInputDevice
            ...
            ' open and start a certain Midi input device
            Private Sub OpenAndStartDevice(device As Integer)
              _inDevice = New MidiInputDevice(device)
              _inDevice.AutoPairController = True
              _inDevice.MessageFilter = MIDIMessageType.SystemRealtime Or MIDIMessageType.SystemExclusive
              AddHandler _inDevice.MessageReceived, AddressOf InDevice_MessageReceived
              If _inDevice.Open() Then
                If Not _inDevice.Start() Then
                  MessageBox.Show(Me, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
                End If
              Else
                MessageBox.Show(Me, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
              End If
            End Sub
            
            ' stop and close the Midi input device
            Private Sub StopAndCloseDevice()
              If Not (_inDevice Is Nothing) AndAlso _inDevice.IsStarted Then
                _inDevice.Stop()
                _inDevice.Close()
                _inDevice.MessageReceived -= New MidiMessageEventHandler(InDevice_MessageReceived)
              End If
            End Sub
            
            Private Sub InDevice_MessageReceived(sender As Object, e As MidiMessageEventArgs)
              If e.IsShortMessage Then
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString())
              Else
                If e.IsSysExMessage Then
                  Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString())
                Else
                  If e.EventType = MidiMessageEventType.Opened Then
                    Console.WriteLine("Midi device {0} opened.", e.DeviceID)
                  Else
                    If e.EventType = MidiMessageEventType.Closed Then
                      Console.WriteLine("Midi device {0} closed.", e.DeviceID)
                    Else
                      If e.EventType = MidiMessageEventType.Started Then
                        Console.WriteLine("Midi device {0} started.", e.DeviceID)
                      Else
                        If e.EventType = MidiMessageEventType.Stopped Then
                          Console.WriteLine("Midi device {0} stopped.", e.DeviceID)
                        End If
                      End If
                    End If
                  End If
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.#ctor(System.Int32)">
            <summary>
            Creates a new instance of a MidiInputDevice.
            </summary>
            <param name="deviceID">The input device number to use.</param>
            <remarks>Use the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> method to open the Midi device and call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/> to start recording messages.
            <para>To stop recording call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Stop"/> method. When you are done with the device you might call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Close"/> method to actually close the Midi input device.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.#ctor(System.Int32,radio42.Multimedia.Midi.MIDIINPROC)">
            <summary>
            Creates a new instance of a MidiInputDevice.
            </summary>
            <param name="deviceID">The input device number to use.</param>
            <param name="proc">The <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> in which all <see cref="T:radio42.Multimedia.Midi.MIDIMessage"/> should be handled.</param>
            <remarks>Use the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> method to open the Midi device and call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/> to start recording messages.
            <para>To stop recording call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Stop"/> method. When you are done with the device you might call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Close"/> method to actually close the Midi input device.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.Dispose">
            <summary>
            Releases all managed and unmanaged resources used by this class.
            </summary>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.Finalize">
            <summary>
            Destructor of the MidiInputDevice for finalization code.
            </summary>
            <remarks>This destructor will run only if the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Dispose"/> method does not get called.</remarks>
        </member>
        <member name="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived">
            <summary>
            Event handler used to notify that the input device has received a message or the status has changed.
            </summary>
            <remarks>It is a good idea to subscribe to this event handler before calling <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> and <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/>.
            <para>The property <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.MessageFilter"/> might be used to suppress sending certain events.</para>
            <para>The <see cref="T:radio42.Multimedia.Midi.MidiMessageEventArgs"/> contains a <see cref="T:radio42.Multimedia.Midi.MidiMessageEventType"/> which allows you to react to all possible scenarios and to process all these events.</para>
            <para>Note: This implementation ensures, that the event will be executed in the main thread the subscriber executes in!
            So when subscribing to this event from UI thread, the specified event delegate will also be called in that UI thread.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.IsDisposed">
            <summary>
            Returns <see langword="true"/>, if this class is being disposed.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.Device">
            <summary>
            Returns the device handle for this input device.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.DeviceID">
            <summary>
            Returns the device id (number) which was used to create this instance.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.SysExBufferSize">
            <summary>
            Gets or Sets the maximum buffer size for system-exclusive messages (between 2 and 65536, default is 1024).
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.User">
            <summary>
            User instance data to be used when providing system-exclusive messages.
            </summary>
            <remarks>This member will be provided back in the received <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.SysExMessage"/>.</remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.ShortMessage">
            <summary>
            Gets the current (last) <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> which was received from the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/>.
            </summary>
            <remarks>
            <pata>Might return <see langword="null"/>, if no message was received so far (this class must at least have received one Midi short messages before this member returns a valid message).</pata>
            <para>You might use the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> member of this property to access the previous short message received etc.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.SysExMessage">
            <summary>
            Gets the current (last) <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/> which was received from the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/>.
            </summary>
            <remarks>
            <pata>Might return <see langword="null"/>, if no system-exclusive message was received so far (this class must at least have received one Midi system-exclusive messages before this member returns a valid message).</pata>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.IsOpened">
            <summary>
            Returns <see langword="true"/> if the Midi input device is opened - else <see langword="false"/>.
            </summary>
            <remarks>To open the Midi input device call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> method. Use the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/> method to start recording messages from the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> if it is opened and use <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Stop"/> to stop recording from the device.
            When you are done with the Midi input device you might call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Close"/> to actually close the device.
            Any <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ShortMessage"/> as well as any <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.SysExMessage"/> event will only be received between start and stop.
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.IsStarted">
            <summary>
            Returns <see langword="true"/> if the Midi input device is started and recording messages - else <see langword="false"/>.
            </summary>
            <remarks>To open the Midi input device call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> method. Use the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/> method to start recording messages from the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> and use <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Stop"/> to stop recording from the device.
            When you are done with the Midi input device you might call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Close"/> to actually close the device.
            Any <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ShortMessage"/> as well as any <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.SysExMessage"/> event will only be received between start and stop.
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.LastErrorCode">
            <summary>
            Returns the last Midi error code (see <see cref="T:radio42.Multimedia.Midi.MIDIError"/> for possible values).
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.AutoPairController">
            <summary>
            Gets or Sets if Channel Messages (a <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>) with a <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> should automatically be paired (default is None).
            </summary>
            <remarks>
            <para>Some controllers are continuous controllers, which simply means that their value can be set to any value within the range from 0 to 16383 (for 14-bit coarse/fine resolution) or 0 to 127 (for 7-bit, coarse resolution).
            Setting this property to <see langword="true"/> will automatically pair short-message values defined in the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ColtrollerPairMatrix"/>.
            In such case only one <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event will be fired, containing the combined (paired, 14-bit) <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue"/>.</para>
            <para>In detail: Some Midi data messages might actually use two sub-sequent short messages to construct a paired message representing a single value range (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> with a <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>).
            This to support paired values with a higher resolution (16384 instead of 128 values).
            In such case normally two short messages will be send, where one contains the LSB value (single steps, fine) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte and the other message contains the MSB value (128th steps, coarse) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> byte.
            Typically the messages with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> and with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 0 and 31 (MSB, coarse) are paired with a message of a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 32 and 63 (LSB, fine).
            But also a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 98 (LSB, fine) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 99 (MSB, coarse) as well as a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 100 (LSB, fine) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 101 (MSB, coarse).
            Other pairs might be hardware specific and might be specified by using the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ColtrollerPairMatrix"/>.</para>
            <para>The resulting combined data value will be constructed like this: dataMSB=0xxxxxxx, dataLSB=0yyyyyyy = paired=00xxxxxxxyyyyyyy.</para>
            <para>By default this property is set to <see langword="false"/> meaning each individual short message will be handled and independently as a single message.
            If this member is set to <see langword="true"/> and the message is a ControlChange message and is defined in the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ColtrollerPairMatrix"/>, then only the second message will fire the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event.</para>
            <para>In case the Midi device will under certain cases not send paired messages together the non-paired message will be handled as a single message again.
            For example: It's only desirable to make fine adjustments to the Mod Wheel without changing its current coarse setting (or vice versa), a device can be sent only a controller #33 message without a preceding controller #1 message (or vice versa). 
            Thus, if a device can respond to both coarse and fine adjustments for a particular controller (ie, implements the full 14-bit resolution), it should be able to deal with either the coarse or fine controller message being sent without its counterpart following. 
            The same holds true for other continuous (ie, coarse/fine pairs of) controllers.</para>
            <para>In any case you can simply access the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue"/> property and you'll get in return the combined and paired 14-bit controller value or the single uncombined value without further taking care.</para>
            <para>Use the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ColtrollerPairMatrix"/> to define the controller pairs belonging together and for more details.</para>
            <para>NOTE: ControlChannel messages are ONLY combined and paired if the messages as defined in the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ColtrollerPairMatrix"/> are send exactly subsequently (with no other short-message in between)!</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.ColtrollerPairMatrix">
            <summary>
            Sets the controller pair matrix to automatic combine any <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ShortMessage"/> with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/>.
            </summary>
            <remarks>
            <para>Some controllers are continuous controllers, which simply means that their value can be set to any value within the range from 0 to 16383 (for 14-bit coarse/fine resolution) or 0 to 127 (for 7-bit, coarse resolution).
            Some Midi data messages might actually use two sub-sequent short messages to construct a paired message representing a single value range (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> with a <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>).
            This to support paired values with a higher resolution (16384 instead of 128 values).</para>
            <para>This matrix defines how sub-sequent short-messages with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> are detected and which controller number defines the MSB (coarse) value and which defines the LSB (fine) value.
            Furthermore the matrix defines which controller number is used in the single combined and paired short-message used in the resulting <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event.</para>
            <para>When a continuous controller pair is detected (see <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.IsSetAsContinuousController"/>) by default only the last received short-message of the pair will be used when raising the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event.
            If the Midi input device follows the general rule and first sends the MSB (coarse) controller message and right after the LSB (fine) controller message this would mean, that in the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event handle you would only see the last LSB (fine) message (the previous message with the MSB, coarse value will always be suppressed).
            However, when accessing the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerValue"/> of the fired message you will receive the combined and paired 14-bit conroller value between 0 and 16383.</para>
            <para>Sometimes Midi devices do not send the paired messages in a particular order. This would mean that controller pairs can still be detected and combined, but that in such case still the last received short-message of the pair will be used when the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event is raised.
            This would result in the fact, that your application would sometimes receive the LSB short-message and sometimes the MSB short-message (see <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerType"/>).
            To handle this circumstance the ColtrollerPairMatrix keeps a value allowing you to swap or redefine the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerType"/> value being used with the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ShortMessage"/> fired with the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event.</para>
            <para>NOTE: This property is only evaluated, if the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.AutoPairController"/> property is set to <see langword="true"/> and the ControlChannel messages are send exactly subsequently (with no other short-message in between)!</para>
            <para>So how is the ColtrollerPairMatrix defined:</para>
            <para>The matrix is defined as a two dimentional byte array meaning each element of the first dimention consists of 3 elements. Whereas the first dimention is simply the list of all defined controller pairs.</para>
            <para>The matrix layout:
            <list type="table">
            <item><term>Vertical</term><description>The list of defined controller pairs (each entry represents a controller pair to be combined).</description></item>
            <item><term>Horizontal</term><description>The definition of each controller pair:
            <para>First value : the MSB (coarse) controller number (see <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/>).</para>
            <para>Second value: the LSB (fine) controller number (see <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/>).</para>
            <para>Third value : the swap flag for the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ControllerType"/> of the forwarded message:
            	<list type="bullet">
            	<item><term>255</term><description>Leave current and previous message as is.</description></item>
            	<item><term>254</term><description>Use the LSB message value, swap previous message if needed.</description></item>
            	<item><term>253</term><description>Use the MSB message value, swap previous message if needed.</description></item>
            	<item><term>252</term><description>Use the LSB message value, leave previous message as is.</description></item>
            	<item><term>251</term><description>Use the MSB message value, leave previous message as is.</description></item>
            	<item><term>&lt;128</term><description>Overwrite and use this value, leave previous message as is.</description></item>
            	</list>
            </para>
            </description></item>
            </list>
            <code lang="none">
                  --MSB-LSB--SWAP-> (definition)
                 |   0,  32, 255
                 |   1,  33, 255
                 |   2,  34, 255
                 | ...  ...  ...
                 |  99,  98, 254
                 | 101, 100, 254
                 v                  
            (Pairs)                 
                                     
            </code>
            </para>
            <para>Here is the default definition of this property:
            <code lang="null">
            byte[,] ColtrollerPairMatrix = new byte[34,3] 
            { 
            	{  0,  32, 255},
            	{  1,  33, 255},
            	{  2,  34, 255},
            	{  3,  35, 255},
            	{  4,  36, 255},
            	{  5,  37, 255},
            	{  6,  38, 255},
            	{  7,  39, 255},
            	{  8,  40, 255},
            	{  9,  41, 255},
            	{ 10,  42, 255},
            	{ 11,  43, 255},
            	{ 12,  44, 255},
            	{ 13,  45, 255},
            	{ 14,  46, 255},
            	{ 15,  47, 255},
            	{ 16,  48, 255},
            	{ 17,  49, 255},
            	{ 18,  50, 255},
            	{ 19,  51, 255},
            	{ 20,  52, 255},
            	{ 21,  53, 255},
            	{ 22,  54, 255},
            	{ 23,  55, 255},
            	{ 24,  56, 255},
            	{ 25,  57, 255},
            	{ 26,  58, 255},
            	{ 27,  59, 255},
            	{ 28,  60, 255},
            	{ 29,  61, 255},
            	{ 30,  62, 255},
            	{ 31,  63, 255},
            	{ 99,  98, 255},
            	{101, 100, 255}
            };
            </code>
            </para>
            <para>You might use the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.ThisIsMSB"/> and <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousIsMSB"/> properties to identify which message contains the coarse (MSB) or fine (LSB) controller value.
            A access the paired short-message use the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.PreviousShortMessage"/> member.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MidiInputDevice _inDevice = null;
            ...
            _inDevice = new MidiInputDevice(0);
            _inDevice.AutoPairController = true;
            _inDevice.MessageReceived += new MidiMessageEventHandler(InDevice_MessageReceived);
            if ( _inDevice.Open() )
              _inDevice.Start();
            ...
            private void InDevice_MessageReceived(object sender, MidiMessageEventArgs e)
            {
              if (e.IsShortMessage)
              {
                if (e.ShortMessage.IsSetAsContinuousController)
                {
                  Console.WriteLine("Continuous Controller {0}: Value={1}", 
                                    e.ShortMessage.Controller, 
                                    e.ShortMessage.ControllerValue);
                  Console.WriteLine("MSB ControllerType={0}, LSB ControllerType={1}", 
                                    e.ShortMessage.ThisIsMSB ? e.ShortMessage.ControllerType : 
                                                               e.ShortMessage.PreviousShortMessage.ControllerType,
                                    e.ShortMessage.PreviousIsMSB ? e.ShortMessage.ControllerType : 
                                                                   e.ShortMessage.PreviousShortMessage.ControllerType);
                }
                else
                  Console.WriteLine(e.ShortMessage.ToString());
              }
              ...
            }
            </code>
            <code lang="VB">
            Private _inDevice As MidiInputDevice = Nothing
            ...
            _inDevice = New MidiInputDevice(0)
            _inDevice.AutoPairController = True
            AddHandler _inDevice.MessageReceived, AddressOf InDevice_MessageReceived
            If _inDevice.Open() Then
              _inDevice.Start()
            End If
            ...
            Private Sub InDevice_MessageReceived(sender As Object, e As MidiMessageEventArgs)
              If e.IsShortMessage Then
                If e.ShortMessage.IsSetAsContinuousController Then
                  Console.WriteLine("Continuous Controller {0}: Value={1}", 
                                    e.ShortMessage.Controller, 
                                    e.ShortMessage.ControllerValue)
                  If e.ShortMessage.ThisIsMSB Then
                    Console.WriteLine("MSB ControllerType={0}", e.ShortMessage.ControllerType)
                  Else
                    Console.WriteLine("MSB ControllerType={0}", e.ShortMessage.PreviousShortMessage.ControllerType)
                  End If
                  If e.ShortMessage.PreviousIsMSB Then
                    Console.WriteLine("LSB ControllerType={0}", e.ShortMessage.ControllerType)
                  Else
                    Console.WriteLine("LSB ControllerType={0}", e.ShortMessage.PreviousShortMessage.ControllerType)
                  End If
                Else
                  Console.WriteLine(e.ShortMessage.ToString())
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.MessageFilter">
            <summary>
            Gets or Sets the filter to be applied (messages types which should be suppressed).
            </summary>
            <remarks>By default all <see cref="T:radio42.Multimedia.Midi.MIDIMessageType"/> messages will raise the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event.
            <para>You might combine any value of the <see cref="T:radio42.Multimedia.Midi.MIDIMessageType"/> enumeration in order to suppresses certain messages (e.g. to not process real-time messages).</para>
            </remarks>
            <example>
            Suppress all real-time and system-exclusive messages:
            <code lang="C#">
            private MidiInputDevice _inDevice = null;
            ...
            _inDevice = new MidiInputDevice(0);
            _inDevice.AutoPairController = true;
            _inDevice.MessageFilter = MIDIMessageType.SystemRealtime | MIDIMessageType.SystemExclusive;
            _inDevice.MessageReceived += new MidiMessageEventHandler(InDevice_MessageReceived);
            if ( _inDevice.Open() )
            	_inDevice.Start();
            ...
            </code>
            <code lang="VB">
            Private _inDevice As MidiInputDevice = Nothing
            ...
            _inDevice = New MidiInputDevice(0)
            _inDevice.AutoPairController = True
            _inDevice.MessageFilter = MIDIMessageType.SystemRealtime Or MIDIMessageType.SystemExclusive
            AddHandler _inDevice.MessageReceived, AddressOf InDevice_MessageReceived
            If _inDevice.Open() Then
              _inDevice.Start()
            End If
            </code>
            </example>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiInputDevice.ProcessErrorMessages">
            <summary>
            Gets or Sets if erroneous Midi messages should also be processed.
            </summary>
            <remarks>
            Sometimes a Midi device might send invalid or erroneous Midi messages.
            This property defines, if erroneous Midi messages (see <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR"/> and <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_ERROR"/>)
            should anyhow be used and raise the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event.
            <para>If set to <see langword="false"/> (default) only valid messages will be processed.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.GetDeviceCount">
            <summary>
            Returns the total number of available Midi input devices.
            </summary>
            <returns>The number of Midi input devices present in your system.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.GetDeviceDescriptions">
            <summary>
            Returns all available Midi input device names.
            </summary>
            <returns>An array of strings representing the available devices.</returns>
            <remarks>
            <para>The index of the returned descriptions equals the deviceID, which might be used with the constructor of this class.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.GetMidiPorts">
            <summary>
            Returns all available Midi input port IDs.
            </summary>
            <returns>An array of int representing the available Midi port IDs.</returns>
            <remarks>
            <para>The values returned equals the deviceID, which might be used with the constructor of this class.</para>
            <para>This method returns all available deviceIDs representing a Midi input port. You might use each ID with the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.GetDeviceDescription(System.Int32)"/> method to retrieve the name of the respective Midi input device.</para>
            </remarks>
            <example>
            List all Midi input ports (devices which might be used with this class):
            <code lang="C#">
            int[] inPorts = MidiInputDevice.GetMidiPorts();
            foreach (int port in inPorts)
            {
              string name = MidiInputDevice.GetDeviceDescription(port);
              Console.WriteLine("{0}={1}", port, name);
            }
            </code>
            <code lang="VB">
            Dim inPorts As Integer() = MidiInputDevice.GetMidiPorts()
            Dim port As Integer
            For Each port In  inPorts
              Dim name As String = MidiInputDevice.GetDeviceDescription(port)
              Console.WriteLine("{0}={1}", port, name)
            Next port
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.GetDeviceDescription(System.Int32)">
            <summary>
            Returns the name of the given input device ID.
            </summary>
            <param name="deviceID">Identifier of the MIDI input device. The device identifier varies from zero to one less than the number of devices present (see <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.GetDeviceCount"/>).</param>
            <returns>The name of the Midi input device.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.GetInfo(System.Int32)">
            <summary>
            Determines the capabilities of a specified MIDI input device.
            </summary>
            <param name="deviceID">Identifier of the MIDI input device. The device identifier varies from zero to one less than the number of devices present.</param>
            <returns>An instance of the <see cref="T:radio42.Multimedia.Midi.MIDI_INCAPS"/> structure representing the device capabilities - or <see langword="null"/> on error.</returns>
            <remarks>To determine the number of MIDI input devices present on the system, use the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.GetDeviceCount"/> method.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.Connect(System.IntPtr)">
            <summary>
            Connects this input device to a MIDI thru or output device. 
            </summary>
            <param name="handleTo">Handle to the MIDI output device or thru device.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> will be returned.</returns>
            <remarks>After calling this function, this <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> receives event data messages whenever a message with the same event data is sent to the output device driver.
            <para>A thru driver is a special form of MIDI output driver. The system will allow only one MIDI output device to be connected to a MIDI input device, but multiple MIDI output devices can be connected to a MIDI thru device. 
            Whenever this <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> receives event data messages, a message with the same event data is sent to the given output device driver (or through the thru driver to the output drivers).</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.Disconnect(System.IntPtr)">
            <summary>
            Disconnects this input device from a MIDI thru or output device.
            </summary>
            <param name="handleFrom">Handle to the MIDI output device to be disconnected.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> will be returned.</returns>
            <remarks>Use this method to disconnect the device you connected with the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Connect(System.IntPtr)"/> method beforehand.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.Open">
            <summary>
            Opens the Midi input device using the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.DeviceID"/>.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>After you have called this method the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> is being used. However, Midi messages are not yet recorded and received. To start recording call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/> method.
            <para>When you have subscribed to the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event you'll get notified when the device is opened (<see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.Opened"/>) and closed (<see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.Closed"/>).</para>
            <para>Once you're done with the device call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Close"/> to close the device and release it.</para>
            </remarks>
            <example>
            Opens the Midi input device #0:
            <code lang="C#">
            private MidiInputDevice _inDevice;
            ...
            _inDevice = new MidiInputDevice(0);
            _inDevice.MessageReceived += new MidiMessageEventHandler(InDevice_MessageReceived);
            if (_inDevice.Open())
            {
              if (!_inDevice.Start())
                MessageBox.Show(this, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
            }
            else
              MessageBox.Show(this, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
            ...
            // when done
            if (_inDevice.IsStarted)
              _inDevice.Stop();
            if (_inDevice.IsOpened)
              _inDevice.Close();
            ...
            private void InDevice_MessageReceived(object sender, MidiMessageEventArgs e)
            {
              if (e.IsShortMessage)
              {
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString());
              }
              else if (e.IsSysExMessage)
              {
                Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString());
              }
            }
            </code>
            <code lang="VB">
            Private _inDevice As MidiInputDevice
            ...
            _inDevice = New MidiInputDevice(0)
            AddHandler _inDevice.MessageReceived, AddressOf InDevice_MessageReceived
            If _inDevice.Open() Then
              If Not _inDevice.Start() Then
                MessageBox.Show(Me, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
              End If
            Else
              MessageBox.Show(Me, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
            End If 
            ...
            ' when done
            If _inDevice.IsStarted Then
              _inDevice.Stop()
            End If
            If _inDevice.IsOpened Then
              _inDevice.Close()
            End If
            ...
            Private Sub InDevice_MessageReceived(sender As Object, e As MidiMessageEventArgs)
              If e.IsShortMessage Then
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString())
              Else
                If e.IsSysExMessage Then
                  Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString())
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.Close">
            <summary>
            Closes the Midi input device using the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.DeviceID"/>.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>After you have called this method the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> is no longer valid and released.
            If the Midi Device <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.IsStarted"/> and currently recording messages this method will also <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Stop"/> recording messages.
            <para>When you have subscribed to the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event you'll get notified when the device is opened (<see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.Opened"/>) and closed (<see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.Closed"/>).</para>
            <para>After you have closed the Midi input device you might open it again using the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> method.</para>
            </remarks>
            <example>
            Opens the Midi input device #0:
            <code lang="C#">
            private MidiInputDevice _inDevice;
            ...
            _inDevice = new MidiInputDevice(0);
            _inDevice.MessageReceived += new MidiMessageEventHandler(InDevice_MessageReceived);
            if (_inDevice.Open())
            {
              if (!_inDevice.Start())
                MessageBox.Show(this, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
            }
            else
              MessageBox.Show(this, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
            ...
            // when done
            if (_inDevice.IsStarted)
              _inDevice.Stop();
            if (_inDevice.IsOpened)
              _inDevice.Close();
            ...
            private void InDevice_MessageReceived(object sender, MidiMessageEventArgs e)
            {
              if (e.IsShortMessage)
              {
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString());
              }
              else if (e.IsSysExMessage)
              {
                Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString());
              }
            }
            </code>
            <code lang="VB">
            Private _inDevice As MidiInputDevice
            ...
            _inDevice = New MidiInputDevice(0)
            AddHandler _inDevice.MessageReceived, AddressOf InDevice_MessageReceived
            If _inDevice.Open() Then
              If Not _inDevice.Start() Then
                MessageBox.Show(Me, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
              End If
            Else
              MessageBox.Show(Me, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
            End If 
            ...
            ' when done
            If _inDevice.IsStarted Then
              _inDevice.Stop()
            End If
            If _inDevice.IsOpened Then
              _inDevice.Close()
            End If
            ...
            Private Sub InDevice_MessageReceived(sender As Object, e As MidiMessageEventArgs)
              If e.IsShortMessage Then
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString())
              Else
                If e.IsSysExMessage Then
                  Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString())
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.Start">
            <summary>
            Starts recording messages from the Midi input device using the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.DeviceID"/>.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>The <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> must have been opened to record messages. You might use the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.IsOpened"/> property to check this. Call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> to open the Midi input device.
            After you have called this method the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> is being used, meaning it will receive any <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ShortMessage"/> and <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.SysExMessage"/>.
            <para>When you have subscribed to the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event you'll get notified when a new message was received from the Midi input device.
            To stop recording messages call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Stop"/> method.</para>
            <para>Once you're done with the device call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Close"/> to close the device and release it.</para>
            </remarks>
            <example>
            Opens the Midi input device #0:
            <code lang="C#">
            private MidiInputDevice _inDevice;
            ...
            _inDevice = new MidiInputDevice(0);
            _inDevice.MessageReceived += new MidiMessageEventHandler(InDevice_MessageReceived);
            if (_inDevice.Open())
            {
              if (!_inDevice.Start())
                MessageBox.Show(this, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
            }
            else
              MessageBox.Show(this, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
            ...
            // when done
            if (_inDevice.IsStarted)
              _inDevice.Stop();
            if (_inDevice.IsOpened)
              _inDevice.Close();
            ...
            private void InDevice_MessageReceived(object sender, MidiMessageEventArgs e)
            {
              if (e.IsShortMessage)
              {
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString());
              }
              else if (e.IsSysExMessage)
              {
                Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString());
              }
            }
            </code>
            <code lang="VB">
            Private _inDevice As MidiInputDevice
            ...
            _inDevice = New MidiInputDevice(0)
            AddHandler _inDevice.MessageReceived, AddressOf InDevice_MessageReceived
            If _inDevice.Open() Then
              If Not _inDevice.Start() Then
                MessageBox.Show(Me, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
              End If
            Else
              MessageBox.Show(Me, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
            End If 
            ...
            ' when done
            If _inDevice.IsStarted Then
              _inDevice.Stop()
            End If
            If _inDevice.IsOpened Then
              _inDevice.Close()
            End If
            ...
            Private Sub InDevice_MessageReceived(sender As Object, e As MidiMessageEventArgs)
              If e.IsShortMessage Then
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString())
              Else
                If e.IsSysExMessage Then
                  Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString())
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.Stop">
            <summary>
            Stops recording messages from the Midi input device using the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.DeviceID"/>.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>The <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> must have been opened and started to record messages. You might use the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.IsOpened"/> and <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.IsStarted"/> properties to check this. Call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Open"/> to open the Midi input device and <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/> to start recording messages.
            After you have called this method the <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.Device"/> is no longer recording and receiving any <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.ShortMessage"/> or <see cref="P:radio42.Multimedia.Midi.MidiInputDevice.SysExMessage"/>.
            <para>When you have subscribed to the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> event you'll get notified when a new message was received from the Midi input device.
            To start recording messages again call the <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Start"/> method.</para>
            <para>Once you're done with the device call <see cref="M:radio42.Multimedia.Midi.MidiInputDevice.Close"/> to close the device and release it.</para>
            </remarks>
            <example>
            Opens the Midi input device #0:
            <code lang="C#">
            private MidiInputDevice _inDevice;
            ...
            _inDevice = new MidiInputDevice(0);
            _inDevice.MessageReceived += new MidiMessageEventHandler(InDevice_MessageReceived);
            if (_inDevice.Open())
            {
              if (!_inDevice.Start())
                MessageBox.Show(this, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
            }
            else
              MessageBox.Show(this, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
            ...
            // when done
            if (_inDevice.IsStarted)
              _inDevice.Stop();
            if (_inDevice.IsOpened)
              _inDevice.Close();
            ...
            private void InDevice_MessageReceived(object sender, MidiMessageEventArgs e)
            {
              if (e.IsShortMessage)
              {
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString());
              }
              else if (e.IsSysExMessage)
              {
                Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString());
              }
            }
            </code>
            <code lang="VB">
            Private _inDevice As MidiInputDevice
            ...
            _inDevice = New MidiInputDevice(0)
            AddHandler _inDevice.MessageReceived, AddressOf InDevice_MessageReceived
            If _inDevice.Open() Then
              If Not _inDevice.Start() Then
                MessageBox.Show(Me, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
              End If
            Else
              MessageBox.Show(Me, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error")
            End If 
            ...
            ' when done
            If _inDevice.IsStarted Then
              _inDevice.Stop()
            End If
            If _inDevice.IsOpened Then
              _inDevice.Close()
            End If
            ...
            Private Sub InDevice_MessageReceived(sender As Object, e As MidiMessageEventArgs)
              If e.IsShortMessage Then
                Console.WriteLine("{0} : {1}", e.ShortMessage.ID, e.ShortMessage.ToString())
              Else
                If e.IsSysExMessage Then
                  Console.WriteLine("{0} : {1}", e.SysExMessage.ID, e.SysExMessage.ToString())
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.AddSysExBuffer">
            <summary>
            Creates and adds a system exclusive buffer to the midi device.
            </summary>
            <returns>For internal use only - not to be used directly in your application.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiInputDevice.IsPairedControllerMessage(radio42.Multimedia.Midi.MidiShortMessage)">
            <summary>
            Is the given <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> a paired controller message?
            </summary>
            <param name="msg">The <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> to check.</param>
            <returns>
            0  = not a pair; 
            -1 = this is the first one, needs to be stacked; 
            +1 = this is the second one, need to be flushed (thisIsMSB); 
            +2 = this is the second one, need to be flushed (previousIsMSB)
            </returns>
        </member>
        <member name="T:radio42.Multimedia.Midi.MidiOutputDevice">
            <summary>
            This class handles all communication with a Midi output device.
            </summary>
            <remarks>Create an instance of this class and specify a <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.DeviceID"/> to be used. You might use the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.GetDeviceCount"/> and the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.GetDeviceDescriptions"/> to enumerate all available Midi output devices (use the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.GetInfo(System.Int32)"/> method to retrieve the device capabilities).
            <para>After you have called the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method the <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> is being used.</para>
            <para>It is a good idea to subscribe to the <see cref="E:radio42.Multimedia.Midi.MidiOutputDevice.MessageReceived"/> event handler before calling <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/>. However, this is generally not needed, since a for an output device there not many events being received (beside that the device is opened and closed and that the Midi output device has finished with a system-exclusive message).
            The <see cref="T:radio42.Multimedia.Midi.MidiMessageEventArgs"/> contains a <see cref="T:radio42.Multimedia.Midi.MidiMessageEventType"/> which allows you to react to all possible scenarios and to process all Midi messages and events.</para>
            <para>To send any short or system-exclusive message use one of the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(radio42.Multimedia.Midi.MidiShortMessage)"/> overloads. You might use the <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> resp. the <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/> class in order to construct any message to be send.</para>
            <para>Once you're done with the device call <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Close"/> to close the device and release it.</para>
            </remarks>
            <example>
            <code lang="C#">
            using radio42.Multimedia.Midi;
            ...
            private MidiOutputDevice _outDevice;
            ...
            // open a certain Midi output device
            private void OpenDevice(int device)
            {
              _outDevice = new MidiOutputDevice(device);
              if (!_outDevice.Open())
                MessageBox.Show(this, "Midi device could not be opened! Error " + _outDevice.LastErrorCode.ToString(), "Midi Error");
              }
            }
            
            // close the Midi output device
            private void StopAndCloseDevice()
            {
              if (_outDevice != null &amp;&amp; _outDevice.IsOpened)
              {
                _outDevice.Close();
              }
            }
            ...
            // create and send a new short message to the output device
            MidiShortMessage msg = new MidiShortMessage(MIDIStatus.NoteOn, 0, 64, 65, 0);
            if ( _outDevice.Send(msg) )
              Console.WriteLine("Error sending short message!");
            ...
            // create a new system-exclusive message for the output device
            MidiSysExMessage sysex = new MidiSysExMessage(false, _outDevice.Device);
            sysex.CreateBuffer( new byte[7] {0xF0, 0x43, 0x75, 0x73, 0x12, 0x00, 0xF7} );
            // send it
            if ( _outDevice.Send(sysex) )
              Console.WriteLine("Error sending system-exclusive message!");
            ...
            </code>
            <code lang="VB">
            Imports radio42.Multimedia.Midi
            ...
            Private _outDevice As MidiOutputDevice
            ...
            ' open a certain Midi output device
            Private Sub OpenDevice(device As Integer)
              _outDevice = New MidiOutputDevice(device)
              If Not _outDevice.Open() Then
                MessageBox.Show(Me, "Midi device could not be opened! Error " + _outDevice.LastErrorCode.ToString(), "Midi Error")
              End If
            End Sub
            
            ' close the Midi output device
            Private Sub StopAndCloseDevice()
              If Not (_outDevice Is Nothing) AndAlso _outDevice.IsOpened Then
                _outDevice.Close()
              End If
            End Sub
            ...
            ' create and send a new short message to the output device
            Dim msg As New MidiShortMessage(MIDIStatus.NoteOn, 0, 64, 65, 0)
              If _outDevice.Send(msg) Then
                Console.WriteLine("Error sending short message!")
              End If 
            ...
            ' create a new system-exclusive message for the output device
            Dim sysex As New MidiSysExMessage(False, _outDevice.Device)
            sysex.CreateBuffer(New Byte(7) {&amp;HF0, &amp;H43, &amp;H75, &amp;H73, &amp;H12, &amp;H0, &amp;HF7})
            ' send it
            If _outDevice.Send(sysex) Then
              Console.WriteLine("Error sending system-exclusive message!")
            End If
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.#ctor(System.Int32)">
            <summary>
            Creates a new instance of a MidiOutputDevice.
            </summary>
            <param name="deviceID">The output device number to use.</param>
            <remarks>Use the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method to open the Midi device.
            <para>With the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(radio42.Multimedia.Midi.MidiShortMessage)"/> methods you can send any message to the output device.</para>
            <para>When you are done with the device you might call the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Close"/> method to actually close the Midi output device.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Dispose">
            <summary>
            Releases all managed and unmanaged resources used by this class.
            </summary>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Finalize">
            <summary>
            Destructor of the MidiOutputDevice for finalization code.
            </summary>
            <remarks>This destructor will run only if the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Dispose"/> method does not get called.</remarks>
        </member>
        <member name="E:radio42.Multimedia.Midi.MidiOutputDevice.MessageReceived">
            <summary>
            Event handler used to notify that the output device has processed a message or the status has changed.
            </summary>
            <remarks>It is a good idea to subscribe to this event handler before calling <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> (even if it is normally not needed to subscribe to any output device).
            <para>The <see cref="T:radio42.Multimedia.Midi.MidiMessageEventArgs"/> contains a <see cref="T:radio42.Multimedia.Midi.MidiMessageEventType"/> which allows you to react to all possible scenarios and to process all these events.</para>
            <para>Note: This implementation ensures, that the event will be executed in the main thread the subscriber executes in!
            So when subscribing to this event from UI thread, the specified event delegate will also be called in that UI thread.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiOutputDevice.IsDisposed">
            <summary>
            Returns <see langword="true"/>, if this class is being disposed.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiOutputDevice.Device">
            <summary>
            Returns the device handle for this output device.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiOutputDevice.DeviceID">
            <summary>
            Returns the device id (number) which was used to create this instance.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiOutputDevice.User">
            <summary>
            User instance data to be used when sending system-exclusive messages.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiOutputDevice.IsOpened">
            <summary>
            Returns <see langword="true"/> if the Midi output device is opened - else <see langword="false"/>.
            </summary>
            <remarks>To open the Midi output device call the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method.
            When you are done with the Midi input device you might call <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Close"/> to actually close the device.
            Use the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(radio42.Multimedia.Midi.MidiShortMessage)"/> methods to send any message to the <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/>.
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiOutputDevice.LastErrorCode">
            <summary>
            Returns the last Midi error code (see <see cref="T:radio42.Multimedia.Midi.MIDIError"/> for possible values).
            </summary>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.GetDeviceCount">
            <summary>
            Returns the total number of available Midi output devices.
            </summary>
            <returns>The number of Midi output devices present in your system.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.GetDeviceDescriptions">
            <summary>
            Returns all available Midi output device names.
            </summary>
            <returns>An array of strings representing the available devices.</returns>
            <remarks>
            <para>The index of the returned descriptions equals the deviceID, which might be used with the constructor of this class.</para>
            <para>Note: Not all Midi output devices might used when sending messages. So you should check the device capabilities (see <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.GetInfo(System.Int32)"/> - typically only Midi output devices with the <see cref="P:radio42.Multimedia.Midi.MIDI_OUTCAPS.IsMidiPort"/> property set to <see langword="true"/> should be used with this class).</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.GetMidiPorts">
            <summary>
            Returns all available Midi output port IDs.
            </summary>
            <returns>An array of int representing the available Midi port IDs.</returns>
            <remarks>
            <para>The values returned equals the deviceID, which might be used with the constructor of this class.</para>
            <para>This method returns all available deviceIDs representing a Midi output port. You might use each ID with the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.GetDeviceDescription(System.Int32)"/> method to retrieve the name of the respective Midi output device.</para>
            </remarks>
            <example>
            List all Midi output ports (devices which might be used with this class):
            <code lang="C#">
            int[] outPorts = MidiOutputDevice.GetMidiPorts();
            foreach (int port in outPorts)
            {
              string name = MidiOutputDevice.GetDeviceDescription(port);
              Console.WriteLine("{0}={1}", port, name);
            }
            </code>
            <code lang="VB">
            Dim outPorts As Integer() = MidiOutputDevice.GetMidiPorts()
            Dim port As Integer
            For Each port In  outPorts
              Dim name As String = MidiOutputDevice.GetDeviceDescription(port)
              Console.WriteLine("{0}={1}", port, name)
            Next port
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.GetDeviceDescription(System.Int32)">
            <summary>
            Returns the name of the given output device ID.
            </summary>
            <param name="deviceID">Identifier of the MIDI output device. The device identifier varies from zero to one less than the number of devices present (see <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.GetDeviceCount"/>).</param>
            <returns>The name of the Midi output device.</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.GetInfo(System.Int32)">
            <summary>
            Determines the capabilities of a specified MIDI output device.
            </summary>
            <param name="deviceID">Identifier of the MIDI output device. The device identifier varies from zero to one less than the number of devices present.</param>
            <returns>An instance of the <see cref="T:radio42.Multimedia.Midi.MIDI_OUTCAPS"/> structure representing the device capabilities - or <see langword="null"/> on error.</returns>
            <remarks>To determine the number of MIDI output devices present on the system, use the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.GetDeviceCount"/> method.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Connect(System.IntPtr)">
            <summary>
            Connects this output device (must actually be a MIDI thru device) to a MIDI output device.
            </summary>
            <param name="handleTo">Handle to the MIDI output device.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> will be returned.</returns>
            <remarks>After calling this function, this <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> receives event data messages whenever a message with the same event data is sent to the output device driver.
            <para>A thru driver is a special form of MIDI output driver. The system will allow only one MIDI output device to be connected to a MIDI input device, but multiple MIDI output devices can be connected to a MIDI thru device. 
            Whenever this <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> receives event data messages, a message with the same event data is sent to the given output device driver (or through the thru driver to the output drivers).</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Disconnect(System.IntPtr)">
            <summary>
            Disconnects this output device (must actually be a MIDI thru device) from a MIDI output device.
            </summary>
            <param name="handleFrom">Handle to the MIDI output device to be disconnected.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> will be returned.</returns>
            <remarks>Use this method to disconnect the device you connected with the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Connect(System.IntPtr)"/> method beforehand.</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Open">
            <summary>
            Opens the Midi output device using the <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.DeviceID"/>.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>After you have called this method the <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> is being used and you might send messages to the device using the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(radio42.Multimedia.Midi.MidiShortMessage)"/> methods.
            <para>When you have subscribed to the <see cref="E:radio42.Multimedia.Midi.MidiOutputDevice.MessageReceived"/> event you'll get notified when the device is opened (<see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.Opened"/>) and closed (<see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.Closed"/>).</para>
            <para>Once you're done with the device call <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Close"/> to close the device and release it.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MidiOutputDevice _outDevice;
            ...
            _outDevice = new MidiOutputDevice(0);
            _outDevice.MessageReceived += new MidiMessageEventHandler(OutDevice_MessageReceived);
            if (!_outDevice.Open())
            {
              MessageBox.Show(this, "Midi device could not be opened! Error " + _outDevice.LastErrorCode.ToString(), "Midi Error");
            }
            ...
            // when done
            if (_outDevice.IsOpened)
              _outDevice.Close();
            ...
            private void OutDevice_MessageReceived(object sender, MidiMessageEventArgs e)
            {
              if (e.EventType == MidiMessageEventType.Opened)
              {
                Console.WriteLine("Midi device {0} opened.", e.DeviceID);
              }
              else if (e.EventType == MidiMessageEventType.Closed)
              {
                Console.WriteLine("Midi device {0} closed.", e.DeviceID);
              }
            }
            </code>
            <code lang="VB">
            Private _outDevice As MidiOutputDevice
            ...
            _outDevice = New MidiOutputDevice(0)
            AddHandler _outDevice.MessageReceived, AddressOf OutDevice_MessageReceived
            If Not _outDevice.Open() Then
              MessageBox.Show(Me, "Midi device could not be opened! Error " + _outDevice.LastErrorCode.ToString(), "Midi Error")
            End If
            ...
            ' when done
            If _outDevice.IsOpened Then
              _outDevice.Close()
            End If
            ...
            Private Sub OutDevice_MessageReceived(sender As Object, e As MidiMessageEventArgs)
              If e.EventType = MidiMessageEventType.Opened Then
               Console.WriteLine("Midi device {0} opened.", e.DeviceID)
              Else
                If e.EventType = MidiMessageEventType.Closed Then
                  Console.WriteLine("Midi device {0} closed.", e.DeviceID)
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Close">
            <summary>
            Closes the Midi output device using the <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.DeviceID"/>.
            </summary>
            <returns><see langword="true"/> on success, else <see langword="false"/>.</returns>
            <remarks>After you have called this method the <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> is no longer valid and released.
            <para>When you have subscribed to the <see cref="E:radio42.Multimedia.Midi.MidiOutputDevice.MessageReceived"/> event you'll get notified when the device is opened (<see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.Opened"/>) and closed (<see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.Closed"/>).</para>
            <para>After you have closed the Midi output device you might open it again using the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MidiOutputDevice _outDevice;
            ...
            _outDevice = new MidiOutputDevice(0);
            _outDevice.MessageReceived += new MidiMessageEventHandler(OutDevice_MessageReceived);
            if (!_outDevice.Open())
            {
              MessageBox.Show(this, "Midi device could not be opened! Error " + _outDevice.LastErrorCode.ToString(), "Midi Error");
            }
            ...
            // when done
            if (_outDevice.IsOpened)
              _outDevice.Close();
            ...
            private void OutDevice_MessageReceived(object sender, MidiMessageEventArgs e)
            {
              if (e.EventType == MidiMessageEventType.Opened)
              {
                Console.WriteLine("Midi device {0} opened.", e.DeviceID);
              }
              else if (e.EventType == MidiMessageEventType.Closed)
              {
                Console.WriteLine("Midi device {0} closed.", e.DeviceID);
              }
            }
            </code>
            <code lang="VB">
            Private _outDevice As MidiOutputDevice
            ...
            _outDevice = New MidiOutputDevice(0)
            AddHandler _outDevice.MessageReceived, AddressOf OutDevice_MessageReceived
            If Not _outDevice.Open() Then
              MessageBox.Show(Me, "Midi device could not be opened! Error " + _outDevice.LastErrorCode.ToString(), "Midi Error")
            End If
            ...
            ' when done
            If _outDevice.IsOpened Then
              _outDevice.Close()
            End If
            ...
            Private Sub OutDevice_MessageReceived(sender As Object, e As MidiMessageEventArgs)
              If e.EventType = MidiMessageEventType.Opened Then
               Console.WriteLine("Midi device {0} opened.", e.DeviceID)
              Else
                If e.EventType = MidiMessageEventType.Closed Then
                  Console.WriteLine("Midi device {0} closed.", e.DeviceID)
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(radio42.Multimedia.Midi.MidiShortMessage)">
            <summary>
            Sends a short message to the output <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/>.
            </summary>
            <param name="shortMessage">The instance of the <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> to send.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.LastErrorCode"/> for details).</returns>
            <remarks>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> must have been opened with the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method (or check <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.IsOpened"/>) before sending any message.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = new MidiOutputDevice(0);
            if (!_outDevice.Open())
              Console.WriteLine( "Could not open Midi device!" );
            
            // create and send a new short message to the output device
            MidiShortMessage msg = new MidiShortMessage(MIDIStatus.NoteOn, 0, 64, 65, 0);
            if (_outDevice.Send(msg))
              Console.WriteLine("Error sending short message!");
            </code>
            <code lang="VB">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = New MidiOutputDevice(0)
            If Not _outDevice.Open() Then
              Console.WriteLine("Could not open Midi device!")
            End If 
            
            ' create and send a new short message to the output device
            Dim msg As New MidiShortMessage(MIDIStatus.NoteOn, 0, 64, 65, 0)
            If _outDevice.Send(msg) Then
              Console.WriteLine("Error sending short message!")
            End If
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(System.Int32)">
            <summary>
            Sends a short message to the output <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/>.
            </summary>
            <param name="shortMessage">The short message value to use.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.LastErrorCode"/> for details).</returns>
            <remarks>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> must have been opened with the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method (or check <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.IsOpened"/>) before sending any message.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = new MidiOutputDevice(0);
            if ( !_outDevice.Open() )
              Console.WriteLine( "Could not open Midi device!" );
            
            // send a new short message to the output device
            if ( _outDevice.Send(0x414090) )
              Console.WriteLine("Error sending short message!");
            </code>
            <code lang="VB">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = New MidiOutputDevice(0)
            If Not _outDevice.Open() Then
              Console.WriteLine("Could not open Midi device!")
            End If 
            
            ' send a new short message to the output device
            If _outDevice.Send(&amp;H414090) Then
              Console.WriteLine("Error sending short message!")
            End If
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(radio42.Multimedia.Midi.MIDIStatus,System.Byte,System.Byte,System.Byte)">
            <summary>
            Sends a short message to the output <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/>.
            </summary>
            <param name="status">The <see cref="T:radio42.Multimedia.Midi.MIDIStatus"/> to use to construct the short message.</param>
            <param name="channel">The channel number to use to construct the short message (will be combined with the <paramref name="status"/> in lower 4-bits).</param>
            <param name="data1">The Data1 value to use to construct the short message.</param>
            <param name="data2">The Data2 value to use to construct the short message.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.LastErrorCode"/> for details).</returns>
            <remarks>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> must have been opened with the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method (or check <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.IsOpened"/>) before sending any message.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = new MidiOutputDevice(0);
            if ( !_outDevice.Open() )
              Console.WriteLine("Could not open Midi device!");
            
            // send a new short message to the output device
            if ( _outDevice.Send((byte)MIDIStatus.NoteOn, 1, 64, 65) )
              Console.WriteLine("Error sending short message!");
            </code>
            <code lang="VB">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = New MidiOutputDevice(0)
            If Not _outDevice.Open() Then
              Console.WriteLine("Could not open Midi device!")
            End If 
            
            ' send a new short message to the output device
            If _outDevice.Send(CByte(MIDIStatus.NoteOn), 1, 64, 65) Then
              Console.WriteLine("Error sending short message!")
            End If
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(System.Byte,System.Byte,System.Byte)">
            <summary>
            Sends a short message to the output <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/>.
            </summary>
            <param name="status">The <see cref="T:radio42.Multimedia.Midi.MIDIStatus"/> to use to construct the short message.</param>
            <param name="data1">The Data1 value to use to construct the short message.</param>
            <param name="data2">The Data2 value to use to construct the short message.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.LastErrorCode"/> for details).</returns>
            <remarks>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> must have been opened with the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method (or check <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.IsOpened"/>) before sending any message.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = new MidiOutputDevice(0);
            if ( !_outDevice.Open() )
              Console.WriteLine("Could not open Midi device!");
            
            // send a new short message to the output device
            if ( _outDevice.Send(0x90, 40, 41) )
              Console.WriteLine("Error sending short message!");
            </code>
            <code lang="VB">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = New MidiOutputDevice(0)
            If Not _outDevice.Open() Then
              Console.WriteLine("Could not open Midi device!")
            End If 
            
            ' send a new short message to the output device
            If _outDevice.Send(&amp;H90, 40, 41) Then
              Console.WriteLine("Error sending short message!")
            End If
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(radio42.Multimedia.Midi.MidiSysExMessage)">
            <summary>
            Sends a system-exclusive message to the output <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/>.
            </summary>
            <param name="sysexMessage">The unprepared instance of the <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/> to send.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.LastErrorCode"/> for details).</returns>
            <remarks>The <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/> must be created for this output <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> and must be unprepared (meaning the <see cref="M:radio42.Multimedia.Midi.MidiSysExMessage.Prepare"/> method should not have been called yet, since this will be handled inside this method).
            <para>If you created the system-exclusive message for a different <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> this method will return <see langword="false"/>.</para>
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> must have been opened with the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method (or check <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.IsOpened"/>) before sending any message.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = new MidiOutputDevice(0);
            if ( !_outDevice.Open() )
              Console.WriteLine("Could not open Midi device!");
            
            // create a new system-exclusive message for the output device
            MidiSysExMessage sysex = new MidiSysExMessage(false, _outDevice.Device);
            sysex.CreateBuffer(new byte[7] {0xF0, 0x43, 0x75, 0x73, 0x12, 0x00, 0xF7});
            // send it
            if ( _outDevice.Send(sysex) )
              Console.WriteLine("Error sending system-exclusive message!");
            </code>
            <code lang="VB">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = New MidiOutputDevice(0)
            If Not _outDevice.Open() Then
              Console.WriteLine("Could not open Midi device!")
            End If 
            
            ' create a new system-exclusive message for the output device
            Dim sysex As New MidiSysExMessage(False, _outDevice.Device)
            sysex.CreateBuffer(New Byte(7) {&amp;HF0, &amp;H43, &amp;H75, &amp;H73, &amp;H12, &amp;H0, &amp;HF7})
            ' send it
            If _outDevice.Send(sysex) Then
              Console.WriteLine("Error sending system-exclusive message!")
            End If
            </code>
            </example>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(System.Byte[])">
            <summary>
            Sends a system-exclusive message to the output <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/>.
            </summary>
            <param name="sysexMessage">The byte array containing system-exclusive message data buffer to send.</param>
            <returns><see langword="true"/> on success, else <see langword="false"/> (see <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.LastErrorCode"/> for details).</returns>
            <remarks>The byte array should normally start with 0xF0 and end with 0xF7 - however, no validity check is performed on this.
            <para>The <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.Device"/> must have been opened with the <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Open"/> method (or check <see cref="P:radio42.Multimedia.Midi.MidiOutputDevice.IsOpened"/>) before sending any message.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = new MidiOutputDevice(0);
            if ( !_outDevice.Open() )
              Console.WriteLine( "Could not open Midi device!" );
            
            // send a new system-exclusive message to the output device
            if (_outDevice.Send(new byte[7] {0xF0, 0x43, 0x75, 0x73, 0x12, 0x00, 0xF7}))
              Console.WriteLine("Error sending system-exclusive message!");
            </code>
            <code lang="VB">
            private MidiOutputDevice _outDevice = null;
            ...
            _outDevice = New MidiOutputDevice(0)
            If Not _outDevice.Open() Then
              Console.WriteLine("Could not open Midi device!")
            End If 
            
            ' send a new system-exclusive message to the output device
            If _outDevice.Send(New Byte(7) {&amp;HF0, &amp;H43, &amp;H75, &amp;H73, &amp;H12, &amp;H0, &amp;HF7}) Then
              Console.WriteLine("Error sending system-exclusive message!")
            End If
            </code>
            </example>
        </member>
        <member name="T:radio42.Multimedia.Midi.MidiMessageEventHandler">
            <summary>
            Definition of the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> and <see cref="E:radio42.Multimedia.Midi.MidiOutputDevice.MessageReceived"/> event handler.
            </summary>
            <param name="sender">Set to the <see cref="T:radio42.Multimedia.Midi.MidiInputDevice"/> resp. the <see cref="T:radio42.Multimedia.Midi.MidiOutputDevice"/> object instance that raised the event.</param>
            <param name="e">An instance of the <see cref="T:radio42.Multimedia.Midi.MidiMessageEventArgs"/> event args containing the event details.</param>
            <remarks>
            This definition complies with the .NET Framework's standard for event handlers.
            </remarks>
        </member>
        <member name="T:radio42.Multimedia.Midi.MidiMessageEventType">
            <summary>
            Types of Midi message event that has occurred with the <see cref="T:radio42.Multimedia.Midi.MidiInputDevice"/> resp. <see cref="T:radio42.Multimedia.Midi.MidiOutputDevice"/> class.
            </summary>
            <remarks>
            A variable of this type is passed inside the <see cref="T:radio42.Multimedia.Midi.MidiMessageEventArgs"/> object 
            for the <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> or <see cref="E:radio42.Multimedia.Midi.MidiOutputDevice.MessageReceived"/> event.
            </remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MidiMessageEventType.Opened">
            <summary>
            The Midi device was opened.
            <para>Message: Not used (null).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MidiMessageEventType.Closed">
            <summary>
            The Midi device was closed (any device handle is no longer valid from this point on).
            <para>Message: Not used (null).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MidiMessageEventType.Started">
            <summary>
            The Midi device was started.
            <para>Message: The Midi device ID started (int).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MidiMessageEventType.Stopped">
            <summary>
            The Midi device was stopped (Midi messages will no longer being send).
            <para>Message:  The Midi device ID stopped (int).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MidiMessageEventType.ShortMessage">
            <summary>
            A Midi short message was received by the device (only valid for a <see cref="T:radio42.Multimedia.Midi.MidiInputDevice"/>).
            <para>Message: <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MidiMessageEventType.SystemExclusive">
            <summary>
            A Midi system-exclusive message was received by the device (valid for a <see cref="T:radio42.Multimedia.Midi.MidiInputDevice"/> and a <see cref="T:radio42.Multimedia.Midi.MidiOutputDevice"/>).
            <para>Message: <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/>.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MidiMessageEventType.ShortMessageError">
            <summary>
            An invalid Midi short message was received by the device (only valid for a <see cref="T:radio42.Multimedia.Midi.MidiInputDevice"/>).
            <para>Message: <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> (constructed even if invalid).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MidiMessageEventType.SystemExclusiveError">
            <summary>
            An invalid Midi system-exclusive message was received by the device (valid for a <see cref="T:radio42.Multimedia.Midi.MidiInputDevice"/> and a <see cref="T:radio42.Multimedia.Midi.MidiOutputDevice"/>).
            <para>Message: <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/> (constructed even if invalid).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MidiMessageEventType.SystemExclusiveDone">
            <summary>
            A Midi system-exclusive message was processed by the output device (valid for a <see cref="T:radio42.Multimedia.Midi.MidiOutputDevice"/> only).
            <para>Message: <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/> (as send via <see cref="M:radio42.Multimedia.Midi.MidiOutputDevice.Send(radio42.Multimedia.Midi.MidiShortMessage)"/>).</para>
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MidiMessageEventArgs">
            <summary>
            EventArgs class to be passed as the second parameter of a <see cref="E:radio42.Multimedia.Midi.MidiInputDevice.MessageReceived"/> or <see cref="E:radio42.Multimedia.Midi.MidiOutputDevice.MessageReceived"/> event handler.
            </summary>
            <remarks>
            This class provides all the information relevant to a Midi message event which might occur to a <see cref="T:radio42.Multimedia.Midi.MidiInputDevice"/> or <see cref="T:radio42.Multimedia.Midi.MidiOutputDevice"/> class.
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MidiMessageEventArgs.#ctor(radio42.Multimedia.Midi.MidiMessageEventType,System.Int32,System.IntPtr,System.Object)">
            <summary>
            Initializes a new instance of the MidiMessageEventArgs class by initializing all of its properties.
            </summary>
            <param name="pEventType">The type of event which occurred (see <see cref="T:radio42.Multimedia.Midi.MidiMessageEventArgs"/>).</param>
            <param name="pDeviceID">The Midi device ID associated to this event.</param>
            <param name="pDevice">The Midi device handle associated to this event.</param>
            <param name="pMessage">The data which should be passed along with the message event (depending on the event type this could be a <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>, <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/> or <see langword="null"/>).</param>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiMessageEventArgs.EventType">
            <summary>
            Gets the type of event which occurred.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiMessageEventArgs.DeviceID">
            <summary>
            Gets the Midi device ID on which the event occurred.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiMessageEventArgs.Device">
            <summary>
            Gets the Midi device handle on which the event occurred.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiMessageEventArgs.Message">
            <summary>
            Gets the message which was passed along with the event.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiMessageEventArgs.ShortMessage">
            <summary>
            Gets the Midi short message which was passed along with the event.
            </summary>
            <remarks>Should only be used, if the <see cref="P:radio42.Multimedia.Midi.MidiMessageEventArgs.EventType"/> is <see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.ShortMessage"/> or <see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.ShortMessageError"/>.
            For other event types this property will return <see langword="null"/>.
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiMessageEventArgs.IsShortMessage">
            <summary>
            Returns <see langword="true"/>, if a Midi short message was passed along with the event (else <see langword="false"/>).
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiMessageEventArgs.SysExMessage">
            <summary>
            Gets the Midi system-exclusive message which was passed along with the event.
            </summary>
            <remarks>Should only be used, if the <see cref="P:radio42.Multimedia.Midi.MidiMessageEventArgs.EventType"/> is <see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.SystemExclusive"/>, <see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.SystemExclusiveError"/> or <see cref="F:radio42.Multimedia.Midi.MidiMessageEventType.SystemExclusiveDone"/>.
            For other event types this property will return <see langword="null"/>.
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MidiMessageEventArgs.IsSysExMessage">
            <summary>
            Returns <see langword="true"/>, if a Midi system-exclusive message which was passed along with the event (else <see langword="false"/>).
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIError">
            <summary>
            General list of Midi Error Codes.
            </summary>
            <remarks>In order to retrieve a textual description of the error code use <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_GetErrorText(System.Boolean,System.Int32)"/>.</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_OK">
            <summary>
            no error
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_ERROR">
            <summary>
            unspecified error
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_BADDEVICEID">
            <summary>
            device ID out of range
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_NOTENABLED">
            <summary>
            driver failed enable
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_ALLOCATED">
            <summary>
            device already allocated
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_INVALHANDLE">
            <summary>
            device handle is invalid
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_NODRIVER">
            <summary>
            no device driver present
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_NOMEM">
            <summary>
            memory allocation error
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_NOTSUPPORTED">
            <summary>
            function isn't supported
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_BADERRNUM">
            <summary>
            error value out of range
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_INVALFLAG">
            <summary>
            invalid flag passed
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_INVALPARAM">
            <summary>
            invalid parameter passed
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_HANDLEBUSY">
            <summary>
            handle being used
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_INVALIDALIAS">
            <summary>
            specified alias not found
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_BADDB">
            <summary>
            bad registry database
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_KEYNOTFOUND">
            <summary>
            registry key not found
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_READERROR">
            <summary>
            registry read error
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_WRITEERROR">
            <summary>
            registry write error
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_DELETEERROR">
            <summary>
            registry delete error
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_VALNOTFOUND">
            <summary>
            registry value not found
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_NODRIVERCB">
            <summary>
            driver does not call DriverCallback
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_UNPREPARED">
            <summary>
            header not prepared
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_STILLPLAYING">
            <summary>
            still something playing
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_NOMAP">
            <summary>
            no configured instruments
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_NOTREADY">
            <summary>
            hardware is still busy
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_NODEVICE">
            <summary>
            port no longer connected
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_INVALIDSETUP">
            <summary>
            invalid MIF
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_BADOPENMODE">
            <summary>
            operation unsupported w/ open mode
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIError.MIDI_ERROR_DONT_CONTINUE">
            <summary>
            thru device 'eating' a message
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIFlags">
            <summary>
            General Midi Flags.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIFlags.MIDI_CALLBACK_NULL">
            <summary>
            No callback.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIFlags.MIDI_CALLBACK_FUNCTION">
            <summary>
            To be used with <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIINPROC,System.IntPtr,radio42.Multimedia.Midi.MIDIFlags)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIOUTPROC,System.IntPtr)"/> to define the general Midi callback procedure address.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIFlags.MIDI_IO_STATUS">
            <summary>
            When this parameter is also specified with the MIDI_CALLBACK_FUNCTION, then MIM_MOREDATA messages are sent to the callback function as well as MIM_DATA messages.
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIMessage">
            <summary>
            Midi Message Types.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MIM_OPEN">
            <summary>
            The MIM_OPEN message is sent to a MIDI input callback function when a MIDI input device is opened.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>Not used.</description></item>
            <item><term>param2</term><description>Not used.</description></item>
            </list>
            </para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MIM_CLOSE">
            <summary>
            The MIM_CLOSE message is sent to a MIDI input callback function when a MIDI input device is closed.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>Not used.</description></item>
            <item><term>param2</term><description>Not used.</description></item>
            </list>
            </para>
            <para>The device handle is no longer valid after this message has been sent.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MIM_DATA">
            <summary>
            The MIM_DATA message is sent to a MIDI input callback function when a MIDI message is received by a MIDI input device.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>MIDI message that was received. The message is packed into a doubleword value as follows:
            <para>High word: High-order byte: Not used. Low-order byte: Contains a second byte of MIDI data (when needed).</para>
            <para>Low word: High-order byte: Contains the first byte of MIDI data (when needed). Low-order byte: Contains the MIDI status.</para>
            <para>The two MIDI data bytes are optional, depending on the MIDI status byte.</para>
            </description></item>
            <item><term>param2</term><description>Time that the message was received by the input device driver. The time stamp is specified in milliseconds, beginning at zero when the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/> function was called.</description></item>
            </list>
            </para>
            <para>MIDI messages received from a MIDI input port have running status disabled; each message is expanded to include the MIDI status byte.</para>
            <para>This message is not sent when a MIDI system-exclusive message is received.</para>
            <para>You might used the <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> class to construct and or unpack the message into it's components.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA">
            <summary>
            The MIM_LONGDATA message is sent to a MIDI input callback function when a system-exclusive buffer has been filled with data and is being returned to the application.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>Pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure identifying the input buffer.</description></item>
            <item><term>param2</term><description>Time that the message was received by the input device driver. The time stamp is specified in milliseconds, beginning at zero when the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/> function was called.</description></item>
            </list>
            </para>
            <para>The returned buffer might not be full. To determine the number of bytes recorded into the returned buffer, use the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.Data"/> member of the MIDI_HEADER structure specified by param1.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MIM_ERROR">
            <summary>
            The MIM_ERROR message is sent to a MIDI input callback function when an invalid MIDI message is received.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>Invalid MIDI message that was received. The message is packed into a doubleword value with the first byte of the message in the low-order byte.</description></item>
            <item><term>param2</term><description>Time that the message was received by the input device driver. The time stamp is specified in milliseconds, beginning at zero when the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/> function was called.</description></item>
            </list>
            </para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR">
            <summary>
            The MIM_LONGERROR message is sent to a MIDI input callback function when an invalid or incomplete MIDI system-exclusive message is received.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>Pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure identifying the buffer containing the invalid message.</description></item>
            <item><term>param2</term><description>Time that the message was received by the input device driver. The time stamp is specified in milliseconds, beginning at zero when the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/> function was called.</description></item>
            </list>
            </para>
            <para>The returned buffer might not be full. To determine the number of bytes recorded into the returned buffer, use the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.Data"/> member of the MIDI_HEADER structure specified by param1.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MIM_MOREDATA">
            <summary>
            The MIM_MOREDATA message is sent to a MIDI input callback function when a MIDI message is received by a MIDI input device but the application is not processing MIM_DATA messages fast enough to keep up with the input device driver. The callback function receives this message only when the application specifies MIDI_IO_STATUS in the call to the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIINPROC,System.IntPtr,radio42.Multimedia.Midi.MIDIFlags)"/> function.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>MIDI message that was received. The message is packed into a doubleword value as follows:
            <para>High word: High-order byte: Not used. Low-order byte: Contains a second byte of MIDI data (when needed).</para>
            <para>Low word: High-order byte: Contains the first byte of MIDI data (when needed). Low-order byte: Contains the MIDI status.</para>
            <para>The two MIDI data bytes are optional, depending on the MIDI status byte.</para>
            </description></item>
            <item><term>param2</term><description>Time that the message was received by the input device driver. The time stamp is specified in milliseconds, beginning at zero when the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InStart(System.IntPtr)"/> function was called.</description></item>
            </list>
            </para>
            <para>An application should do only a minimal amount of processing of MIM_MOREDATA messages. (In particular, applications should not call the PostMessage function while processing MIM_MOREDATA.) Instead, the application should place the event data into a buffer and then return.</para>
            <para>When an application receives an MIM_DATA message after a series of MIM_MOREDATA messages, it has caught up with incoming MIDI events and can safely call time-intensive functions.</para>
            <para>MIDI messages received from a MIDI input port have running status disabled; each message is expanded to include the MIDI status byte.</para>
            <para>This message is not sent when a MIDI system-exclusive message is received.</para>
            <para>You might used the <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> class to construct and or unpack the message into it's components.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MOM_OPEN">
            <summary>
            The MOM_OPEN message is sent to a MIDI output callback function when a MIDI output device is opened.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>Not used.</description></item>
            <item><term>param2</term><description>Not used.</description></item>
            </list>
            </para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MOM_CLOSE">
            <summary>
            The MOM_CLOSE message is sent to a MIDI output callback function when a MIDI output device is closed.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>Not used.</description></item>
            <item><term>param2</term><description>Not used.</description></item>
            </list>
            </para>
            <para>The device handle is no longer valid after this message has been sent.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessage.MOM_DONE">
            <summary>
            The MOM_DONE message is sent to a MIDI output callback function when the specified system-exclusive or stream buffer has been played and is being returned to the application.
            <para>
            <list type="table">
            <listheader><term>Parameters:</term><description></description></listheader>
            <item><term>param1</term><description>Pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure identifying the input buffer.</description></item>
            <item><term>param2</term><description>Not used.</description></item>
            </list>
            </para>
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIDevice">
            <summary>
            Type of the MIDI output device, to be used with the <see cref="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.technology"/> flag field.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIDevice.MOD_UNKNOWN">
            <summary>
            Unknown MIDI device.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIDevice.MOD_MIDIPORT">
            <summary>
            MIDI hardware port.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIDevice.MOD_SYNTH">
            <summary>
            Synthesizer.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIDevice.MOD_SQSYNTH">
            <summary>
            Square wave synthesizer.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIDevice.MOD_FMSYNTH">
            <summary>
            FM synthesizer.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIDevice.MOD_MAPPER">
            <summary>
            Microsoft MIDI mapper.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIDevice.MOD_WAVETABLE">
            <summary>
            Hardware wavetable synthesizer.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIDevice.MOD_SWSYNTH">
            <summary>
            Software synthesizer.
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIHeader">
            <summary>
            Flag of the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> flags property.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHeader.MHDR_NONE">
            <summary>
            Unprepared. No flags set.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHeader.MHDR_DONE">
            <summary>
            Set by the device driver to indicate that it is finished with the buffer and is returning it to the application.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHeader.MHDR_PREPARED">
            <summary>
            Set by Windows to indicate that the buffer has been prepared by using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutPrepareHeader(System.IntPtr,System.IntPtr)"/> function.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHeader.MHDR_INQUEUE">
            <summary>
            Set by Windows to indicate that the buffer is queued for playback.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHeader.MHDR_ISSTRM">
            <summary>
            Set to indicate that the buffer is a stream buffer.
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIMessageType">
            <summary>
            Defines constants representing MIDI message types.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessageType.Unknown">
            <summary>
            Unknown Message type (see <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>).
            <para>All messages, which do not conform a <see cref="F:radio42.Multimedia.Midi.MIDIMessageType.Channel"/>, <see cref="F:radio42.Multimedia.Midi.MIDIMessageType.SystemCommon"/>, <see cref="F:radio42.Multimedia.Midi.MIDIMessageType.SystemRealtime"/> or <see cref="F:radio42.Multimedia.Midi.MIDIMessageType.SystemExclusive"/> message are considered as unknown.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessageType.Channel">
            <summary>
            A Channel Message (see <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>).
            <para>The status byte is split into two halfs (the 4 high-bits contains the type and the 4 lower-bits contain the controler channel number).</para>
            <para>The data byte 1 and data byte 2 might be used. Some messages occure in pairs meaning a second message will provide additional data bytes.</para>
            <para>The following status is recognized as Channel messages: <see cref="F:radio42.Multimedia.Midi.MIDIStatus.NoteOn"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.NoteOff"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Aftertouch"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ChannelPressure"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ProgramChange"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.PitchBend"/> and <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/>.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessageType.SystemCommon">
            <summary>
            A SystemCommon Message (see <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>).
            <para>The status byte contains the message type itself.</para>
            <para>The data byte 1 and data byte 2 might be used. Some messages are spaned over multiple messages to provide additional data bytes.</para>
            <para>The following status is recognized as SystemCommon messages: <see cref="F:radio42.Multimedia.Midi.MIDIStatus.MidiTimeCode"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.SongPosition"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.SongSelect"/> and <see cref="F:radio42.Multimedia.Midi.MIDIStatus.TuneRequest"/>.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessageType.SystemRealtime">
            <summary>
            A SystemRealtime Message (see <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/>).
            <para>The status byte contains the message type itself.</para>
            <para>No data bytes are used with SystemRealtime messages.</para>
            <para>The following status is recognized as SystemRealtime messages: <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Clock"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Tick"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Start"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Continue"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Stop"/>, <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ActiveSense"/> and <see cref="F:radio42.Multimedia.Midi.MIDIStatus.Reset"/>.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMessageType.SystemExclusive">
            <summary>
            A SystemExclusive Message (see <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/>).
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIStatus">
            <summary>
            Defines constants for Midi message status. 
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.None">
            <summary>
            No status.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.NoteOff">
            <summary>
            Channel Message: Note Off.
            <para>Status: 0x80 to 0x8F where the low nibble is the MIDI channel.</para>
            <para>Data1: The first data is the note number. There are 128 possible notes on a MIDI device, numbered 0 to 127 (where Middle C is note number 60). This indicates which note should be released.</para>
            <para>Data2: The second data byte is the velocity, a value from 0 to 127. This indicates how quickly the note should be released (where 127 is the fastest). It's up to a MIDI device how it uses velocity information. Often velocity will be used to tailor the VCA release time. MIDI devices that can generate Note Off messages, but don't implement velocity features, will transmit Note Off messages with a preset velocity of 64.</para>
            <para>This status might also be used, if the Midi message actually returned 'NoteOn' but with a velocity (data2) of 0. The <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> class already translates those messages to NoteOff (see <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/>).</para>
            <para>An 'AllNotesOff' ControlChange message can be used to turn off all notes for which a device received NoteOn messages (without having received respective Note Off messages).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.NoteOn">
            <summary>
            Channel Message: Note On.
            <para>Status: 0x90 to 0x9F where the low nibble is the MIDI channel.</para>
            <para>Data1: The first data is the note number. There are 128 possible notes on a MIDI device, numbered 0 to 127 (where Middle C is note number 60). This indicates which note should be played.</para>
            <para>Data2: The second data byte is the velocity, a value from 0 to 127. This indicates with how much force the note should be played (where 127 is the most force). It's up to a MIDI device how it uses velocity information. Often velocity is be used to tailor the VCA attack time and/or attack level (and therefore the overall volume of the note). MIDI devices that can generate Note On messages, but don't implement velocity features, will transmit Note On messages with a preset velocity of 64.</para>
            <para>NoteOn message that has a velocity of 0 is considered to actually be a NoteOff message!, and the respective note is therefore released. The <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> class already translates those messages to NoteOff (see <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/>).</para>
            <para>An 'AllNotesOff' ControlChange message can be used to turn off all notes for which a device received NoteOn messages (without having received respective Note Off messages).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.Aftertouch">
            <summary>
            Channel Message: Polyphonic Aftertouch (Polyphonic Pressure).
            <para>Status: 0xA0 to 0xAF where the low nibble is the MIDI channel.</para>
            <para>Data1: The first data is the note number. There are 128 possible notes on a MIDI device, numbered 0 to 127 (where Middle C is note number 60). This indicates to which note the pressure is being applied.</para>
            <para>Data2: The second data byte is the pressure amount, a value from 0 to 127 (where 127 is the most pressure).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange">
            <summary>
            Channel Message: Control Change.
            <para>Status: 0xB0 to 0xBF where the low nibble is the MIDI channel.</para>
            <para>Data1: The first data is the controller number (0 to 127). This indicates which controller is affected by the received MIDI message.</para>
            <para>Data2: The second data byte is the value to which the controller should be set, a value from 0 to 127.</para>
            <para>Some Midi data messages might actually use two sub-sequent short messages to construct a paired message representing a single value range (e.g. the <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> with a <see cref="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect"/>).
            This to support paired values with a higher resolution (16384 instead of 128 values). The same might apply the the controller value itself.
            In such case two short messages will be send, where one contains the LSB value (single steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> or <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte and the other message contains the MSB value (128th steps) in it's <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data2"/> or <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Data1"/> byte.
            Typically the messages with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> of <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> and with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 0 and 31 (MSB) are paired with a message of a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value between 32 and 63 (LSB).
            But also a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 98 (LSB) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 99 (MSB) as well as a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 100 (LSB) will be paired with a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.Controller"/> value of 101 (MSB).
            Other pairs might be hardware specific.</para>
            <para>An 'AllControllersOff' ControlChange message can be used to reset all controllers (that a MIDI device implements) to default values.
            See the <see cref="T:radio42.Multimedia.Midi.MIDIControllerType"/> for a list of defined controller numbers for more information about particular controllers.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.ProgramChange">
            <summary>
            Channel Message: Program Change.
            <para>Status: 0xC0 to 0xCF where the low nibble is the MIDI channel.</para>
            <para>Data1: The program number to change to, a number from 0 to 127.</para>
            <para>Data2: not used.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.ChannelPressure">
            <summary>
            Channel Message: Channel Pressure (Channel Aftertouch).
            <para>Status: 0xC0 to 0xCF where the low nibble is the MIDI channel.</para>
            <para>Data1: The program number to change to, a number from 0 to 127.</para>
            <para>Data2: not used.</para>
            <para>If multiple banks do exist a ProgramChange command will select a new program number from the current bank only.
            A different bank will be selected with two sub-sequent <see cref="F:radio42.Multimedia.Midi.MIDIStatus.ControlChange"/> commands. This will also be called a BankSelect command.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.PitchBend">
            <summary>
            Channel Message: Pitch Bend.
            <para>Status: 0xE0 to 0xEF where the low nibble is the MIDI channel.</para>
            <para>Data1: The first data byte's bits 0 to 6 are bits 0 to 6 of the 14-bit value.</para>
            <para>Data2: The second data byte's bits 0 to 6 are really bits 7 to 13 of the 14-bit value.</para>
            <para>The two data bytes should be combined together to form a single 14-bit value.</para>
            <para>A combined value of 0x2000 is meant to indicate that the Pitch Wheel is centered (ie, the sounding notes aren't being transposed up or down). Higher values transpose pitch up, and lower values transpose pitch down.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.SystemMsgs">
            <summary>
            SystemExclusive Message: Start of system-exclusive message.
            <para>Status: 0xF0.</para>
            <para>Various data bytes will follow, finally ending with an <see cref="F:radio42.Multimedia.Midi.MIDIStatus.EOX"/>.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.MidiTimeCode">
            <summary>
            SystemCommon Message: MIDI Time Code (see <see cref="T:radio42.Multimedia.Midi.MIDIMTCType"/> for details).
            <para>Status: 0xF1.</para>
            <para>Data1: It's the time code value, a number from 0 to 127.</para>
            <para>Data2: not used.</para>
            <para>The two data bytes should be combined together to form a single 14-bit value.</para>
            <para>See the <see cref="T:radio42.Multimedia.Midi.MIDIMTCType"/> for details.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.SongPosition">
            <summary>
            SystemCommon Message: Song Position Pointer.
            <para>Status: 0xF2.</para>
            <para>Data1: The first data byte's bits 0 to 6 are bits 0 to 6 of the 14-bit value.</para>
            <para>Data2: The second data byte's bits 0 to 6 are really bits 7 to 13 of the 14-bit value.</para>
            <para>The two data bytes should be combined together to form a single 14-bit value.
            This 14-bit value is the MIDI Beat upon which to start the song. Songs are always assumed to start on a MIDI Beat of 0. Each MIDI Beat spans 6 MIDI Clocks. In other words, each MIDI Beat is a 16th note (since there are 24 MIDI Clocks in a quarter note).</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.SongSelect">
            <summary>
            SystemCommon Message: Song Select.
            <para>Status: 0xF3.</para>
            <para>Data1: The song number, a value from 0 to 127.</para>
            <para>Data2: not used.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.TuneRequest">
            <summary>
            SystemCommon Message: Tune Request.
            <para>Status: 0xF6.</para>
            <para>Data1: not used.</para>
            <para>Data2: not used.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.EOX">
            <summary>
            SystemExclusive Message: End of system-exclusive message.
            <para>Status: 0xF7.</para>
            <para>No data bytes should follow.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.Clock">
            <summary>
            SystemRealtime Message: Timing Clock.
            <para>Status: 0xF8.</para>
            <para>Data1: not used.</para>
            <para>Data2: not used.</para>
            <para>There are 24 MIDI Clocks in every quarter note. (12 MIDI Clocks in an eighth note, 6 MIDI Clocks in a 16th, etc). Therefore, when a slave device counts down the receipt of 24 MIDI Clock messages, it knows that one quarter note has passed.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.Tick">
            <summary>
            SystemRealtime Message: Tick System Realtime.
            <para>Status: 0xF9.</para>
            <para>Data1: not used.</para>
            <para>Data2: not used.</para>
            <para>While a master device's 'Clock' is playing back, it will send a continuous stream of MIDI Tick events at a rate of one per every 10 milliseconds.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.Start">
            <summary>
            SystemRealtime Message: Start.
            <para>Status: 0xFA.</para>
            <para>Data1: not used.</para>
            <para>Data2: not used.</para>
            <para>MIDI Start always begins playback at MIDI Beat 0 (ie, the very beginning of the song). So, when a slave device receives a MIDI Start, it automatically resets its "Song Position" to 0. If the device needs to start playback at some other point (either set by a previous Song Position Pointer message, or manually by the musician), then MIDI Continue is used instead of MIDI Start.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.Continue">
            <summary>
            SystemRealtime Message: Continue.
            <para>Status: 0xFB.</para>
            <para>Data1: not used.</para>
            <para>Data2: not used.</para>
            <para>Often, the slave device has its playback tempo synced to the master via MIDI Clock.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.Stop">
            <summary>
            SystemRealtime Message: Stop.
            <para>Status: 0xFC.</para>
            <para>Data1: not used.</para>
            <para>Data2: not used.</para>
            <para>When a device receives a MIDI Stop, it should keep track of the point at which it stopped playback (ie, its stopped "Song Position"), in the anticipation that a MIDI Continue might be received next.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.ActiveSense">
            <summary>
            SystemRealtime Message: Active Sense.
            <para>Status: 0xFE.</para>
            <para>Data1: not used.</para>
            <para>Data2: not used.</para>
            <para>A device sends out an Active Sense message (at least once) every 300 milliseconds if there has been no other activity on the MIDI buss, to let other devices know that there is still a good MIDI connection between the devices.
            This is an optional feature that only a few devices implement. Many devices don't ever initiate this minimal "safety" feature.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIStatus.Reset">
            <summary>
            SystemRealtime Message: System Reset.
            <para>Status: 0xFF.</para>
            <para>Data1: not used.</para>
            <para>Data2: not used.</para>
            <para>A Reset message should never be sent automatically by any MIDI device. Rather, this should only be sent when a musician specifically tells a device to do so.</para>
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIControllerType">
            <summary>
            Defines constants for controller types.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelect">
            <summary>
            Controller-Pair: The Bank Select coarse (0=MSB, 32=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.Modulation">
            <summary>
            Controller-Pair: The Modulation Wheel coarse (1=MSB, 33=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.BreathControl">
            <summary>
            Controller-Pair: The Breath Control coarse (2=MSB, 34=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User3">
            <summary>
            Controller-Pair: Un- or User defined controller 3 (3=MSB, 35=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.FootControl">
            <summary>
            Controller-Pair: The Foot Pedal coarse (4=MSB, 36=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.PortamentoTime">
            <summary>
            Controller-Pair: The Portamento Time coarse (5=MSB, 37=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.DataEntry">
            <summary>
            Controller-Pair: The Data Entry Slider coarse (6=MSB, 38=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.MainVolume">
            <summary>
            Controller-Pair: The Volume coarse (7=MSB, 39=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.Balance">
            <summary>
            Controller-Pair: The Balance coarse (8=MSB, 40=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User9">
            <summary>
            Controller-Pair: Un- or User defined controller 9 (9=MSB, 41=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.Panorama">
            <summary>
            Controller-Pair: The Pan position coarse (10=MSB, 42=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.Expression">
            <summary>
            Controller-Pair: The Expression coarse (11=MSB, 43=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.EffectControl1">
            <summary>
            Controller-Pair: The Effect Control 1 coarse (12=MSB, 44=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.EffectControl2">
            <summary>
            Controller-Pair: The Effect Control 2 coarse (13=MSB, 45=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User14">
            <summary>
            Controller-Pair: Un- or User defined controller 14 (14=MSB, 46=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User15">
            <summary>
            Controller-Pair: Un- or User defined controller 15 (15=MSB, 47=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurpose1">
            <summary>
            Controller-Pair: The General Puprose Slider 1 (16=MSB, 48=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurpose2">
            <summary>
            Controller-Pair: The General Puprose Slider 2 (17=MSB, 49=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurpose3">
            <summary>
            Controller-Pair: The General Puprose Slider 3 (18=MSB, 50=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurpose4">
            <summary>
            Controller-Pair: The General Puprose Slider 4 (19=MSB, 51=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User20">
            <summary>
            Controller-Pair: Un- or User defined controller 20 (20=MSB, 52=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User21">
            <summary>
            Controller-Pair: Un- or User defined controller 21 (21=MSB, 53=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User22">
            <summary>
            Controller-Pair: Un- or User defined controller 22 (22=MSB, 54=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User23">
            <summary>
            Controller-Pair: Un- or User defined controller 23 (23=MSB, 55=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User24">
            <summary>
            Controller-Pair: Un- or User defined controller 24 (24=MSB, 56=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User25">
            <summary>
            Controller-Pair: Un- or User defined controller 25 (25=MSB, 57=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User26">
            <summary>
            Controller-Pair: Un- or User defined controller 26 (26=MSB, 58=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User27">
            <summary>
            Controller-Pair: Un- or User defined controller 27 (27=MSB, 59=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User28">
            <summary>
            Controller-Pair: Un- or User defined controller 28 (28=MSB, 60=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User29">
            <summary>
            Controller-Pair: Un- or User defined controller 29 (29=MSB, 61=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User30">
            <summary>
            Controller-Pair: Un- or User defined controller 30 (30=MSB, 62=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User31">
            <summary>
            Controller-Pair: Un- or User defined controller 31 (31=MSB, 63=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.BankSelectFine">
            <summary>
            Controller-Pair: The Bank Select coarse (0=MSB, 32=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.ModulationFine">
            <summary>
            Controller-Pair: The Modulation Wheel coarse (1=MSB, 33=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.BreathControlFine">
            <summary>
            Controller-Pair: The Breath Control coarse (2=MSB, 34=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User3Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 3 (3=MSB, 35=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.FootControlFine">
            <summary>
            Controller-Pair: The Foot Pedal coarse (4=MSB, 36=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.PortamentoTimeFine">
            <summary>
            Controller-Pair: The Portamento Time coarse (5=MSB, 37=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.DataEntryFine">
            <summary>
            Controller-Pair: The Data Entry Slider coarse (6=MSB, 38=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.MainVolumeFine">
            <summary>
            Controller-Pair: The Volume coarse (7=MSB, 39=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.BalanceFine">
            <summary>
            Controller-Pair: The Balance coarse (8=MSB, 40=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User9Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 9 (9=MSB, 41=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.PanoramaFine">
            <summary>
            Controller-Pair: The Pan position coarse (10=MSB, 42=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.ExpressionFine">
            <summary>
            Controller-Pair: The Expression coarse (11=MSB, 43=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.EffectControl1Fine">
            <summary>
            Controller-Pair: The Effect Control 1 coarse (12=MSB, 44=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.EffectControl2Fine">
            <summary>
            Controller-Pair: The Effect Control 2 coarse (13=MSB, 45=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User14Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 14 (14=MSB, 46=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User15Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 15 (15=MSB, 47=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurpose1Fine">
            <summary>
            Controller-Pair: The General Puprose Slider 1 (16=MSB, 48=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurpose2Fine">
            <summary>
            Controller-Pair: The General Puprose Slider 2 (17=MSB, 49=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurpose3Fine">
            <summary>
            Controller-Pair: The General Puprose Slider 3 (18=MSB, 50=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurpose4Fine">
            <summary>
            Controller-Pair: The General Puprose Slider 4 (19=MSB, 51=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User20Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 20 (20=MSB, 52=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User21Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 21 (21=MSB, 53=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User22Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 22 (22=MSB, 54=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User23Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 23 (23=MSB, 55=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User24Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 24 (24=MSB, 56=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User25Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 25 (25=MSB, 57=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User26Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 26 (26=MSB, 58=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User27Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 27 (27=MSB, 59=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User28Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 28 (28=MSB, 60=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User29Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 29 (29=MSB, 61=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User30Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 30 (30=MSB, 62=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User31Fine">
            <summary>
            Controller-Pair: Un- or User defined controller 31 (31=MSB, 63=LSB).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.HoldPedal1">
            <summary>
            Non-Continuous: The Hold Pedal 1.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.Portamento">
            <summary>
            Non-Continuous: The Portamento.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SustenutoPedal">
            <summary>
            Non-Continuous: The Sustenuto Pedal.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoftPedal">
            <summary>
            Non-Continuous: The Soft Pedal.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.LegatoPedal">
            <summary>
            Non-Continuous: The Legato Pedal.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.HoldPedal2">
            <summary>
            Non-Continuous: The Hold Pedal 2.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundVariation">
            <summary>
            The Sound Variation.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundTimbre">
            <summary>
            The Sound Timbre.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundReleaseTime">
            <summary>
            The Sound Release Time.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundAttackTime">
            <summary>
            The Sound Attack Time.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundBrightness">
            <summary>
            The Sound Brightness.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundControl6">
            <summary>
            The Sound Control 6.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundControl7">
            <summary>
            The Sound Control 7.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundControl8">
            <summary>
            The Sound Control 8.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundControl9">
            <summary>
            The Sound Control 9.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.SoundControl10">
            <summary>
            The Sound Control 10.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton1">
            <summary>
            The General Purpose Button 1.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton2">
            <summary>
            The General Purpose Button 2.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton3">
            <summary>
            The General Purpose Button 3.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton4">
            <summary>
            The General Purpose Button 4.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton5">
            <summary>
            The General Purpose Button 5.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton6">
            <summary>
            The General Purpose Button 6.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton7">
            <summary>
            The General Purpose Button 7.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton8">
            <summary>
            The General Purpose Button 8.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton9">
            <summary>
            The General Purpose Button 9.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton10">
            <summary>
            The General Purpose Button 10.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.GeneralPurposeButton11">
            <summary>
            The General Purpose Button 11.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.EffectsLevel">
            <summary>
            The Effects Level.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.TremeloLevel">
            <summary>
            The Tremelo Level.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.ChorusLevel">
            <summary>
            The Chorus Level.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.CelesteLevel">
            <summary>
            The Celeste Level.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.PhaserLevel">
            <summary>
            The Phaser Level.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.DataButtonIncrement">
            <summary>
            The Data Button Increment.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.DataButtonDecrement">
            <summary>
            The Data Button Decrement.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.NonRegisteredParameterFine">
            <summary>
            Controller-Pair: The NonRegistered Parameter Fine.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.NonRegisteredParameterCoarse">
            <summary>
            Controller-Pair: The NonRegistered Parameter Coarse.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.RegisteredParameterFine">
            <summary>
            Controller-Pair: The Registered Parameter Fine.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.RegisteredParameterCoarse">
            <summary>
            Controller-Pair: The Registered Parameter Coarse.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User102">
            <summary>
            User Controller 102.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User103">
            <summary>
            User Controller 103.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User104">
            <summary>
            User Controller 104.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User105">
            <summary>
            User Controller 105.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User106">
            <summary>
            User Controller 106.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User107">
            <summary>
            User Controller 107.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User108">
            <summary>
            User Controller 108.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User109">
            <summary>
            User Controller 109.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User110">
            <summary>
            User Controller 110.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User111">
            <summary>
            User Controller 111.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User112">
            <summary>
            User Controller 112.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User113">
            <summary>
            User Controller 113.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User114">
            <summary>
            User Controller 114.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User115">
            <summary>
            User Controller 115.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User116">
            <summary>
            User Controller 116.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User117">
            <summary>
            User Controller 117.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User118">
            <summary>
            User Controller 118.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.User119">
            <summary>
            User Controller 119.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.AllSoundOff">
            <summary>
            ChannelMode: The All Sound Off.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.AllControllerReset">
            <summary>
            ChannelMode: Reset all controllers to default.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.LocalKeyboard">
            <summary>
            ChannelMode: The Local Keyboard.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.AllNotesOff">
            <summary>
            ChannelMode: The All Notes Off.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.OmniModeOff">
            <summary>
            ChannelMode: The Omni Mode Off.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.OmniModeOn">
            <summary>
            ChannelMode: The Omni Mode On.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.MonoOperation">
            <summary>
            ChannelMode:The Mono Operation (mono mode on and poly mode off).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIControllerType.PolyOperation">
            <summary>
            ChannelMode: The Poly Operation (mono mode off and poly mode on).
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDINote">
            <summary>
            Defines constants representing the 12 Note of the chromatic scale.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.C">
            <summary>
            C natural.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.CSharp">
            <summary>
            C sharp.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.D">
            <summary>
            D natural.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.DSharp">
            <summary>
            D sharp.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.E">
            <summary>
            E natural.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.F">
            <summary>
            F natural.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.FSharp">
            <summary>
            F sharp.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.G">
            <summary>
            G natural.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.GSharp">
            <summary>
            G sharp.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.A">
            <summary>
            A natural.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.ASharp">
            <summary>
            A sharp.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.B">
            <summary>
            B natural.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.NOTE_LOW_KEYBOARD88">
            <summary>
            Lowest note on a 88th keyboard (A-1).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.NOTE_LOW_KEYBOARD76">
            <summary>
            Lowest note on a 76th keyboard (E0).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.NOTE_LOW_KEYBOARD61">
            <summary>
            Lowest note on a 61th keyboard (C1).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.NOTE_MIDDLE_C">
            <summary>
            Middle C (C3).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.NOTE_STANDARDPITCH">
            <summary>
            Standard Pitch (A3).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.NOTE_HIGH_KEYBOARD61">
            <summary>
            Highest note on a 61th keyboard (C6).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.NOTE_HIGH_KEYBOARD76">
            <summary>
            Highest note on a 76th keyboard (G6).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.NOTE_HIGH_KEYBOARD88">
            <summary>
            Highest note on a 88th keyboard (C7).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDINote.NOTE_HIGHEST">
            <summary>
            Highest Midi note (G8).
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIMTCType">
            <summary>
            Defines constants representing the Midi Time Code (MTC) type used by the <see cref="F:radio42.Multimedia.Midi.MIDIStatus.MidiTimeCode"/> status given in a <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> member (also see <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.TimeCodeType"/> and <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.TimeCodeValue"/>).
            </summary>
            <remarks>
            <para>MIDI Time Code (MTC) is a sub-protocol within MIDI, and is used to keep 2 devices that control some sort of timed performance (ie, maybe a sequencer and a video deck) in sync. MTC messages are an alternative to using MIDI Clocks and Song Position Pointer messages. MTC is essentially SMPTE mutated for transmission over MIDI. SMPTE timing is referenced from an absolute "time of day". On the other hand, MIDI Clocks and Song Position Pointer are based upon musical beats from the start of a song, played at a specific Tempo. For many (non-musical) cues, it's easier for humans to reference time in some absolute way rather than based upon musical beats at a certain tempo.</para>
            <para>The Midi Time Code is used by the <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> if the <see cref="P:radio42.Multimedia.Midi.MidiShortMessage.StatusType"/> is <see cref="F:radio42.Multimedia.Midi.MIDIStatus.MidiTimeCode"/>. It is also often called the Quarter Frame message.</para>
            <para>It has a status of 0xF1, and one subsequent data byte. This message is sent periodically to keep track of the running SMPTE time. It's analogous to the MIDI Clock message. The Quarter Frame messages are sent at a rate of 4 per each SMPTE Frame. In other words, by the time that a slave has received 4 Quarter Frame messages, a SMPTE Frame has passed. So, the Quarter Frame messages provide a "sub-frame" clock reference. (With 30 fps SMPTE, this "clock tick" happens every 8.3 milliseconds).</para>
            <para>But the Quarter Frame is more than just a quarter frame "clock tick". The Quarter Frame message's data byte contains the SMPTE time (ie, hours, minutes, seconds, and frames). SMPTE time is normally expressed in 80 bits. Obviously, this is too many bits to be contained in 1 8-bit data byte. So, each Quarter Frame message contains just one piece of the time (for example, one Quarter Frame may contain only the hours). In order to get the entire SMPTE time at any given point, a slave needs to receive several Quarter Frame messages, and piece the current SMPTE time together from those messages. It takes 8 Quarter Frame messages to convey the current SMPTE time. In other words, by the time that a slave can piece together the current SMPTE time, two SMPTE frames have passed (ie, since there are 4 Quarter Frame messages in each frame). So, MTC's version of SMPTE time actually counts in increments of 2 SMPTE Frames per each update of the current SMPTE time.</para>
            <para>The first (of 8) Quarter Frame message contains the low nibble (ie, bits 0 to 3) of the Frame Time. The second Quarter Frame message contains the high nibble (ie, bits 4 to 7) of the Frame Time. The third and fourth messages contain the low and high nibbles of the Seconds Time. The fifth and sixth messages contain the low and high nibbles of the Minutes Time. The seventh and eighth messages contain the low and high nibbles of the Hours Time. The eighth message also contains the SMPTE frames-per-second Type (ie, 24, 25, 30 drop, or 30 fps). If you were to break up the Quarter Frame's data byte into its 7 bits, the format is:</para>
            <para>"0nnn dddd" (8-bits).</para>
            <para>Where 'nnn' is one of 7 possible values which tell you what 'dddd' represents. This enummeration represents the 7 values, and what each causes 'dddd' to represent.</para>
            <para> </para>
            <para>When MTC is running in the forward direction (ie, time is advancing), the Quarter Frame messages are sent in the order of Frames Low Nibble to Hours High Nibble. In other words, the order looks something like this:</para>
            <para>0xF1 0x0n : where n is the current Frames Low Nibble.</para>
            <para>0xF1 0x1n : where n is the current Frames High Nibble.</para>
            <para>0xF1 0x2n : where n is the current Seconds Low Nibble.</para>
            <para>0xF1 0x3n : where n is the current Seconds High Nibble.</para>
            <para>0xF1 0x4n : where n is the current Minutes Low Nibble.</para>
            <para>0xF1 0x5n : where n is the current Minutes High Nibble.</para>
            <para>0xF1 0x6n : where n is the current Hours Low Nibble.</para>
            <para>0xF1 0x7n : where n is the current Hours High Nibble and SMPTE Type.</para>
            <para>When MTC is running in reverse (ie, time is going backwards), these are sent in the opposite order, ie, the Hours High Nibble is sent first and the Frames Low Nibble is last.</para>
            <para>The arrival of the 0xF1 0x0n and 0xF1 0x4n messages always denote where SMPTE Frames actually occur in realtime.</para>
            <para>Since 8 Quarter Frame messages are required to piece together the current SMPTE time, timing lock can't be achieved until the slave has received all 8 messages. This will take from 2 to 4 SMPTE Frames, depending upon when the slave comes online.</para>
            <para>The Frame number (contained in the first 2 Quarter Frame messages) is the SMPTE Frames Time for when the first Quarter Frame message is sent. But, because it takes 7 more Quarter Frames to piece together the current SMPTE Time, when the slave does finally piece the time together, it is actually 2 SMPTE Frames behind the real current time. So, for display purposes, the slave should always add 2 frames to the current time.</para>
            </remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMTCType.FramesLSB">
            <summary>
            Current Frames Low Nibble.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMTCType.FramesMSB">
            <summary>
            Current Frames High Nibble.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMTCType.SecondsLSB">
            <summary>
            Current Seconds Low Nibble.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMTCType.SecondsMSB">
            <summary>
            Current Seconds High Nibble.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMTCType.MinutesLSB">
            <summary>
            Current Minutes Low Nibble.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMTCType.MinutesMSB">
            <summary>
            Current Minutes High Nibble.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMTCType.HoursLSB">
            <summary>
            Current Hours Low Nibble.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIMTCType.HoursMSB">
            <summary>
            Current Hours High Nibble and SMPTE Type.
            <para>In the data byte for the Hours High Nibble and SMPTE Type, the bits are interpreted as follows:</para>
            <para>"0nnn x yy d" (8-bits).</para>
            <para>Where 'nnn' is 7. 'x' is unused and set to 0. 'd' is bit 4 of the Hours Time. 'yy' tells the SMPTE Type as follows:</para>
            <para>0 = 24 fps, 1 = 25 fps, 2 = 30 fps (Drop-Frame), 3 = 30 fps</para>
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDITimeType">
            <summary>
            Defines constants representing the Midi timing format used by the <see cref="T:radio42.Multimedia.Midi.MIDI_TIME"/> structure.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDITimeType.TIME_MS">
            <summary>
            Time in milliseconds.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SAMPLES">
            <summary>
            Number of waveform-audio samples.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDITimeType.TIME_BYTES">
            <summary>
            Current byte offset from beginning of the file.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SMPTE">
            <summary>
            SMPTE (Society of Motion Picture and Television Engineers) time.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDITimeType.TIME_MIDI">
            <summary>
            MIDI time.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDITimeType.TIME_TICKS">
            <summary>
            Ticks within a MIDI stream.
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIManufacturer">
            <summary>
            Defines constants representing the special Midi ManufacturerID within a system-exclusive message (see <see cref="P:radio42.Multimedia.Midi.MidiSysExMessage.Manufacturer"/> for details).
            </summary>
            <remarks>This list does NOT define the real manufacturer id's but only special purpose manufacturer IDs!</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIManufacturer.Extended">
            <summary>
            To accomodate a greater range of manufacturer IDs, the MMA decided to reserve a manufacturer ID of 0 for a special purpose. 
            When you see a manufacturer ID of 0, then there will be two more data bytes after this. These two data bytes combine to make the real manufacturer ID. 
            So, some manufacturers have IDs that are 3 bytes, where the first byte is always 0. 
            Using this "trick", the range of unique manufacturer IDs is extended to accomodate over 16,000 MIDI manufacturers.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIManufacturer.Educational">
            <summary>
            A manufacturer must get a registered ID from the MMA if he wants to define his own SysEx messages, or use this one.
            <para>This ID is for educational or development use only, and should never appear in a commercial design.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIManufacturer.RealTime">
            <summary>
            Universal SysEx messages: realtime messages (ie, ones that need to be responded to immediately).
            <para>After the ID byte is a SysEx Channel byte. This could be from 0 to 127 for a total of 128 SysEx channels. 
            So, although "normal" SysEx messages have no MIDI channel like Voice Category messages do, a Universal SysEx message can be sent on one of 128 SysEx channels. 
            This allows the musician to set various devices to ignore certain Universal SysEx messages (ie, if the device allows the musician to set its Base SysEx Channel. 
            Most devices just set their Base SysEx channel to the same number as the Base Channel for Voice Category messages). 
            On the other hand, a SysEx channel of 127 is actually meant to tell the device to "disregard the channel and pay attention to this message regardless".</para>
            <para>After the SysEx channel, the next two bytes are Sub IDs which tell what the SysEx is for. 
            There are several Sub IDs defined for particular messages. There is a Sub ID for a Universal SysEx message to set a device's master volume. (This is different than Volume controller which sets the volume for only one particular MIDI channel). 
            There is a Sub ID for a Universal SysEx message to set a device's Pitch Wheel bend range. There are a couple of Sub IDs for some Universal SysEx messages to implement a waveform (sample) dump over MIDI etc.</para>
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIManufacturer.NonRealTime">
            <summary>
            Universal SysEx messages: non-realtime (ie, ones which can be processed when the device gets around to it).
            <para>After the ID byte is a SysEx Channel byte. This could be from 0 to 127 for a total of 128 SysEx channels. 
            So, although "normal" SysEx messages have no MIDI channel like Voice Category messages do, a Universal SysEx message can be sent on one of 128 SysEx channels. 
            This allows the musician to set various devices to ignore certain Universal SysEx messages (ie, if the device allows the musician to set its Base SysEx Channel. 
            Most devices just set their Base SysEx channel to the same number as the Base Channel for Voice Category messages). 
            On the other hand, a SysEx channel of 127 is actually meant to tell the device to "disregard the channel and pay attention to this message regardless".</para>
            <para>After the SysEx channel, the next two bytes are Sub IDs which tell what the SysEx is for. 
            There are several Sub IDs defined for particular messages. There is a Sub ID for a Universal SysEx message to set a device's master volume. (This is different than Volume controller which sets the volume for only one particular MIDI channel). 
            There is a Sub ID for a Universal SysEx message to set a device's Pitch Wheel bend range. There are a couple of Sub IDs for some Universal SysEx messages to implement a waveform (sample) dump over MIDI etc.</para>
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDI_INCAPS">
            <summary>
            Represents MIDI input device capabilities as returned by the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InGetDevCaps(System.Int32,radio42.Multimedia.Midi.MIDI_INCAPS)"/> method.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_INCAPS.mid">
            <summary>
            Manufacturer identifier of the device driver for the MIDI input device.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_INCAPS.pid">
            <summary>
            Product identifier of the MIDI input device.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_INCAPS.driverVersion">
            <summary>
            Version number of the device driver for the MIDI input device.
            </summary>
            <remarks>The high-order byte is the major version number, and the low-order byte is the minor version number.</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_INCAPS.name">
            <summary>
            Product name in a null-terminated string.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_INCAPS.support">
            <summary>
            Reserved; must be zero.
            </summary>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_INCAPS.#ctor">
            <summary>
            Default Constructor.
            </summary>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_INCAPS.ToString">
            <summary>
            Returns the name of the Midi input device.
            </summary>
            <returns>The name of the input device.</returns>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDI_OUTCAPS">
            <summary>
            Represents MIDI output device capabilities as returned by the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutGetDevCaps(System.Int32,radio42.Multimedia.Midi.MIDI_OUTCAPS)"/> method.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.mid">
            <summary>
            Manufacturer identifier of the device driver for the MIDI output device.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.pid">
            <summary>
            Product identifier of the MIDI output device.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.driverVersion">
            <summary>
            Version number of the device driver for the MIDI output device.
            </summary>
            <remarks>The high-order byte is the major version number, and the low-order byte is the minor version number.</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.name">
            <summary>
            Product name in a null-terminated string.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.technology">
            <summary>
            Type of the MIDI output device.
            </summary>
            <remarks>This value can be one of the <see cref="T:radio42.Multimedia.Midi.MIDIDevice"/> values.</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.voices">
            <summary>
            Number of voices supported by an internal synthesizer device. 
            </summary>
            <remarks>If the device is a port, this member is not meaningful and is set to 0.</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.notes">
            <summary>
            Maximum number of simultaneous notes that can be played by an internal synthesizer device.
            </summary>
            <remarks>If the device is a port, this member is not meaningful and is set to 0.</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.channelMask">
            <summary>
            Channels that an internal synthesizer device responds to.
            </summary>
            <remarks>
            <para>The least significant bit refers to channel 0 and the most significant bit to channel 15.</para>
            <para>Port devices that transmit on all channels set this member to 0xFFFF.</para>
            </remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_OUTCAPS.support">
            <summary>
            Optional functionality supported by the device.
            </summary>
            <remarks>It can be one or more of the following:
            <para>MIDICAPS_CACHE (0x0004) : Supports patch caching.</para>
            <para>MIDICAPS_LRVOLUME (0x0002) : Supports separate left and right volume control.</para>
            <para>MIDICAPS_STREAM (0x0008) : Provides direct support for the StreamOut function.</para>
            <para>MIDICAPS_VOLUME (0x0001) : Supports volume control.</para>
            <para>If a device supports volume changes, the MIDICAPS_VOLUME flag will be set for the support member. If a device supports separate volume changes on the left and right channels, both the MIDICAPS_VOLUME and the MIDICAPS_LRVOLUME flags will be set for this member.</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_OUTCAPS.#ctor">
            <summary>
            Default Constructor.
            </summary>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_OUTCAPS.ToString">
            <summary>
            Returns the name of the Midi output device.
            </summary>
            <returns>The name of the output device.</returns>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_OUTCAPS.SupportsCache">
            <summary>
            Supports patch caching?
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_OUTCAPS.SupportsLRVolume">
            <summary>
            Supports separate left and right volume control?
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_OUTCAPS.SupportsVolume">
            <summary>
            Supports volume control?
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_OUTCAPS.SupportsStream">
            <summary>
            Provides direct support for the StreamOut function?
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_OUTCAPS.IsMidiPort">
            <summary>
            Is the device a Midi output port?
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_OUTCAPS.IsMidiMapper">
            <summary>
            Is the device a Midi mapper?
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIHDR">
            <summary>
            Represents the Windows Multimedia MIDIHDR structure.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHDR.data">
            <summary>
            Pointer to MIDI data.
            </summary>
            <remarks>Typically a pointer to a byte array containing the data or a null-terminated string of 8-bit Windows (ANSI) characters.</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHDR.bufferLength">
            <summary>
            Size of the buffer.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHDR.bytesRecorded">
            <summary>
            Actual amount of data in the buffer.
            </summary>
            <remarks>This value should be less than or equal to the value given in the <see cref="F:radio42.Multimedia.Midi.MIDIHDR.bufferLength"/> member.</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHDR.user">
            <summary>
            Custom user data.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHDR.flags">
            <summary>
            Flags giving information about the buffer (see <see cref="T:radio42.Multimedia.Midi.MIDIHeader"/> for more information).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHDR.next">
            <summary>
            Reserved for driver (do not use).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHDR.reserved">
            <summary>
            Reserved for driver (do not use).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHDR.offset">
            <summary>
            Offset into the buffer when a callback is performed.
            </summary>
            <remarks>This callback is generated because the MEVT_F_CALLBACK flag is set in the event member of the MidiEventArgs structure.
            <para>This offset enables an application to determine which event caused the callback.</para>
            </remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDIHDR.reservedArray">
            <summary>
            Reserved for MMSYSTEM (do not use).
            </summary>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDIHDR.#ctor">
            <summary>
            Initializes a new instance of the MIDI_HEADER.
            </summary>
            <remarks>
            <para>In order to use the MIDIHDR with a Midi function (e.g. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>) you must first call the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/>/<see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutPrepareHeader(System.IntPtr,System.IntPtr)"/> methods.</para>
            <para>Make sure, that you always call <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InUnprepareHeader(System.IntPtr,System.IntPtr)"/>/<see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutUnprepareHeader(System.IntPtr,System.IntPtr)"/> once you prepared the header in order to release all unmanaged recourses!</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDIHDR.IsDone">
            <summary>
            Indicate if the device driver is finished with the buffer and is returning it to the application.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDIHDR.IsPrepared">
            <summary>
            Indicate if the buffer has been prepared by using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutPrepareHeader(System.IntPtr,System.IntPtr)"/> function.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDIHDR.IsStreamBuffer">
            <summary>
            Indicate if the buffer is a stream buffer.
            </summary>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDIHDR.ToString">
            <summary>
            Returns the recorded data buffer as a string.
            </summary>
            <returns>The string representation of the Midi data in the header buffer.</returns>
            <remarks>If no pointer to the data exists <see langword="null"/> will be returned. If the bytesRecorded is zero an empty string will be returned - 
            else a hexadecimal representation of the byte array of the data will be returned, e.g. "F0 41 00 ... F7".</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDIHDR.GetData">
            <summary>
            Returns the Midi data member as a byte array.
            </summary>
            <returns>The available data as a byte[] (will return <see langword="null"/> if no data is present or an empty array, if the bytesRecorded member is zero).</returns>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDIHDR.Reset">
            <summary>
            Resets all internal values.
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDI_HEADER">
            <summary>
            Represents a wrapper for the Windows Multimedia MIDIHDR structure.
            </summary>
            <remarks>
            <para>In order to use the MIDI_HEADER with a Midi function (e.g. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>) you must first call the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method which provides a <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> to be used.</para>
            <para>After you send a system-exclusive data block, you must wait until the device driver is finished with the data block before freeing it. If you are sending multiple data blocks, you must monitor the completion of each data block so you know when to send additional blocks.</para>
            <para>Once the MIDI_HEADER is used, your application will be notified with a callback procedure (see <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> or <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/>) when a system-exclusive buffer has been filled with data and is being returned to the application.
            The <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> message is sent to a MIDI input callback function - the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MOM_DONE"/> message is sent to a MIDI output callback function in such case. 
            The param1 parameter of the callback will give you the pointer to the MIDI_HEADER structure identifying the input buffer.
            Use the constructor taking a headerPtr to create a MIDI_HEADER from such pointer!</para>
            <para>Make sure, that you always call <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/> once you prepared the header with the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method in order to release all unmanaged recourses (this is at best done within the callback procedure)!</para>
            <para>Internally the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> and <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/> methods will use the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutPrepareHeader(System.IntPtr,System.IntPtr)"/> resp. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InUnprepareHeader(System.IntPtr,System.IntPtr)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutUnprepareHeader(System.IntPtr,System.IntPtr)"/>.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_HEADER.Data">
            <summary>
            The MIDI data buffer.
            </summary>
            <remarks>Typically a byte array containing the data or a null-terminated string of 8-bit Windows (ANSI) characters.
            <para>Once you prepared the data buffer with <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> you might not change the buffer.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_HEADER.User">
            <summary>
            Custom user data.
            </summary>
            <remarks>
            <para>Once you prepared the data buffer with <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> you might not change the user data.</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_HEADER.Flags">
            <summary>
            Gets the flags giving information about the buffer (see <see cref="T:radio42.Multimedia.Midi.MIDIHeader"/> for more information).
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr">
            <summary>
            Gets the pointer to the prepared MIDIHDR structure (or <see cref="F:System.IntPtr.Zero"/> if the header was not prepared).
            </summary>
            <remarks>Access this member to retrieve a pointer to the MIDIHDR structure.
            <para>In order to use the MIDI_HEADER with a Midi function (e.g. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>) you must first call the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method which provides this member.</para>
            <para>Make sure, that you always call <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/> once you prepared the header with the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method and received back the header from the Midi device in order to release all unmanaged recourses!</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_HEADER.#ctor(System.Int32)">
            <summary>
            Initializes a new instance of the MIDI_HEADER with an empty data buffer of the given size.
            </summary>
            <param name="size">The number of bytes for the data buffer (between 2 and 65536).</param>
            <remarks>
            <para>If a <paramref name="size"/> is given outside the range of 2 and 65536 the default size of 256 will be used.</para>
            <para>In order to use the MIDI_HEADER with a Midi function (e.g. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>) you must first call the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method which provides a <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> to be used.</para>
            <para>Make sure, that you always call <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/> once you prepared the header with the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method and received back the header from the Midi device in order to release all unmanaged recourses!</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_HEADER.#ctor(System.Byte[])">
            <summary>
            Initializes a new instance of the MIDI_HEADER with the given data buffer.
            </summary>
            <param name="data">The byte array to use as the data buffer.</param>
            <remarks>
            <para>In order to use the MIDI_HEADER with a Midi function (e.g. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>) you must first call the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method which provides a <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> to be used.</para>
            <para>Make sure, that you always call <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/> once you prepared the header with the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method and received back the header from the Midi device in order to release all unmanaged recourses!</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_HEADER.#ctor(System.String)">
            <summary>
            Initializes a new instance of the MIDI_HEADER with the string as the data buffer.
            </summary>
            <param name="data">The string to use as the data buffer (the string characters will be copied to the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.Data"/> buffer as byte values plus a final terminating null-byte).</param>
            <remarks>
            <para>In order to use the MIDI_HEADER with a Midi function (e.g. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>) you must first call the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method which provides a <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> to be used.</para>
            <para>Make sure, that you always call <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/> once you prepared the header with the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method and received back the header from the Midi device in order to release all unmanaged recourses!</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_HEADER.#ctor(System.IntPtr)">
            <summary>
            Initializes a new instance of the MIDI_HEADER from a given Midi header pointer.
            </summary>
            <param name="headerPtr">The pointer to the MIDIHDR structure (e.g. as received in a <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> or <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/>).</param>
            <remarks>
            <para>In order to use the MIDI_HEADER with a Midi function (e.g. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>) you must first call the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method which provides a <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> to be used.</para>
            <para>After you send a system-exclusive data block, you must wait until the device driver is finished with the data block before freeing it. If you are sending multiple data blocks, you must monitor the completion of each data block so you know when to send additional blocks.</para>
            <para>Once the MIDI_HEADER is used, your application will be notified with a callback procedure (see <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> or <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/>) when a system-exclusive buffer has been filled with data and is being returned to the application.
            The <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> message is sent to a MIDI input callback function - the <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MOM_DONE"/> message is sent to a MIDI output callback function in such case. 
            The param1 parameter of the callback will give you the pointer to the MIDI_HEADER structure identifying the input buffer.
            Use this method to create a MIDI_HEADER from such pointer!</para>
            <para>Make sure, that you always call <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/> in order to release all unmanaged recourses (this is at best done within the callback procedure)!</para>
            </remarks>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_HEADER.IsDone">
            <summary>
            Indicates if the device driver is finished with the buffer and is returning it to the application.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_HEADER.IsPrepared">
            <summary>
            Indicates if the buffer has been prepared by using the <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/> method.
            </summary>
        </member>
        <member name="P:radio42.Multimedia.Midi.MIDI_HEADER.IsStreamBuffer">
            <summary>
            Indicates if the buffer is a stream buffer.
            </summary>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_HEADER.ToString">
            <summary>
            Returns the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.Data"/> buffer as a string.
            </summary>
            <returns>The string representation of the Midi data in the header buffer.</returns>
            <remarks>If no data exists an empty string will be returned - else a hexadecimal representation of the byte array of the data will be returned, e.g. "F0 41 00 ... F7".</remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)">
            <summary>
            Prepares the MIDI_HEADER structure and sets the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> member.
            </summary>
            <param name="input">Dealing with a Midi input device? (<see langword="true"/>=input, <see langword="false"/>=output).</param>
            <param name="handle">The handle to the MIDI device.</param>
            <returns><see langword="true"/> on success (use the <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> to access the prepared MIDIHDR structure) - else <see langword="false"/>.</returns>
            <remarks>
            <para>The returned <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/> can be used e.g. with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> methods.</para>
            <para>Internally the MIDIHDR (see <see cref="P:radio42.Multimedia.Midi.MIDI_HEADER.HeaderPtr"/>) will be prepared using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InPrepareHeader(System.IntPtr,System.IntPtr)"/> resp. <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutPrepareHeader(System.IntPtr,System.IntPtr)"/> depending on the <paramref name="input"/> parameter.</para>
            <para>Note: This method allocates unmanaged memory and copies this MIDI_HEADER structure to that memory. 
            So there is no need to keep a reference to the MIDI_HEADER instance in your application, since you will be notified in a <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> or <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/> when the Midi device has finished with the buffer and provides back a pointer to the MIDIHDR structure.
            You might then use the constructor overload taking a headerPtr to (re)create an instance of this class.</para>
            <para>Make sure, that you always call <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)"/> in order to release all unmanaged recourses (this is at best done within the callback procedure)!</para>
            </remarks>
        </member>
        <member name="M:radio42.Multimedia.Midi.MIDI_HEADER.Unprepare(System.Boolean,System.IntPtr)">
            <summary>
            Unprepares the MIDI_HEADER structure and frees all used resources.
            </summary>
            <param name="input">Dealing with a Midi input device? (<see langword="true"/>=input, <see langword="false"/>=output).</param>
            <param name="handle">The handle to the MIDI device.</param>
            <remarks>This function is complementary to <see cref="M:radio42.Multimedia.Midi.MIDI_HEADER.Prepare(System.Boolean,System.IntPtr)"/>. You must call this method in order to free all uses and allocated resources. 
            After passing a MIDIHDR structure to a Midi device by using the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(System.IntPtr,System.IntPtr)"/> or <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/> function, you must wait until the driver is finished with the MIDIHDR before using <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InUnprepareHeader(System.IntPtr,System.IntPtr)"/> (this is at best done within the callback procedure <see cref="T:radio42.Multimedia.Midi.MIDIINPROC"/> resp. <see cref="T:radio42.Multimedia.Midi.MIDIOUTPROC"/>).
            </remarks>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDI_TIME">
            <summary>
            Represents the Windows Multimedia MMTIME structure.
            </summary>
            <remarks>The MIDI_TIME structure contains timing information for different types of multimedia data.</remarks>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.type">
            <summary>
            Time format. It can be one of the following values (see <see cref="T:radio42.Multimedia.Midi.MIDITimeType"/>).
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.ms">
            <summary>
            Number of milliseconds. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_MS"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.sample">
            <summary>
            Number of samples. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SAMPLES"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.cb">
            <summary>
            Byte count. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_BYTES"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.ticks">
            <summary>
            Ticks in MIDI stream. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_TICKS"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.hour">
            <summary>
            Hours - SMPTE time structure. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SMPTE"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.min">
            <summary>
            Minutes - SMPTE time structure. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SMPTE"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.sec">
            <summary>
            Seconds - SMPTE time structure. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SMPTE"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.frame">
            <summary>
            Frames - SMPTE time structure. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SMPTE"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.fps">
            <summary>
            Frames per second (24, 25, 29 (30 drop), or 30) - SMPTE time structure. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SMPTE"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.dummy">
            <summary>
            Dummy byte for alignment - SMPTE time structure. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SMPTE"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.pad1">
            <summary>
            Padding1 - SMPTE time structure. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SMPTE"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.pad2">
            <summary>
            Padding2 - SMPTE time structure. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_SMPTE"/>.
            </summary>
        </member>
        <member name="F:radio42.Multimedia.Midi.MIDI_TIME.songptrpos">
            <summary>
            Song pointer position. MIDI time structure. Used when type is <see cref="F:radio42.Multimedia.Midi.MIDITimeType.TIME_MIDI"/>.
            </summary>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIOUTPROC">
            <summary>
            Represents the general callback delegate for handling Midi Output messages.
            </summary>
            <param name="handle">Handle to the MIDI output device.</param>
            <param name="msg">MIDI output message (one of the <see cref="T:radio42.Multimedia.Midi.MIDIMessage"/>).</param>
            <param name="instance">Instance data supplied with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIOUTPROC,System.IntPtr)"/> method.</param>
            <param name="param1">Message parameter 1.</param>
            <param name="param2">Message parameter 2.</param>
            <remarks>
            <para>NOTE: <paramref name="instance"/>, <paramref name="param1"/> and <paramref name="param2"/> are implemented here as IntPtr values for maximum Win32 and Win64 compatibility.
            If the parameters are actually numerial values you might use the ToInt32() resp. ToInt64() members to convert to these values.</para>
            <para>The meaning of the <paramref name="param1"/> and <paramref name="param2"/> parameters is specific to the message type.
            The <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MOM_DONE"/> message might be used with the <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/> class to construct and unpack the message into it's components.</para>
            <para>If param1 contains a pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure you might use the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> constructor overload taking a headerPtr in order to create an instance of a MIDI_HEADER in such case.</para>
            <para>Applications should not call any system-defined functions from inside a callback function, except for <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutShortMsg(System.IntPtr,System.Int32)"/>. Calling other wave functions will cause deadlock.</para>
            <para>Also note, that you should not make any GUI control changes within this procedure. If needed use an Invoke to make sure to execute GUI changes in the related GUI thread.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MIDIOUTPROC _midiProc;
            private IntPtr _midiOutHandle;
            ...
            // Open the Midi device #2
            _midiProc = new MIDIOUTPROC(MyMidiProc);
            MIDIError ret = Midi.MIDI_OutOpen(ref _midiOutHandle, 2, _midiProc, 0);
            if (ret == MIDIError.MIDI_OK)
            {
              // output ready
            }
            ...
            // when not needed anymore...stop the device
            Midi.MIDI_OutReset(_midiOutHandle);
            // and close the device
            Midi.MIDI_OutClose(_midiOutHandle);
            ...
            
            private void Send(int handle, int message)
            {
              int result = MIDI_OutShortMsg(handle, message);
            }
            
            private void SendSysExBuffer(IntPtr handle, byte[] data)
            {
              MIDI_HEADER header = new MIDI_HEADER(data);
              header.Prepare(false, handle);
              // If the header was perpared successfully.
              if (header.HeaderPtr != IntPtr.Zero)
              {
                // send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(handle, header.HeaderPtr);
              }
            }
            
            public void MyMidiProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              // handle all Midi messages here
              if(msg == MIDIMessage.MOM_OPEN)
              {
                // nothing to do
              }
              else if (msg == MIDIMessage.MOM_CLOSE)
              {
                // handle is from now on invalid
              }
              else if (msg == MIDIMessage.MOM_DONE)
              {
                // process the message...
                // param1 will contain the pointer to the MIDI_HEADER
                MIDI_HEADER header = new MIDI_HEADER(param1);
                byte[] data = header.Data;
                header.Unprepare(false, handle);
                ...
                // or
                MidiSysExMessage sysExMsg = new MidiSysExMessage(false, handle, param1);
                ...
              }
            }
            </code>
            <code lang="VB">
            Private _midiProc As MIDIOUTPROC
            Private _midiOutHandle As IntPtr
            ...
            ' Open the Midi device #2
            _midiProc = New MIDIOUTPROC(AddressOf MyMidiProc)
            Dim ret As MIDIError = Midi.MIDI_OutOpen(_midiOutHandle, 2, _midiProc, 0)
            If ret = MIDIError.MIDI_OK Then
              ' output ready
            End If
            ...
            ' when not needed anymore...stop the device
            Midi.MIDI_OutReset(_midiOutHandle)
            ' and close the device
            Midi.MIDI_OutClose(_midiOutHandle)
            ...
            
            Private Sub Send(handle As Integer, message As Integer)
              Dim result As Integer = MIDI_OutShortMsg(handle, message)
            End Sub
            
            Private Sub SendSysExBuffer(handle As IntPtr, data() As Byte)
              Dim header As New MIDI_HEADER(data)
              header.Prepare(False, handle)
              ' If the header was perpared successfully.
              If header.HeaderPtr &lt;&gt; IntPtr.Zero Then
                ' send a system-exclusive message to the output device
                Midi.MIDI_OutLongMsg(handle, header.HeaderPtr)
              End If
            End Sub
            
            Public Sub MyMidiProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              ' handle all Midi messages here
              If msg = MIDIMessage.MOM_OPEN Then
                ' nothing to do
              Else
                If msg = MIDIMessage.MOM_CLOSE Then
                  ' handle is from now on invalid
                Else
                  If msg = MIDIMessage.MOM_DONE Then
                    ' process the message...
                    ' param1 will contain the pointer to the MIDI_HEADER
                    Dim header As New MIDI_HEADER(param1)
                    Dim data As Byte() = header.Data
                    header.Unprepare(False, handle)
                    ...
                    ' or
                    Dim sysExMsg As New MidiSysExMessage(False, handle, param1)
                    ...
                  End If 
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="T:radio42.Multimedia.Midi.MIDIINPROC">
            <summary>
            Represents the general callback delegate for handling Midi Input messages.
            </summary>
            <param name="handle">Handle to the MIDI input device.</param>
            <param name="msg">MIDI input message (one of the MIM_xxx values, see <see cref="T:radio42.Multimedia.Midi.MIDIMessage"/>).</param>
            <param name="instance">Instance data supplied with the <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_InOpen(System.IntPtr@,System.Int32,radio42.Multimedia.Midi.MIDIINPROC,System.IntPtr,radio42.Multimedia.Midi.MIDIFlags)"/> method.</param>
            <param name="param1">Message parameter 1.</param>
            <param name="param2">Message parameter 2.</param>
            <remarks>
            <para>NOTE: <paramref name="instance"/>, <paramref name="param1"/> and <paramref name="param2"/> are implemented here as IntPtr values for maximum Win32 and Win64 compatibility.
            If the parameters are actually numerial values you might use the ToInt32() resp. ToInt64() members to convert to these values.</para>
            <para>The meaning of the <paramref name="param1"/> and <paramref name="param2"/> parameters is specific to the message type. For more info see <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_DATA"/>.
            The <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_DATA"/> or <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_ERROR"/> message might be used with the <see cref="T:radio42.Multimedia.Midi.MidiShortMessage"/> class to construct and unpack the message into it's components.
            The <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGDATA"/> or <see cref="F:radio42.Multimedia.Midi.MIDIMessage.MIM_LONGERROR"/> message might be used with the <see cref="T:radio42.Multimedia.Midi.MidiSysExMessage"/> class to construct and unpack the message into it's components.</para>
            <para>If param1 contains a pointer to a <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> structure you might use the <see cref="T:radio42.Multimedia.Midi.MIDI_HEADER"/> constructor overload taking a headerPtr in order to create an instance of a MIDI_HEADER in such case.</para>
            <para>Applications should not call any system-defined functions from inside a callback function, except for <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutLongMsg(System.IntPtr,System.IntPtr)"/>, <see cref="M:radio42.Multimedia.Midi.Midi.MIDI_OutShortMsg(System.IntPtr,System.Int32)"/>.</para>
            <para>Also note, that you should not make any GUI control changes within this procedure. If needed use an Invoke to make sure to execute GUI changes in the related GUI thread.</para>
            </remarks>
            <example>
            <code lang="C#">
            private MIDIINPROC _midiProc;
            private IntPtr _midiInHandle;
            ...
            // Open the Midi device #2
            _midiProc = new MIDIINPROC(MyMidiProc);
            MIDIError ret = Midi.MIDI_InOpen(ref _midiInHandle, 2, _midiProc, IntPtr.Zero, MIDIFlags.MIDI_IO_STATUS);
            if (ret == MIDIError.MIDI_OK)
            {
              // supply the device with 2 buffers
              AddSysExBuffer(_midiInHandle, 1024);
              AddSysExBuffer(_midiInHandle, 1024);
              // Start the device
              ret = Midi.MIDI_InStart(_midiInHandle);
            }
            ...
            // Stop the device
            Midi.MIDI_InReset(_midiInHandle);
            // when not needed anymore...close the device
            Midi.MIDI_InClose(_midiInHandle);
            ...
            // prepare receiving system-exclusive messages
            private void AddSysExBuffer(IntPtr handle, int size)
            {
              // prepare a empty midi header
              MIDI_HEADER header = new MIDI_HEADER(size);
              header.Prepare(true, handle);
              // If the header was perpared successfully.
              if (header.HeaderPtr != IntPtr.Zero)
              {
                // Add the buffer to the InputDevice.
                Midi.MIDI_InAddBuffer(handle, header.HeaderPtr);
              }
            }
            
            public void MyMidiProc(IntPtr handle, MIDIMessage msg, IntPtr instance, IntPtr param1, IntPtr param2)
            {
              // handle all Midi messages here
              if (msg == MIDIMessage.MIM_OPEN)
              {
                // nothing to do
              }
              else if (msg == MIDIMessage.MIM_CLOSE)
              {
                // handle is from now on invalid
              }
              else if (msg == MIDIMessage.MIM_DATA)
              {
                // process the message...
                int p1 = param1.ToInt32();
                int p2 = param2.ToInt32();
                ...
                // or
                MidiShortMessage shortMsg = new MidiShortMessage(param1, param2);
                ...
              }
              else if (msg == MIDIMessage.MIM_MOREDATA)
              {
                // we are not fast enough in this callback to keep up
                // the input device is sending messages to fast
                ...
              }
              else if (msg == MIDIMessage.MIM_LONGDATA)
              {
                // process the message...
                // param1 will contain the pointer to the MIDI_HEADER
                MIDI_HEADER header = MIDI_HEADER(param1);
                byte[] data = header.Data;
                ...
                header.Unprepare(true, handle);
                // add a new buffer
                // since we should constantly provide new buffers until we finished recording
                AddSysExBuffer(handle, 1024);
              }
              else if (msg == MIDIMessage.MIM_ERROR)
              {
                // process the invalid message...
                MidiShortMessage errorMsg = new MidiShortMessage(param1, param2);
                ...
              }
              else if (msg == MIDIMessage.MIM_LONGERROR)
              {
                // process the invalid message...
                // param1 will contain the pointer to the MIDI_HEADER
                MidiSysExMessage errorSysExMsg = new MidiSysExMessage(true, handle, param1);
                ...
                // add a new buffer
                // since we should constantly provide new buffers until we finished recording
                AddSysExBuffer(handle, 1024);
              }
            }
            </code>
            <code lang="VB">
            Private _midiProc As MIDIINPROC
            Private _midiInHandle As IntPtr
            ...
            ' Open the Midi device #2
            _midiProc = New MIDIINPROC(AddressOf MyMidiProc)
            Dim ret As MIDIError = Midi.MIDI_InOpen(_midiInHandle, 2, _midiProc, IntPtr.Zero, MIDIFlags.MIDI_IO_STATUS)
            If ret = MIDIError.MIDI_OK Then
              ' supply the device with 2 buffers
              AddSysExBuffer(_midiInHandle, 1024)
              AddSysExBuffer(_midiInHandle, 1024)
              ' Start the device
              ret = Midi.MIDI_InStart(_midiInHandle)
            End If
            ...
            ' Stop the device
            Midi.MIDI_InReset(_midiInHandle)
            ' when not needed anymore...close the device
            Midi.MIDI_InClose(_midiInHandle)
            ...
            ' prepare receiving system-exclusive messages
            Private Sub AddSysExBuffer(handle As IntPtr, size As Integer)
              ' prepare a empty midi header
              Dim header As New MIDI_HEADER(size)
              header.Prepare(True, handle)
              ' If the header was perpared successfully.
              If header.HeaderPtr &lt;&gt; IntPtr.Zero Then
                ' Add the buffer to the InputDevice.
                Midi.MIDI_InAddBuffer(handle, header.HeaderPtr)
              End If
            End Sub
            
            Public Sub MyMidiProc(handle As IntPtr, msg As MIDIMessage, instance As IntPtr, param1 As IntPtr, param2 As IntPtr)
              ' handle all Midi messages here
              If msg = MIDIMessage.MIM_OPEN Then
                ' nothing to do
              Else
                If msg = MIDIMessage.MIM_CLOSE Then
                  ' handle is from now on invalid
                Else
                  If msg = MIDIMessage.MIM_DATA Then
                    ' process the message...
                    Dim p1 As Integer = param1.ToInt32()
                    Dim p2 As Integer = param2.ToInt32()
                    ...
                    ' or
                    Dim shortMsg As New MidiShortMessage(param1, param2)
                    ...
                  Else
                    If msg = MIDIMessage.MIM_MOREDATA Then
                      ' we are not fast enough in this callback to keep up
                      ' the input device is sending messages to fast
                      ...
                    Else
                      If msg = MIDIMessage.MIM_LONGDATA Then
                        ' process the message...
                        ' param1 will contain the pointer to the MIDI_HEADER
                        Dim header As MIDI_HEADER = MIDI_HEADER(param1)
                        Dim data As Byte() = header.Data
                        ...
                        header.Unprepare(True, handle)
                        ' add a new buffer
                        ' since we should constantly provide new buffers until we finished recording
                        AddSysExBuffer(handle, 1024)
                      Else
                        If msg = MIDIMessage.MIM_ERROR Then
                          ' process the invalid message...
                          Dim errorMsg As New MidiShortMessage(param1, param2)
                          ...
                        Else
                          If msg = MIDIMessage.MIM_LONGERROR Then
                            ' process the invalid message...
                            ' param1 will contain the pointer to the MIDI_HEADER
                            Dim errorSysExMsg As New MidiSysExMessage(True, handle, param1)
                            ...
                            ' add a new buffer
                            ' since we should constantly provide new buffers until we finished recording
                            AddSysExBuffer(handle, 1024)
                          End If
                        End If
                      End If
                    End If
                  End If
                End If
              End If
            End Sub
            </code>
            </example>
        </member>
        <member name="T:System.StringExtension">
            <summary>
            Extension methods must be defined in a static class.
            </summary>
        </member>
        <member name="M:System.StringExtension.TrimWithBOM(System.String)">
            <summary>
            Removes all leading and trailing white-space characters including 
            ZERO WIDTH SPACE (U+200B) and ZERO WIDTH NO-BREAK SPACE (U+FEFF)
            from the current <see cref="T:System.String"/> object.
            </summary>
            <param name="str">The string to trim.</param>
            <returns>The string that remains after all white-space characters are removed from the start and end of the current string.</returns>
        </member>
    </members>
</doc>
