BASS.NET API for the Un4seen BASS Audio LibraryBassWmaBASS_WMA_EncodeOpenNetwork Method BASS.NET API for the Un4seen BASS Audio Library
Initializes WMA encoding to the network.

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

public static int BASS_WMA_EncodeOpenNetwork(
	int freq,
	int chans,
	BASSWMAEncode flags,
	int bitrate,
	int port,
	int clients


Type: SystemInt32
The sample rate in Hz, or a BASS channel handle if the BASS_WMA_ENCODE_SOURCE flag is specified.
Type: SystemInt32
The number of channels (1=mono, 2=stereo, etc.).
Type: Un4seen.Bass.AddOn.WmaBASSWMAEncode
Any combination of these flags (see BASSWMAEncode):
BASS_SAMPLE_8BITS8-bit sample data. If neither this or the BASS_SAMPLE_FLOAT flags are specified, then 16-bit data is expected.
BASS_SAMPLE_FLOAT32-bit floating-point sample data.
BASS_WMA_ENCODE_STANDARDUse 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).
BASS_WMA_ENCODE_PROUse WMA Professional encoding.
BASS_WMA_ENCODE_PCMWrite uncompressed PCM data in an ASF container. bitrate is ignored except that it should be non-0.
BASS_WMA_ENCODE_24BITEncode in 24-bit, else 16-bit. 24-bit encoding requires WMA Pro.
BASS_WMA_ENCODE_SCRIPTEnable the specification of tags mid-stream (after encoding has begun).
BASS_WMA_ENCODE_SOURCEUse the BASS channel with the handle in freq as the encoder's source. The chansparameter is ignored, as are the BASS_SAMPLE_8BITS and BASS_SAMPLE_FLOAT flags. If the BASSenc add-on is loaded, then the 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.
Type: SystemInt32
The encoding bitrate (in bits per second, e.g. 128000), or VBR quality (100 or less).
Type: SystemInt32
The port number for clients to conenct to... 0 = let the system choose a port.
Type: SystemInt32
The maximum number of clients (up to 50) that can be connected.

Return Value

Type: Int32
If succesful, the new encoder's handle is returned, else 0 is returned. Use BASS_ErrorGetCode to get the error code.

If you chose to let the system select a port, you can retrieve the port number using BASS_WMA_EncodeGetPort(Int32).

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 BASS_WMA_EncodeGetRates(Int32, Int32, BASSWMAEncode) to retrieve a list of the encoding bitrates available for a specific sample format. VBR encoding is not recommended for network encoding.

Use BASS_WMA_EncodeSetTag(Int32, IntPtr, IntPtr, BASSWMATag) for each tag you wish to set.

Use BASS_WMA_EncodeWrite(Int32, IntPtr, Int32) to encode sample data, and BASS_WMA_EncodeClose(Int32) to finish encoding and close the network port.

The BASS_WMA_ENCODE_QUEUE flag is not necessary with this function as the data is always queued and fed to the encoder asynchronously.

ERROR CODEDescription
BASS_ERROR_WMAThe Windows Media modules (v9 or above) are not installed.
BASS_ERROR_ILLPARAMclients is invalid.
BASS_ERROR_NOTAVAILNo codec could be found to support the specified sample format and bitrate.
BASS_ERROR_UNKNOWNSome other mystery problem!


Stream what you are recording using a system-chosen port, and allowing up to 5 clients:
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 > 0 AndAlso buffer <> IntPtr.Zero Then
    ' write the recorded data to the encoder
    BassWma.BASS_WMA_EncodeWrite(user.ToInt32(), buffer, length)
  End If
  Return True
End Function
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 > 0 && buffer != IntPtr.Zero)
    // write the recorded data to the encoder
    BassWma.BASS_WMA_EncodeWrite(user.ToInt32(), buffer, length);
  return true;
See Also