Un4seen.Bass.MiscBaseEncoder
More...
Namespace: Un4seen.Bass.Misc
Assembly: Bass.Net (in Bass.Net.dll) Version: 2.4.17.5
The BaseEncoder type exposes the following members.
Name | Description | |
---|---|---|
![]() | BaseEncoder |
Default constructor, which already evaluates the channel handle and evaluates the ChannelBitwidth.
|
Name | Description | |
---|---|---|
![]() | ChannelBitwidth |
This property returns the actual bitwidth of the sample data of the channel (e.g. 8, 16, 32).
|
![]() | ChannelHandle |
Gets or Sets the channel handle which is used to create the broadcast encoder class.
|
![]() | ChannelInfo |
Returns the general channel info.
|
![]() | ChannelNumChans |
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.).
|
![]() | ChannelSampleRate |
This property returns the actual sample rate in Hz of the sample data BASS is using with the channel (e.g. 44100).
|
![]() | DefaultOutputExtension |
This property should return the default extension of an output file for this encoder (e.g. ".mp3" or ".ogg" etc.).
|
![]() | EffectiveBitrate |
This property should return the target effective bitrate of the encoder output (in kbps, e.g. 128 kbps).
|
![]() | EncoderCommandLine |
This property should return an encoder command-line string,
which might be used with the BASS_Encode_Start(Int32, String, BASSEncode, ENCODEPROC, IntPtr) method in order to create and start the encoder.
|
![]() | EncoderDirectory |
Gets or Sets the encoder's base directory.
|
![]() | EncoderExists |
This property should return , if the encoder exists and is available - else should be returned.
|
![]() | EncoderHandle |
Gets or sets the current HENCODE encoder handle.
|
![]() | EncoderType |
This property should return a value indicating which type of content the broadcast encoder implements.
|
![]() | Force16Bit |
Gets or Sets if a encoding in 16-bit sample data should be forced (default is ).
|
![]() | InputFile |
Gets or Sets the input file name to be processed by the encoder (null = STDIN, default).
|
![]() | IsActive |
Gets a value indicating if the encoder has been started (see Start(ENCODEPROC, IntPtr, Boolean)) and is active - else will be returned.
|
![]() | IsPaused |
Gets a value indicating if the encoder has been paused (see Pause(Boolean)) - else must be returned.
|
![]() | IsStreaming |
Is this instance used for streaming? When set to true, some internal encoder options might be set.
Default is false.
|
![]() | NoLimit |
Gets or Sets if encoding should use the CAST_NOLIMIT flag (which is only needed, if the encoder is used for streaming).
|
![]() | OutputFile |
Gets or Sets the output file name to be processed by the encoder (null = STDOUT, default).
|
![]() | SupportsSTDOUT |
This property should return , if the base encoder implementation (resp. the underlying command-line tool being used) support STDOUT for output of the encoded data - else must be returned.
|
![]() | TAGs |
Gets or Sets the TAG_INFO structure associated with the encoder.
|
![]() | UseAsyncQueue |
Gets or Sets if encoding should use an async queue (i.e. the BASS_ENCODE_QUEUE flag).
|
Name | Description | |
---|---|---|
![]() | Dispose |
Implement IDisposable.
|
![]() ![]() ![]() | EncodeFile(BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean) |
Encodes a given input file to a given output file using the specified encoder.
|
![]() ![]() ![]() | EncodeFile(BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean, Boolean) |
Encodes a given input file to a given output file using the specified encoder.
|
![]() ![]() ![]() | EncodeFile(String, String, BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean) |
Encodes a given input file to a given output file using the specified encoder.
|
![]() ![]() ![]() | EncodeFile(String, String, BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean, Boolean) |
Encodes a given input file to a given output file using the specified encoder.
|
![]() ![]() ![]() | EncodeFile(BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean, Boolean, Double, Double) |
Encodes a given input file to a given output file using the specified encoder.
|
![]() ![]() ![]() | EncodeFile(BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean, Boolean, Int64, Int64) |
Encodes a given input file to a given output file using the specified encoder.
|
![]() ![]() ![]() | EncodeFile(String, String, BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean, Boolean, Double, Double) |
Encodes a given input file to a given output file using the specified encoder.
|
![]() ![]() ![]() | EncodeFile(String, String, BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean, Boolean, Int64, Int64) |
Encodes a given input file to a given output file using the specified encoder.
|
![]() | Finalize |
Finalization code.
(Overrides ObjectFinalize.) |
![]() | Pause |
Pauses or resumes an encoder.
|
![]() | SettingsString |
Returns the string representation of the current encoder settings.
|
![]() | Start |
This method must implement the actual start of the encoder.
After the encoder was started successfully the EncoderHandle must return a valid HENCODE handle.
|
![]() | Stop |
Stops the encoder immediately (if started).
|
![]() | Stop(Boolean) |
Stops the encoder (if started).
|
Internally, the sending of sample data to the encoder is implemented via a DSP callback on the ChannelHandle. That means when you play the ChannelHandle (or call BASS_ChannelGetData(Int32, IntPtr, 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 BASS_CONFIG_FLOATDSP option is enabled, the sample data will be 32-bit floating-point.
A derived class must implement: EncoderType, SupportsSTDOUT, EncoderCommandLine, EffectiveBitrate and Stop.
The properties ChannelHandle, ChannelBitwidth, ChannelSampleRate, ChannelNumChans, EncoderHandle, EncoderDirectory, IsActive, IsPaused, InputFile and OutputFile as well as the methods Stop and Pause(Boolean) have been already implemented.
You might use this base class to derive your own Encoder implementations. In this case a derived class must only implement the following members: Start(ENCODEPROC, IntPtr, Boolean), EncoderCommandLine, EncoderType and SupportsSTDOUT.
If an instance of a derived class is being disposed, an already assigned Encoder will automatically be stopped.
How to use an encoder implementation:
Scenario: | How-To: |
---|---|
"Recording" To "Streaming": | Create a recording handle with BASS_RecordStart(Int32, Int32, BASSFlag, RECORDPROC, IntPtr).
Set InputFile and OutputFile to (STDIN, STDOUT). Use the encoder instance to create a StreamingServer, which is then used by the BroadCast class. |
"Recording" To "File": | Create a recording handle with BASS_RecordStart(Int32, Int32, BASSFlag, RECORDPROC, IntPtr).
Set InputFile to and the OutputFile to a file name (STDIN, file). Call Start(ENCODEPROC, IntPtr, Boolean) to start encoding and Stop to stop the live recording encoding. |
"Stream" To "Streaming": | Create a stream handle e.g. with BASS_StreamCreateFile(String, Int64, Int64, BASSFlag) (either normal or decoding).
Set InputFile to and the OutputFile to a file name (STDIN, file). Use the encoder instance to create a StreamingServer, which is then used by the BroadCast class. Call BASS_ChannelPlay(Int32, Boolean) resp. BASS_ChannelGetData(Int32, IntPtr, Int32) (if using a decoding stream) to play resp. decode the stream and actually feed the encoder and therewith the broadcasting server. Hint: You might use BASS_Mixer_StreamCreate(Int32, Int32, BASSFlag) to create a continues mixer output stream channel for streaming. |
"Stream" To "File": | Create a stream handle e.g. with BASS_StreamCreateFile(String, Int64, Int64, BASSFlag) (either normal or decoding).
Set InputFile to and the OutputFile to a file name (STDIN, file). Call BASS_ChannelPlay(Int32, Boolean) resp. BASS_ChannelGetData(Int32, IntPtr, Int32) (if using a decoding stream) to play resp. decode the stream and actually feed the encoder. 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); |
"File" To "Streaming": | Create a stream handle e.g. with BASS_StreamCreateFile(String, Int64, Int64, BASSFlag) (either normal or decoding).
Just like the above example. And use the stream handle to create the encoder instance.
Set InputFile to and OutputFile to (STDIN, STDOUT). Use the encoder instance to create a StreamingServer, which is then used by the BroadCast class. |
"File" To "File": | No stream handle is actually needed.
Set InputFile and OutputFile to a file name (file, file). Call Start(ENCODEPROC, IntPtr, Boolean) to start encoding and Stop to stop encoding. Or simply use the EncodeFile(String, String, BaseEncoder, BaseEncoderENCODEFILEPROC, Boolean, Boolean) method instead. |
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 && !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(); } }
Reference
Un4seen.Bass.MiscBaseEncoder
Un4seen.Bass.MiscEncoderACM
Un4seen.Bass.MiscEncoderAIFF
Un4seen.Bass.MiscEncoderBassEnc_Aac
Un4seen.Bass.MiscEncoderBassEnc_Flac
Un4seen.Bass.MiscEncoderBassEnc_Mp3
Un4seen.Bass.MiscEncoderBassEnc_Ogg
Un4seen.Bass.MiscEncoderBassEnc_Opus
Un4seen.Bass.MiscEncoderCMDLN
Un4seen.Bass.MiscEncoderFAAC
Un4seen.Bass.MiscEncoderFHGAACplus
Un4seen.Bass.MiscEncoderFLAC
Un4seen.Bass.MiscEncoderLAME
Un4seen.Bass.MiscEncoderMP3S
Un4seen.Bass.MiscEncoderMPC
Un4seen.Bass.MiscEncoderNeroAAC
Un4seen.Bass.MiscEncoderOGG
Un4seen.Bass.MiscEncoderOPUS
Un4seen.Bass.MiscEncoderQTAAC
Un4seen.Bass.MiscEncoderTooLAME
Un4seen.Bass.MiscEncoderTwoLAME
Un4seen.Bass.MiscEncoderWAV
Un4seen.Bass.MiscEncoderWavPack
Un4seen.Bass.MiscEncoderWinampAACplus
Un4seen.Bass.MiscEncoderWMA