BASS.NET API for the Un4seen BASS Audio LibraryEncoderAIFF ClassBASS.NET API for the Un4seen BASS Audio Library
Encoder class implementation for the Audio Interchange File Format (AIFF) using raw PCM sample data with no real encoder.
Inheritance Hierarchy

SystemObject
  Un4seen.Bass.MiscBaseEncoder
    Un4seen.Bass.MiscEncoderAIFF

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

[SerializableAttribute]
public sealed class EncoderAIFF : BaseEncoder

The EncoderAIFF type exposes the following members.

Constructors

  NameDescription
Public methodEncoderAIFF
Creates an instance of a Audio Interchange File Format (AIFF) implementation.
Top
Properties

  NameDescription
Public propertyAIFF_BitsPerSample
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).
Public propertyAIFF_Use32BitInteger
Gets or Sets, if 32bit integer (instead of 32bit IEEE float) should be used when setting AIFF_BitsPerSample to 32 (default is )?
Public propertyChannelBitwidth
This property returns the actual bitwidth of the sample data of the channel (e.g. 8, 16, 32).
(Inherited from BaseEncoder.)
Public propertyChannelHandle
Gets or Sets the channel handle which is used to create the broadcast encoder class.
(Inherited from BaseEncoder.)
Public propertyChannelInfo
Returns the general channel info.
(Inherited from BaseEncoder.)
Public propertyChannelNumChans
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.).
(Inherited from BaseEncoder.)
Public propertyChannelSampleRate
This property returns the actual sample rate in Hz of the sample data BASS is using with the channel (e.g. 44100).
(Inherited from BaseEncoder.)
Public propertyDefaultOutputExtension
This return the default extension of an output file for this encoder (e.g. ".aif"). Here the AIFF_DefaultOutputExtension value is returned.
(Overrides BaseEncoderDefaultOutputExtension.)
Public propertyEffectiveBitrate
Returns the effective encoder bitrate (in kbps) of the output.
(Overrides BaseEncoderEffectiveBitrate.)
Public propertyEncoderCommandLine
Returns the OutputFile, since WAV does not use any command-line tool.
(Overrides BaseEncoderEncoderCommandLine.)
Public propertyEncoderDirectory
Gets or Sets the encoder's base directory.
(Inherited from BaseEncoder.)
Public propertyEncoderExists
This property should return , if the encoder exists and is available - else should be returned.
(Inherited from BaseEncoder.)
Public propertyEncoderHandle
Gets or sets the current HENCODE encoder handle.
(Inherited from BaseEncoder.)
Public propertyEncoderType
Gets a value indicating the type of content. Here the AIFF_EncoderType value is returned.
(Overrides BaseEncoderEncoderType.)
Public propertyForce16Bit
Always returns false, since this encoder doesn't supports this flag. The target format can be set via the AIFF_BitsPerSample property.
Public propertyInputFile
Gets or Sets the input file name to be processed by the encoder (null = STDIN, default).
(Inherited from BaseEncoder.)
Public propertyIsActive
Gets a value indicating if the encoder has been started (see Start(ENCODEPROC, IntPtr, Boolean)) and is active - else will be returned.
(Inherited from BaseEncoder.)
Public propertyIsPaused
Gets a value indicating if the encoder has been paused (see Pause(Boolean)) - else must be returned.
(Inherited from BaseEncoder.)
Public propertyNoLimit
Gets or Sets if encoding should use the CAST_NOLIMIT flag (which is only needed, if the encoder is used for streaming).
(Inherited from BaseEncoder.)
Public propertyOutputFile
Gets or Sets the output file name to be processed by the encoder (null = STDOUT, default).
(Inherited from BaseEncoder.)
Public propertySupportsSTDOUT
AIFF does not implement STDOUT, so is always returned.
(Overrides BaseEncoderSupportsSTDOUT.)
Public propertyTAGs
Gets or Sets the TAG_INFO structure associated with the encoder.
(Inherited from BaseEncoder.)
Public propertyUseAsyncQueue
Gets or Sets if encoding should use an async queue (i.e. the BASS_ENCODE_QUEUE flag).
(Inherited from BaseEncoder.)
Top
Methods

  NameDescription
Public methodDispose
Implement IDisposable.
(Inherited from BaseEncoder.)
Protected methodFinalize
Finalization code.
(Inherited from BaseEncoder.)
Public methodPause
Pauses or resumes an encoder.
(Inherited from BaseEncoder.)
Public methodSettingsString
Returns the string representation of the current encoder settings.
(Overrides BaseEncoderSettingsString.)
Public methodStart
This method starts the actual AIFF encoder.
(Overrides BaseEncoderStart(ENCODEPROC, IntPtr, Boolean).)
Public methodStop
Stops the encoder (if started).
(Inherited from BaseEncoder.)
Public methodStop(Boolean)
Stops the encoder (if started).
(Inherited from BaseEncoder.)
Public methodToString
Returns the name of the Encoder.
(Overrides ObjectToString.)
Top
Fields

  NameDescription
Public fieldAIFF_DefaultOutputExtension
Gets or Sets the default output extension to be used by the encoder (e.g. ".aif").
Public fieldAIFF_EncoderType
Gets or Sets the BASSChannelType which will be supported by the encoder.
Top
Remarks

This class uses the BASS_CTYPE_STREAM_AIFF encoder type.

This format supports 8-, 16- and 32-bit(IEEE float) sample data as input.

Make sure to set the AIFF_xxx flags before calling Start(ENCODEPROC, IntPtr, Boolean).

TAG writing is not supported.

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 (BASS_ChannelPlay(Int32, Boolean)) or call BASS_ChannelGetData(Int32, IntPtr, Int32) (if it's a decoding channel). So there is no need to call BASS_Encode_Write(Int32, IntPtr, Int32) manually!

If you simply want to encode a physical file please also take a look to the EncodeFile(String, String, BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean).

Examples

Manual encoding "File" To "File" in 32-bit:
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()
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();
Manual encoding "File" To "File" in 24-bit:
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()
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();
"Recording" To "File" in 16-bit:
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
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;
}
See Also

Reference