Cleanup IAudioDest; CompressionLevel is now part of AudioEncoderSettings.

FLAC encoders no longer offer non-subset compression levels by default.
This commit is contained in:
Grigory Chudov
2013-04-01 23:03:22 -04:00
parent 773c6d63fa
commit 9dd4897acc
44 changed files with 374 additions and 524 deletions

View File

@@ -1018,7 +1018,7 @@ namespace CUERipper
{ {
trackBarEncoderMode.Maximum = modes.Length - 1; trackBarEncoderMode.Maximum = modes.Length - 1;
trackBarEncoderMode.Value = encoder.DefaultModeIndex == -1 ? modes.Length - 1 : encoder.DefaultModeIndex; trackBarEncoderMode.Value = encoder.DefaultModeIndex == -1 ? modes.Length - 1 : encoder.DefaultModeIndex;
labelEncoderMode.Text = encoder.default_mode; labelEncoderMode.Text = encoder.EncoderMode;
labelEncoderMinMode.Text = modes[0]; labelEncoderMinMode.Text = modes[0];
labelEncoderMaxMode.Text = modes[modes.Length - 1]; labelEncoderMaxMode.Text = modes[modes.Length - 1];
trackBarEncoderMode.Visible = true; trackBarEncoderMode.Visible = true;
@@ -1032,8 +1032,8 @@ namespace CUERipper
{ {
CUEToolsUDC encoder = bnComboBoxEncoder.SelectedItem as CUEToolsUDC; CUEToolsUDC encoder = bnComboBoxEncoder.SelectedItem as CUEToolsUDC;
string[] modes = encoder.SupportedModes; string[] modes = encoder.SupportedModes;
encoder.default_mode = modes[trackBarEncoderMode.Value]; encoder.EncoderMode = modes[trackBarEncoderMode.Value];
labelEncoderMode.Text = encoder.default_mode; labelEncoderMode.Text = encoder.EncoderMode;
} }
private void trackBarSecureMode_Scroll(object sender, EventArgs e) private void trackBarSecureMode_Scroll(object sender, EventArgs e)

View File

@@ -176,8 +176,11 @@ namespace CUETools.ALACEnc
try try
{ {
if (level >= 0) var settings = new ALACWriterSettings();
alac.CompressionLevel = level; settings.DoVerify = do_verify;
if (level >= 0)
settings.EncoderModeIndex = level;
alac.Settings = settings;
if (stereo_method != null) if (stereo_method != null)
alac.StereoMethod = Alac.LookupStereoMethod(stereo_method); alac.StereoMethod = Alac.LookupStereoMethod(stereo_method);
if (order_method != null) if (order_method != null)

View File

@@ -931,21 +931,15 @@ namespace CUETools.AccurateRip
throw new Exception("unsupported"); throw new Exception("unsupported");
} }
public int CompressionLevel public AudioEncoderSettings Settings
{
get { return 0; }
set { }
}
public object Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {
if (value != null && value.GetType() != typeof(object)) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -413,21 +413,15 @@ namespace CUETools.AccurateRip
throw new Exception("unsupported"); throw new Exception("unsupported");
} }
public int CompressionLevel public AudioEncoderSettings Settings
{
get { return 0; }
set { }
}
public object Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {
if (value != null && value.GetType() != typeof(object)) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -33,16 +33,21 @@ using CUETools.Codecs;
namespace CUETools.Codecs.ALAC namespace CUETools.Codecs.ALAC
{ {
public class ALACWriterSettings public class ALACWriterSettings: AudioEncoderSettings
{ {
public ALACWriterSettings() { DoVerify = false; } public ALACWriterSettings()
: base("0 1 2 3 4 5 6 7 8 9 10", "3")
{
DoVerify = false;
}
[DefaultValue(false)] [DefaultValue(false)]
[DisplayName("Verify")] [DisplayName("Verify")]
[Description("Decode each frame and compare with original")] [Description("Decode each frame and compare with original")]
public bool DoVerify { get; set; } public bool DoVerify { get; set; }
} }
[AudioEncoderClass("cuetools", "m4a", true, "0 1 2 3 4 5 6 7 8 9 10", "3", 1, typeof(ALACWriterSettings))] [AudioEncoderClass("cuetools", "m4a", true, 1, typeof(ALACWriterSettings))]
public class ALACWriter : IAudioDest public class ALACWriter : IAudioDest
{ {
Stream _IO = null; Stream _IO = null;
@@ -81,7 +86,6 @@ namespace CUETools.Codecs.ALAC
float[] windowBuffer; float[] windowBuffer;
int samplesInBuffer = 0; int samplesInBuffer = 0;
int _compressionLevel = 5;
int _blocksize = 0; int _blocksize = 0;
int _totalSize = 0; int _totalSize = 0;
int _windowsize = 0, _windowcount = 0; int _windowsize = 0, _windowcount = 0;
@@ -114,7 +118,7 @@ namespace CUETools.Codecs.ALAC
residualBuffer = new int[Alac.MAX_BLOCKSIZE * (_pcm.ChannelCount == 2 ? 6 : _pcm.ChannelCount + 1)]; residualBuffer = new int[Alac.MAX_BLOCKSIZE * (_pcm.ChannelCount == 2 ? 6 : _pcm.ChannelCount + 1)];
windowBuffer = new float[Alac.MAX_BLOCKSIZE * 2 * Alac.MAX_LPC_WINDOWS]; windowBuffer = new float[Alac.MAX_BLOCKSIZE * 2 * Alac.MAX_LPC_WINDOWS];
eparams.set_defaults(_compressionLevel); eparams.set_defaults(5);
eparams.padding_size = 4096; eparams.padding_size = 4096;
frame = new ALACFrame(_pcm.ChannelCount == 2 ? 5 : _pcm.ChannelCount); frame = new ALACFrame(_pcm.ChannelCount == 2 ? 5 : _pcm.ChannelCount);
@@ -134,24 +138,9 @@ namespace CUETools.Codecs.ALAC
} }
} }
public int CompressionLevel
{
get
{
return _compressionLevel;
}
set
{
if (value < 0 || value > 10)
throw new Exception("unsupported compression level");
_compressionLevel = value;
eparams.set_defaults(_compressionLevel);
}
}
ALACWriterSettings _settings = new ALACWriterSettings(); ALACWriterSettings _settings = new ALACWriterSettings();
public object Settings public AudioEncoderSettings Settings
{ {
get get
{ {
@@ -162,7 +151,11 @@ namespace CUETools.Codecs.ALAC
if (value as ALACWriterSettings == null) if (value as ALACWriterSettings == null)
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
_settings = value as ALACWriterSettings; _settings = value as ALACWriterSettings;
} var _compressionLevel = _settings.EncoderModeIndex;
if (_compressionLevel < 0 || _compressionLevel > 10)
throw new Exception("unsupported compression level");
eparams.set_defaults(_compressionLevel);
}
} }
public long Padding public long Padding

View File

@@ -252,12 +252,22 @@ namespace CUETools { namespace Codecs { namespace APE {
} }
}; };
[AudioEncoderClass("MAC_SDK", "ape", true, "fast normal high extra insane", "high", 1, Object::typeid)] public ref class APEWriterSettings : AudioEncoderSettings
{
public:
APEWriterSettings()
: AudioEncoderSettings("fast normal high extra insane", "high")
{
}
};
[AudioEncoderClass("MAC_SDK", "ape", true, 1, APEWriterSettings::typeid)]
public ref class APEWriter : IAudioDest public ref class APEWriter : IAudioDest
{ {
public: public:
APEWriter(String^ path, AudioPCMConfig^ pcm) APEWriter(String^ path, AudioPCMConfig^ pcm)
{ {
_settings = gcnew APEWriterSettings();
_pcm = pcm; _pcm = pcm;
if (_pcm->ChannelCount != 1 && _pcm->ChannelCount != 2) if (_pcm->ChannelCount != 1 && _pcm->ChannelCount != 2)
@@ -268,8 +278,6 @@ namespace CUETools { namespace Codecs { namespace APE {
_path = path; _path = path;
_winFileIO = NULL; _winFileIO = NULL;
_compressionLevel = COMPRESSION_LEVEL_NORMAL;
int nRetVal; int nRetVal;
pAPECompress = CreateIAPECompress (&nRetVal); pAPECompress = CreateIAPECompress (&nRetVal);
if (!pAPECompress) if (!pAPECompress)
@@ -286,7 +294,7 @@ namespace CUETools { namespace Codecs { namespace APE {
_gchBuffer.Free(); _gchBuffer.Free();
} }
virtual void Close() void DoClose()
{ {
if (pAPECompress) if (pAPECompress)
{ {
@@ -295,10 +303,6 @@ namespace CUETools { namespace Codecs { namespace APE {
pAPECompress = NULL; pAPECompress = NULL;
} }
if ((_finalSampleCount != 0) && (_samplesWritten != _finalSampleCount)) {
throw gcnew Exception("Samples written differs from the expected sample count.");
}
if (_IO != nullptr) if (_IO != nullptr)
{ {
_IO->Close (); _IO->Close ();
@@ -306,9 +310,19 @@ namespace CUETools { namespace Codecs { namespace APE {
} }
} }
virtual void Close()
{
DoClose();
if ((_finalSampleCount != 0) && (_samplesWritten != _finalSampleCount)) {
throw gcnew Exception("Samples written differs from the expected sample count.");
}
}
virtual void Delete() virtual void Delete()
{ {
try { Close (); } catch (Exception^) {} DoClose ();
File::Delete(_path); File::Delete(_path);
} }
@@ -361,34 +375,24 @@ namespace CUETools { namespace Codecs { namespace APE {
} }
} }
virtual property Int32 CompressionLevel {
Int32 get() {
return _compressionLevel / 1000 - 1;
}
void set(Int32 value) {
if (value < 0 || value > 4)
throw gcnew Exception("Invalid compression mode.");
_compressionLevel = (value + 1) * 1000;
}
}
virtual property __int64 Padding virtual property __int64 Padding
{ {
void set(__int64 value) { void set(__int64 value) {
} }
} }
virtual property Object^ Settings virtual property AudioEncoderSettings^ Settings
{ {
Object^ get() AudioEncoderSettings^ get()
{ {
return nullptr; return _settings;
} }
void set(Object^ value) void set(AudioEncoderSettings^ value)
{ {
if (value != nullptr && value->GetType() != Object::typeid) if (value != nullptr && value->GetType() != APEWriterSettings::typeid)
throw gcnew Exception(String::Format("Unsupported options: {0}", value)); throw gcnew Exception(String::Format("Unsupported options: {0}", value));
_settings = (APEWriterSettings^)value;
} }
} }
@@ -397,7 +401,7 @@ namespace CUETools { namespace Codecs { namespace APE {
bool _initialized; bool _initialized;
Int32 _finalSampleCount, _samplesWritten; Int32 _finalSampleCount, _samplesWritten;
AudioPCMConfig^ _pcm; AudioPCMConfig^ _pcm;
Int32 _compressionLevel; APEWriterSettings^ _settings;
String^ _path; String^ _path;
Stream^ _IO; Stream^ _IO;
GCHandle _gchIO, _gchBuffer; GCHandle _gchIO, _gchBuffer;
@@ -416,6 +420,8 @@ namespace CUETools { namespace Codecs { namespace APE {
WAVEFORMATEX waveFormat; WAVEFORMATEX waveFormat;
FillWaveFormatEx (&waveFormat, _pcm->SampleRate, _pcm->BitsPerSample, _pcm->ChannelCount); FillWaveFormatEx (&waveFormat, _pcm->SampleRate, _pcm->BitsPerSample, _pcm->ChannelCount);
Int32 _compressionLevel = (_settings->EncoderModeIndex + 1) * 1000;
int res = pAPECompress->StartEx (_winFileIO, int res = pAPECompress->StartEx (_winFileIO,
&waveFormat, &waveFormat,
(_finalSampleCount == 0) ? MAX_AUDIO_BYTES_UNKNOWN : _finalSampleCount * _pcm->BlockAlign, (_finalSampleCount == 0) ? MAX_AUDIO_BYTES_UNKNOWN : _finalSampleCount * _pcm->BlockAlign,

View File

@@ -494,21 +494,15 @@ namespace CUETools.Codecs.CoreAudio
set { ; } set { ; }
} }
public int CompressionLevel public AudioEncoderSettings Settings
{
get { return 0; }
set { }
}
public object Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {
if (value != null && value.GetType() != typeof(object)) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -448,10 +448,11 @@ namespace CUETools { namespace Codecs { namespace FLAC {
} }
}; };
public ref class FLACWriterSettings public ref class FLACWriterSettings: AudioEncoderSettings
{ {
public: public:
FLACWriterSettings() FLACWriterSettings()
: AudioEncoderSettings("0 1 2 3 4 5 6 7 8", "5")
{ {
_md5Sum = true; _md5Sum = true;
_verify = false; _verify = false;
@@ -498,7 +499,7 @@ namespace CUETools { namespace Codecs { namespace FLAC {
bool _md5Sum, _verify, _disableAsm; bool _md5Sum, _verify, _disableAsm;
}; };
[AudioEncoderClass("libFLAC", "flac", true, "0 1 2 3 4 5 6 7 8", "5", 2, FLACWriterSettings::typeid)] [AudioEncoderClass("libFLAC", "flac", true, 2, FLACWriterSettings::typeid)]
public ref class FLACWriter : IAudioDest public ref class FLACWriter : IAudioDest
{ {
public: public:
@@ -515,7 +516,6 @@ namespace CUETools { namespace Codecs { namespace FLAC {
_path = path; _path = path;
_finalSampleCount = 0; _finalSampleCount = 0;
_samplesWritten = 0; _samplesWritten = 0;
_compressionLevel = 5;
_paddingLength = 8192; _paddingLength = 8192;
_blockSize = 0; _blockSize = 0;
@@ -608,25 +608,14 @@ namespace CUETools { namespace Codecs { namespace FLAC {
_samplesWritten += sampleBuffer->Length; _samplesWritten += sampleBuffer->Length;
} }
virtual property Int32 CompressionLevel { virtual property AudioEncoderSettings^ Settings
Int32 get() {
return _compressionLevel;
}
void set(Int32 value) {
if ((value < 0) || (value > 8))
throw gcnew Exception("invalid compression level");
_compressionLevel = value;
}
}
virtual property Object^ Settings
{ {
Object^ get() AudioEncoderSettings^ get()
{ {
return _settings; return _settings;
} }
void set(Object^ value) void set(AudioEncoderSettings^ value)
{ {
if (value == nullptr || value->GetType() != FLACWriterSettings::typeid) if (value == nullptr || value->GetType() != FLACWriterSettings::typeid)
throw gcnew Exception(String::Format("Unsupported options: {0}", value)); throw gcnew Exception(String::Format("Unsupported options: {0}", value));
@@ -652,7 +641,6 @@ namespace CUETools { namespace Codecs { namespace FLAC {
String^ _path; String^ _path;
Int64 _finalSampleCount, _samplesWritten, _blockSize; Int64 _finalSampleCount, _samplesWritten, _blockSize;
AudioPCMConfig^ _pcm; AudioPCMConfig^ _pcm;
Int32 _compressionLevel;
__int64 _paddingLength; __int64 _paddingLength;
FLAC__StreamMetadata **_metadataList; FLAC__StreamMetadata **_metadataList;
int _metadataCount; int _metadataCount;
@@ -726,7 +714,7 @@ namespace CUETools { namespace Codecs { namespace FLAC {
FLAC__stream_encoder_set_total_samples_estimate(_encoder, _finalSampleCount); FLAC__stream_encoder_set_total_samples_estimate(_encoder, _finalSampleCount);
} }
FLAC__stream_encoder_set_compression_level(_encoder, _compressionLevel); FLAC__stream_encoder_set_compression_level(_encoder, _settings->EncoderModeIndex);
if (_blockSize > 0) if (_blockSize > 0)
FLAC__stream_encoder_set_blocksize(_encoder, (unsigned)_blockSize); FLAC__stream_encoder_set_blocksize(_encoder, (unsigned)_blockSize);

View File

@@ -31,9 +31,10 @@ using OpenCLNet;
namespace CUETools.Codecs.FLACCL namespace CUETools.Codecs.FLACCL
{ {
public class FLACCLWriterSettings public class FLACCLWriterSettings: AudioEncoderSettings
{ {
public FLACCLWriterSettings() public FLACCLWriterSettings()
: base("", "8")
{ {
this.DoVerify = false; this.DoVerify = false;
this.GPUOnly = true; this.GPUOnly = true;
@@ -43,8 +44,14 @@ namespace CUETools.Codecs.FLACCL
this.GroupSize = 128; this.GroupSize = 128;
this.TaskSize = 8; this.TaskSize = 8;
this.DeviceType = OpenCLDeviceType.GPU; this.DeviceType = OpenCLDeviceType.GPU;
this.AllowNonSubset = false;
} }
public override string GetSupportedModes()
{
return this.AllowNonSubset ? "0 1 2 3 4 5 6 7 8 9 10 11" : "0 1 2 3 4 5 6 7 8";
}
[DefaultValue(false)] [DefaultValue(false)]
[DisplayName("Verify")] [DisplayName("Verify")]
[SRDescription(typeof(Properties.Resources), "DoVerifyDescription")] [SRDescription(typeof(Properties.Resources), "DoVerifyDescription")]
@@ -120,7 +127,12 @@ namespace CUETools.Codecs.FLACCL
padding = value; padding = value;
} }
} }
}
[DefaultValue(false)]
[DisplayName("Allow Non-subset")]
[SRDescription(typeof(Properties.Resources), "AllowNonSubsetDescription")]
public bool AllowNonSubset { get; set; }
}
public class FLACCLWriterSettingsPlatformConverter : TypeConverter public class FLACCLWriterSettingsPlatformConverter : TypeConverter
{ {
@@ -157,7 +169,7 @@ namespace CUETools.Codecs.FLACCL
GPU = DeviceType.GPU GPU = DeviceType.GPU
} }
[AudioEncoderClass("FLACCL", "flac", true, "0 1 2 3 4 5 6 7 8 9 10 11", "8", 2, typeof(FLACCLWriterSettings))] [AudioEncoderClass("FLACCL", "flac", true, 2, typeof(FLACCLWriterSettings))]
//[AudioEncoderClass("FLACCL nonsub", "flac", true, "9 10 11", "9", 1, typeof(FLACCLWriterSettings))] //[AudioEncoderClass("FLACCL nonsub", "flac", true, "9 10 11", "9", 1, typeof(FLACCLWriterSettings))]
public class FLACCLWriter : IAudioDest public class FLACCLWriter : IAudioDest
{ {
@@ -200,7 +212,6 @@ namespace CUETools.Codecs.FLACCL
int samplesInBuffer = 0; int samplesInBuffer = 0;
int _compressionLevel = 7;
int _blocksize = 0; int _blocksize = 0;
int _totalSize = 0; int _totalSize = 0;
@@ -245,7 +256,7 @@ namespace CUETools.Codecs.FLACCL
_path = path; _path = path;
_IO = IO; _IO = IO;
eparams.flake_set_defaults(_compressionLevel); eparams.flake_set_defaults(7);
eparams.padding_size = _settings.Padding; eparams.padding_size = _settings.Padding;
crc8 = new Crc8(); crc8 = new Crc8();
@@ -276,24 +287,9 @@ namespace CUETools.Codecs.FLACCL
} }
} }
public int CompressionLevel
{
get
{
return _compressionLevel;
}
set
{
if (value < 0 || value > 11)
throw new Exception("unsupported compression level");
_compressionLevel = value;
eparams.flake_set_defaults(_compressionLevel);
}
}
internal FLACCLWriterSettings _settings = new FLACCLWriterSettings(); internal FLACCLWriterSettings _settings = new FLACCLWriterSettings();
public object Settings public AudioEncoderSettings Settings
{ {
get get
{ {
@@ -304,6 +300,10 @@ namespace CUETools.Codecs.FLACCL
if (value as FLACCLWriterSettings == null) if (value as FLACCLWriterSettings == null)
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
_settings = value as FLACCLWriterSettings; _settings = value as FLACCLWriterSettings;
var _compressionLevel = _settings.EncoderModeIndex;
if (_compressionLevel < 0 || _compressionLevel > 11)
throw new Exception("unsupported compression level");
eparams.flake_set_defaults(_compressionLevel);
eparams.padding_size = _settings.Padding; eparams.padding_size = _settings.Padding;
} }
} }

View File

@@ -60,6 +60,15 @@ namespace CUETools.Codecs.FLACCL.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Allow non-subset modes, which allow for greater compression, but are less compatible.
/// </summary>
internal static string AllowNonSubsetDescription {
get {
return ResourceManager.GetString("AllowNonSubsetDescription", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Use additional CPU threads. /// Looks up a localized string similar to Use additional CPU threads.
/// </summary> /// </summary>

View File

@@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="AllowNonSubsetDescription" xml:space="preserve">
<value>Allow non-subset modes, which allow for greater compression, but are less compatible</value>
</data>
<data name="DescriptionCPUThreads" xml:space="preserve"> <data name="DescriptionCPUThreads" xml:space="preserve">
<value>Use additional CPU threads</value> <value>Use additional CPU threads</value>
</data> </data>

View File

@@ -34,9 +34,21 @@ using CUETools.Codecs;
namespace CUETools.Codecs.FLAKE namespace CUETools.Codecs.FLAKE
{ {
public class FlakeWriterSettings public class FlakeWriterSettings: AudioEncoderSettings
{ {
public FlakeWriterSettings() { DoVerify = false; DoMD5 = true; } public FlakeWriterSettings()
: base("", "7")
{
DoVerify = false;
DoMD5 = true;
AllowNonSubset = false;
}
public override string GetSupportedModes()
{
return this.AllowNonSubset ? "0 1 2 3 4 5 6 7 8 9 10 11" : "0 1 2 3 4 5 6 7 8";
}
[DefaultValue(false)] [DefaultValue(false)]
[DisplayName("Verify")] [DisplayName("Verify")]
[SRDescription(typeof(Properties.Resources), "DoVerifyDescription")] [SRDescription(typeof(Properties.Resources), "DoVerifyDescription")]
@@ -46,9 +58,14 @@ namespace CUETools.Codecs.FLAKE
[DisplayName("MD5")] [DisplayName("MD5")]
[SRDescription(typeof(Properties.Resources), "DoMD5Description")] [SRDescription(typeof(Properties.Resources), "DoMD5Description")]
public bool DoMD5 { get; set; } public bool DoMD5 { get; set; }
}
[AudioEncoderClass("cuetools", "flac", true, "0 1 2 3 4 5 6 7 8 9 10 11", "7", 4, typeof(FlakeWriterSettings))] [DefaultValue(false)]
[DisplayName("Allow Non-subset")]
[SRDescription(typeof(Properties.Resources), "AllowNonSubsetDescription")]
public bool AllowNonSubset { get; set; }
}
[AudioEncoderClass("cuetools", "flac", true, 4, typeof(FlakeWriterSettings))]
//[AudioEncoderClass("libFlake nonsub", "flac", true, "9 10 11", "9", 3, typeof(FlakeWriterSettings))] //[AudioEncoderClass("libFlake nonsub", "flac", true, "9 10 11", "9", 3, typeof(FlakeWriterSettings))]
public class FlakeWriter : IAudioDest public class FlakeWriter : IAudioDest
{ {
@@ -103,7 +120,6 @@ namespace CUETools.Codecs.FLAKE
double[] windowScale; double[] windowScale;
int samplesInBuffer = 0; int samplesInBuffer = 0;
int _compressionLevel = 7;
int _blocksize = 0; int _blocksize = 0;
int _totalSize = 0; int _totalSize = 0;
int _windowsize = 0, _windowcount = 0; int _windowsize = 0, _windowcount = 0;
@@ -141,7 +157,7 @@ namespace CUETools.Codecs.FLAKE
windowBuffer = new float[Flake.MAX_BLOCKSIZE * 2 * lpc.MAX_LPC_WINDOWS]; windowBuffer = new float[Flake.MAX_BLOCKSIZE * 2 * lpc.MAX_LPC_WINDOWS];
windowScale = new double[lpc.MAX_LPC_WINDOWS]; windowScale = new double[lpc.MAX_LPC_WINDOWS];
eparams.flake_set_defaults(_compressionLevel); eparams.flake_set_defaults(7);
eparams.padding_size = 8192; eparams.padding_size = 8192;
crc8 = new Crc8(); crc8 = new Crc8();
@@ -161,24 +177,9 @@ namespace CUETools.Codecs.FLAKE
} }
} }
public int CompressionLevel
{
get
{
return _compressionLevel;
}
set
{
if (value < 0 || value > 11)
throw new Exception("unsupported compression level");
_compressionLevel = value;
eparams.flake_set_defaults(_compressionLevel);
}
}
FlakeWriterSettings _settings = new FlakeWriterSettings(); FlakeWriterSettings _settings = new FlakeWriterSettings();
public object Settings public AudioEncoderSettings Settings
{ {
get get
{ {
@@ -188,7 +189,11 @@ namespace CUETools.Codecs.FLAKE
{ {
if (value as FlakeWriterSettings == null) if (value as FlakeWriterSettings == null)
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
_settings = value as FlakeWriterSettings; _settings = value as FlakeWriterSettings;
var _compressionLevel = _settings.EncoderModeIndex;
if (_compressionLevel < 0 || _compressionLevel > 11)
throw new Exception("unsupported compression level");
eparams.flake_set_defaults(_compressionLevel);
} }
} }

View File

@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.239 // Runtime Version:4.0.30319.18033
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
@@ -60,6 +60,15 @@ namespace CUETools.Codecs.FLAKE.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Allow non-subset modes, which allow for greater compression, but are less compatible.
/// </summary>
internal static string AllowNonSubsetDescription {
get {
return ResourceManager.GetString("AllowNonSubsetDescription", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Calculate MD5 hash for audio stream. /// Looks up a localized string similar to Calculate MD5 hash for audio stream.
/// </summary> /// </summary>

View File

@@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="AllowNonSubsetDescription" xml:space="preserve">
<value>Allow non-subset modes, which allow for greater compression, but are less compatible</value>
</data>
<data name="DoMD5Description" xml:space="preserve"> <data name="DoMD5Description" xml:space="preserve">
<value>Calculate MD5 hash for audio stream</value> <value>Calculate MD5 hash for audio stream</value>
</data> </data>

View File

@@ -104,13 +104,7 @@ namespace HDCDDotNet
set { throw new Exception("unsupported"); } set { throw new Exception("unsupported"); }
} }
public object Settings public AudioEncoderSettings Settings
{
get { throw new Exception("unsupported"); }
set { throw new Exception("unsupported"); }
}
public int CompressionLevel
{ {
get { throw new Exception("unsupported"); } get { throw new Exception("unsupported"); }
set { throw new Exception("unsupported"); } set { throw new Exception("unsupported"); }

View File

@@ -210,21 +210,15 @@ namespace CUETools.Codecs.Icecast
set { ; } set { ; }
} }
public int CompressionLevel public AudioEncoderSettings Settings
{
get { return 0; }
set { }
}
public object Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {
if (value != null && value.GetType() != typeof(object)) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -22,28 +22,15 @@ namespace CUETools.Codecs.LAME
private long bytesWritten = 0; private long bytesWritten = 0;
private bool inited = false; private bool inited = false;
public virtual int CompressionLevel public virtual AudioEncoderSettings Settings
{ {
get get
{ {
return 0; return new AudioEncoderSettings();
} }
set set
{ {
if (value != 0) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("unsupported compression level");
}
}
public virtual object Settings
{
get
{
return null;
}
set
{
if (value != null && value.GetType() != typeof(object))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -4,15 +4,12 @@ using CUETools.Codecs.LAME.Interop;
namespace CUETools.Codecs.LAME namespace CUETools.Codecs.LAME
{ {
//[AudioEncoderClass("lame CBR", "mp3", false, "96 128 192 256 320", "256", 2, typeof(LAMEEncoderCBRSettings))] //[AudioEncoderClass("lame CBR", "mp3", false, 2, typeof(LAMEEncoderCBRSettings))]
public class LAMEEncoderCBR : LAMEEncoder public class LAMEEncoderCBR : LAMEEncoder
{ {
private static readonly uint[] bps_table = new uint[] { 96, 128, 192, 256, 320 };
private uint bps;
private LAMEEncoderCBRSettings _settings = new LAMEEncoderCBRSettings(); private LAMEEncoderCBRSettings _settings = new LAMEEncoderCBRSettings();
public override object Settings public override AudioEncoderSettings Settings
{ {
get get
{ {
@@ -26,27 +23,6 @@ namespace CUETools.Codecs.LAME
} }
} }
public override int CompressionLevel
{
get
{
for (int i = 0; i < bps_table.Length; i++)
{
if (bps == bps_table[i])
{
return i;
}
}
return -1;
}
set
{
if (value < 0 || value > bps_table.Length)
throw new Exception("unsupported compression level");
bps = bps_table[value];
}
}
public LAMEEncoderCBR(string path, Stream IO, AudioPCMConfig pcm) public LAMEEncoderCBR(string path, Stream IO, AudioPCMConfig pcm)
: base(path, IO, pcm) : base(path, IO, pcm)
{ {
@@ -59,7 +35,7 @@ namespace CUETools.Codecs.LAME
protected override BE_CONFIG MakeConfig() protected override BE_CONFIG MakeConfig()
{ {
BE_CONFIG Mp3Config = new BE_CONFIG(PCM, _settings.CustomBitrate > 0 ? (uint)_settings.CustomBitrate : bps, 5); BE_CONFIG Mp3Config = new BE_CONFIG(PCM, _settings.CustomBitrate > 0 ? (uint)_settings.CustomBitrate : LAMEEncoderCBRSettings.bps_table[_settings.EncoderModeIndex], 5);
Mp3Config.format.lhv1.bWriteVBRHeader = 1; Mp3Config.format.lhv1.bWriteVBRHeader = 1;
Mp3Config.format.lhv1.nMode = _settings.StereoMode; Mp3Config.format.lhv1.nMode = _settings.StereoMode;
//Mp3Config.format.lhv1.nVbrMethod = VBRMETHOD.VBR_METHOD_NONE; // --cbr //Mp3Config.format.lhv1.nVbrMethod = VBRMETHOD.VBR_METHOD_NONE; // --cbr

View File

@@ -3,8 +3,10 @@ using CUETools.Codecs.LAME.Interop;
namespace CUETools.Codecs.LAME namespace CUETools.Codecs.LAME
{ {
public class LAMEEncoderCBRSettings public class LAMEEncoderCBRSettings : AudioEncoderSettings
{ {
public static readonly uint[] bps_table = new uint[] { 96, 128, 192, 256, 320 };
[DefaultValue(0)] [DefaultValue(0)]
public int CustomBitrate { get; set; } public int CustomBitrate { get; set; }
@@ -12,12 +14,8 @@ namespace CUETools.Codecs.LAME
public MpegMode StereoMode { get; set; } public MpegMode StereoMode { get; set; }
public LAMEEncoderCBRSettings() public LAMEEncoderCBRSettings()
: base("96 128 192 256 320", "256")
{ {
// Iterate through each property and call ResetValue()
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
{
property.ResetValue(this);
}
} }
} }
} }

View File

@@ -4,27 +4,12 @@ using CUETools.Codecs.LAME.Interop;
namespace CUETools.Codecs.LAME namespace CUETools.Codecs.LAME
{ {
//[AudioEncoderClass("lame VBR", "mp3", false, "V9 V8 V7 V6 V5 V4 V3 V2 V1 V0", "V2", 2, typeof(LAMEEncoderVBRSettings))] //[AudioEncoderClass("lame VBR", "mp3", false, 2, typeof(LAMEEncoderVBRSettings))]
public class LAMEEncoderVBR : LAMEEncoder public class LAMEEncoderVBR : LAMEEncoder
{ {
private int quality = 0;
private LAMEEncoderVBRSettings _settings = new LAMEEncoderVBRSettings(); private LAMEEncoderVBRSettings _settings = new LAMEEncoderVBRSettings();
public override int CompressionLevel public override AudioEncoderSettings Settings
{
get
{
return 9 - quality;
}
set
{
if (value < 0 || value > 9)
throw new Exception("unsupported compression level");
quality = 9 - value;
}
}
public override object Settings
{ {
get get
{ {
@@ -54,7 +39,7 @@ namespace CUETools.Codecs.LAME
Mp3Config.format.lhv1.bWriteVBRHeader = 1; Mp3Config.format.lhv1.bWriteVBRHeader = 1;
Mp3Config.format.lhv1.nMode = MpegMode.JOINT_STEREO; Mp3Config.format.lhv1.nMode = MpegMode.JOINT_STEREO;
Mp3Config.format.lhv1.bEnableVBR = 1; Mp3Config.format.lhv1.bEnableVBR = 1;
Mp3Config.format.lhv1.nVBRQuality = quality; Mp3Config.format.lhv1.nVBRQuality = 9 - _settings.EncoderModeIndex;
Mp3Config.format.lhv1.nVbrMethod = VBRMETHOD.VBR_METHOD_NEW; // --vbr-new Mp3Config.format.lhv1.nVbrMethod = VBRMETHOD.VBR_METHOD_NEW; // --vbr-new
return Mp3Config; return Mp3Config;
} }

View File

@@ -2,17 +2,14 @@
namespace CUETools.Codecs.LAME namespace CUETools.Codecs.LAME
{ {
public class LAMEEncoderVBRSettings public class LAMEEncoderVBRSettings : AudioEncoderSettings
{ {
[DefaultValue(LAMEEncoderVBRProcessingQuality.Normal)] [DefaultValue(LAMEEncoderVBRProcessingQuality.Normal)]
public LAMEEncoderVBRProcessingQuality Quality { get; set; } public LAMEEncoderVBRProcessingQuality Quality { get; set; }
public LAMEEncoderVBRSettings() public LAMEEncoderVBRSettings()
: base("V9 V8 V7 V6 V5 V4 V3 V2 V1 V0", "V2")
{ {
// Iterate through each property and call ResetValue()
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this)) {
property.ResetValue(this);
}
} }
} }
} }

View File

@@ -61,12 +61,6 @@ namespace CUETools.Codecs.LAME
set { } set { }
} }
public virtual int CompressionLevel
{
get { return 0; }
set { }
}
public long FinalSampleCount public long FinalSampleCount
{ {
set set
@@ -94,11 +88,11 @@ namespace CUETools.Codecs.LAME
get { return this.outputPath; } get { return this.outputPath; }
} }
public virtual object Settings public virtual AudioEncoderSettings Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {

View File

@@ -3,12 +3,9 @@ using System.IO;
namespace CUETools.Codecs.LAME namespace CUETools.Codecs.LAME
{ {
[AudioEncoderClass("CBR (libmp3lame)", "mp3", false, "96 128 192 256 320", "256", 1, typeof(LameWriterCBRSettings))] [AudioEncoderClass("CBR (libmp3lame)", "mp3", false, 1, typeof(LameWriterCBRSettings))]
public class LameWriterCBR : LameWriter public class LameWriterCBR : LameWriter
{ {
private static readonly int[] bps_table = new int[] { 96, 128, 192, 256, 320 };
private int bps;
public LameWriterCBR(string path, Stream IO, AudioPCMConfig pcm) public LameWriterCBR(string path, Stream IO, AudioPCMConfig pcm)
: base(IO, pcm) : base(IO, pcm)
{ {
@@ -19,30 +16,9 @@ namespace CUETools.Codecs.LAME
{ {
} }
public override int CompressionLevel
{
get
{
for (int i = 0; i < bps_table.Length; i++)
{
if (bps == bps_table[i])
{
return i;
}
}
return -1;
}
set
{
if (value < 0 || value > bps_table.Length)
throw new Exception("unsupported compression level");
bps = bps_table[value];
}
}
LameWriterCBRSettings _settings = new LameWriterCBRSettings(); LameWriterCBRSettings _settings = new LameWriterCBRSettings();
public override object Settings public override AudioEncoderSettings Settings
{ {
get get
{ {
@@ -60,7 +36,7 @@ namespace CUETools.Codecs.LAME
{ {
get get
{ {
return LameWriterConfig.CreateCbr(this.bps, this._settings.Quality); return LameWriterConfig.CreateCbr(LameWriterCBRSettings.bps_table[this._settings.EncoderModeIndex], this._settings.Quality);
} }
} }
} }

View File

@@ -5,19 +5,16 @@ using System.Text;
namespace CUETools.Codecs.LAME namespace CUETools.Codecs.LAME
{ {
public class LameWriterCBRSettings public class LameWriterCBRSettings : AudioEncoderSettings
{ {
public static readonly int[] bps_table = new int[] { 96, 128, 192, 256, 320 };
[DefaultValue(LameQuality.High)] [DefaultValue(LameQuality.High)]
public LameQuality Quality { get; set; } public LameQuality Quality { get; set; }
public LameWriterCBRSettings() public LameWriterCBRSettings()
: base("96 128 192 256 320", "256")
{ {
// Iterate through each property and call ResetValue()
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
{
property.ResetValue(this);
}
this.Quality = LameQuality.High;
} }
} }
} }

View File

@@ -3,11 +3,9 @@ using System.IO;
namespace CUETools.Codecs.LAME namespace CUETools.Codecs.LAME
{ {
[AudioEncoderClass("VBR (libmp3lame)", "mp3", false, "V9 V8 V7 V6 V5 V4 V3 V2 V1 V0", "V2", 2, typeof(LameWriterVBRSettings))] [AudioEncoderClass("VBR (libmp3lame)", "mp3", false, 2, typeof(LameWriterVBRSettings))]
public class LameWriterVBR : LameWriter public class LameWriterVBR : LameWriter
{ {
private int quality = 0;
public LameWriterVBR(string path, Stream IO, AudioPCMConfig pcm) public LameWriterVBR(string path, Stream IO, AudioPCMConfig pcm)
: base(IO, pcm) : base(IO, pcm)
{ {
@@ -18,23 +16,9 @@ namespace CUETools.Codecs.LAME
{ {
} }
public override int CompressionLevel
{
get
{
return 9 - quality;
}
set
{
if (value < 0 || value > 9)
throw new Exception("unsupported compression level");
quality = 9 - value;
}
}
LameWriterVBRSettings _settings = new LameWriterVBRSettings(); LameWriterVBRSettings _settings = new LameWriterVBRSettings();
public override object Settings public override AudioEncoderSettings Settings
{ {
get get
{ {
@@ -52,7 +36,7 @@ namespace CUETools.Codecs.LAME
{ {
get get
{ {
return LameWriterConfig.CreateVbr(this.quality, this._settings.Quality); return LameWriterConfig.CreateVbr(9 - this._settings.EncoderModeIndex, this._settings.Quality);
} }
} }
} }

View File

@@ -5,18 +5,14 @@ using System.Text;
namespace CUETools.Codecs.LAME namespace CUETools.Codecs.LAME
{ {
public class LameWriterVBRSettings public class LameWriterVBRSettings: AudioEncoderSettings
{ {
[DefaultValue(LameQuality.High)] [DefaultValue(LameQuality.High)]
public LameQuality Quality { get; set; } public LameQuality Quality { get; set; }
public LameWriterVBRSettings() public LameWriterVBRSettings()
: base("V9 V8 V7 V6 V5 V4 V3 V2 V1 V0", "V2")
{ {
// Iterate through each property and call ResetValue()
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this)) {
property.ResetValue(this);
}
this.Quality = LameQuality.High;
} }
} }
} }

View File

@@ -76,21 +76,15 @@ namespace CUETools.Codecs.LossyWAV
set { } set { }
} }
public int CompressionLevel public AudioEncoderSettings Settings
{
get { return 0; }
set { }
}
public object Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {
if (value != null && value.GetType() != typeof(object)) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -205,7 +205,7 @@ namespace TTA {
} }
}; };
[AudioEncoderClass("ttalib", "tta", true, "", "", 1, Object::typeid)] [AudioEncoderClass("ttalib", "tta", true, 1, AudioEncoderSettings::typeid)]
public ref class TTAWriter : public IAudioDest public ref class TTAWriter : public IAudioDest
{ {
public: public:
@@ -221,7 +221,6 @@ namespace TTA {
_path = path; _path = path;
_finalSampleCount = 0; _finalSampleCount = 0;
_samplesWritten = 0; _samplesWritten = 0;
_compressionLevel = 5;
_blockSize = 0; _blockSize = 0;
} }
@@ -316,33 +315,22 @@ namespace TTA {
_samplesWritten += sampleBuffer->Length; _samplesWritten += sampleBuffer->Length;
} }
virtual property Int32 CompressionLevel {
Int32 get() {
return _compressionLevel;
}
void set(Int32 value) {
if (value > 0)
throw gcnew Exception("Invalid compression level.");
_compressionLevel = value;
}
}
virtual property __int64 Padding virtual property __int64 Padding
{ {
void set(__int64 value) { void set(__int64 value) {
} }
} }
virtual property Object^ Settings virtual property AudioEncoderSettings^ Settings
{ {
Object^ get() AudioEncoderSettings^ get()
{ {
return nullptr; return gcnew AudioEncoderSettings();
} }
void set(Object^ value) void set(AudioEncoderSettings^ value)
{ {
if (value != nullptr && value->GetType() != Object::typeid) if (value != nullptr && value->GetType() != AudioEncoderSettings::typeid)
throw gcnew Exception(String::Format("Unsupported options: {0}", value)); throw gcnew Exception(String::Format("Unsupported options: {0}", value));
} }
} }
@@ -355,87 +343,12 @@ namespace TTA {
String^ _path; String^ _path;
Int64 _finalSampleCount, _samplesWritten, _blockSize; Int64 _finalSampleCount, _samplesWritten, _blockSize;
AudioPCMConfig^ _pcm; AudioPCMConfig^ _pcm;
Int32 _compressionLevel;
void Initialize() void Initialize()
{ {
if (!_finalSampleCount) if (!_finalSampleCount)
throw gcnew Exception("FinalSampleCount not set."); throw gcnew Exception("FinalSampleCount not set.");
//FLAC__StreamMetadata *padding, *seektable, *vorbiscomment;
//_metadataList = new FLAC__StreamMetadata*[8];
//_metadataCount = 0;
//if (_finalSampleCount != 0) {
// seektable = FLAC__metadata_object_new(FLAC__METADATA_TYPE_SEEKTABLE);
// FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(
// seektable, _sampleRate * 10, _finalSampleCount);
// FLAC__metadata_object_seektable_template_sort(seektable, true);
// _metadataList[_metadataCount++] = seektable;
//}
//vorbiscomment = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
//for (int tagno = 0; tagno < _tags->Count; tagno++)
//{
// String ^ tag_name = _tags->GetKey(tagno);
// int tag_len = tag_name->Length;
// char * tag = new char [tag_len + 1];
// IntPtr nameChars = Marshal::StringToHGlobalAnsi(tag_name);
// memcpy (tag, (const char*)nameChars.ToPointer(), tag_len);
// Marshal::FreeHGlobal(nameChars);
// tag[tag_len] = 0;
// array<String^>^ tag_values = _tags->GetValues(tagno);
// for (int valno = 0; valno < tag_values->Length; valno++)
// {
// UTF8Encoding^ enc = gcnew UTF8Encoding();
// array<Byte>^ value_array = enc->GetBytes (tag_values[valno]);
// int value_len = value_array->Length;
// char * value = new char [value_len + 1];
// Marshal::Copy (value_array, 0, (IntPtr) value, value_len);
// value[value_len] = 0;
// FLAC__StreamMetadata_VorbisComment_Entry entry;
// /* create and entry and append it */
// if(!FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(&entry, tag, value)) {
// throw gcnew Exception("Unable to add tags, must be valid utf8.");
// }
// if(!FLAC__metadata_object_vorbiscomment_append_comment(vorbiscomment, entry, /*copy=*/false)) {
// throw gcnew Exception("Unable to add tags.");
// }
// delete [] value;
// }
// delete [] tag;
//}
//_metadataList[_metadataCount++] = vorbiscomment;
//if (_paddingLength != 0) {
// padding = FLAC__metadata_object_new(FLAC__METADATA_TYPE_PADDING);
// padding->length = _paddingLength;
// _metadataList[_metadataCount++] = padding;
//}
//FLAC__stream_encoder_set_metadata(_encoder, _metadataList, _metadataCount);
//FLAC__stream_encoder_set_verify(_encoder, _verify);
//if (_finalSampleCount != 0) {
// FLAC__stream_encoder_set_total_samples_estimate(_encoder, _finalSampleCount);
//}
//FLAC__stream_encoder_set_compression_level(_encoder, _compressionLevel);
//if (_blockSize > 0)
// FLAC__stream_encoder_set_blocksize(_encoder, (unsigned)_blockSize);
//if (FLAC__stream_encoder_init_FILE(_encoder, hFile, NULL, NULL) !=
// FLAC__STREAM_ENCODER_INIT_STATUS_OK)
//{
// throw gcnew Exception("Unable to initialize the encoder.");
//}
_IO = gcnew FileStream (_path, FileMode::Create, FileAccess::Write, FileShare::Read); _IO = gcnew FileStream (_path, FileMode::Create, FileAccess::Write, FileShare::Read);
try try
{ {

View File

@@ -2,19 +2,18 @@
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using CUETools.Codecs; using CUETools.Codecs;
using System.IO; using System.IO;
using System.Text;
using WindowsMediaLib; using WindowsMediaLib;
using WindowsMediaLib.Defs; using WindowsMediaLib.Defs;
using System.Runtime.InteropServices;
namespace CUETools.Codecs.WMA namespace CUETools.Codecs.WMA
{ {
public class WMAWriterSettings public class WMAWriterSettings : AudioEncoderSettings
{ {
public WMAWriterSettings() { } public WMAWriterSettings() { }
} }
[AudioEncoderClass("windows", "wma", true, 1, typeof(WMAWriterSettings))]
[AudioEncoderClass("windows", "wma", true, "", "", 1, typeof(WMAWriterSettings))]
public class WMAWriter : IAudioDest public class WMAWriter : IAudioDest
{ {
IWMProfileManager m_pProfileManager; IWMProfileManager m_pProfileManager;
@@ -32,12 +31,6 @@ namespace CUETools.Codecs.WMA
set { } set { }
} }
public virtual int CompressionLevel
{
get { return 0; }
set { }
}
public long FinalSampleCount public long FinalSampleCount
{ {
set set
@@ -61,9 +54,20 @@ namespace CUETools.Codecs.WMA
get { return this.outputPath; } get { return this.outputPath; }
} }
public virtual object Settings AudioEncoderSettings m_settings = new AudioEncoderSettings();
public virtual AudioEncoderSettings Settings
{ {
get; set; get
{
return m_settings;
}
set
{
if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value);
m_settings = value;
}
} }
public WMAWriter(string path, AudioPCMConfig pcm) public WMAWriter(string path, AudioPCMConfig pcm)
@@ -81,6 +85,10 @@ namespace CUETools.Codecs.WMA
bool codecFound = false; bool codecFound = false;
for (int iCodec = 0; iCodec < cCodecs; iCodec++) for (int iCodec = 0; iCodec < cCodecs; iCodec++)
{ {
int szCodecName = 0;
pCodecInfo3.GetCodecName(MediaType.Audio, iCodec, null, ref szCodecName);
var codecName = new StringBuilder(szCodecName);
pCodecInfo3.GetCodecName(MediaType.Audio, iCodec, codecName, ref szCodecName);
//if (codec != WMAvoice) //if (codec != WMAvoice)
try try
{ {

View File

@@ -293,10 +293,11 @@ namespace CUETools { namespace Codecs { namespace WavPack {
} }
}; };
public ref class WavPackWriterSettings public ref class WavPackWriterSettings : AudioEncoderSettings
{ {
public: public:
WavPackWriterSettings() WavPackWriterSettings()
: AudioEncoderSettings("fast normal high high+", "normal")
{ {
_md5Sum = true; _md5Sum = true;
_extraMode = 0; _extraMode = 0;
@@ -333,7 +334,7 @@ namespace CUETools { namespace Codecs { namespace WavPack {
Int32 _extraMode; Int32 _extraMode;
}; };
[AudioEncoderClass("libwavpack", "wv", true, "fast normal high high+", "normal", 1, WavPackWriterSettings::typeid)] [AudioEncoderClass("libwavpack", "wv", true, 1, WavPackWriterSettings::typeid)]
public ref class WavPackWriter : IAudioDest public ref class WavPackWriter : IAudioDest
{ {
public: public:
@@ -350,7 +351,6 @@ namespace CUETools { namespace Codecs { namespace WavPack {
_path = path; _path = path;
_compressionMode = 1;
_blockSize = 0; _blockSize = 0;
IntPtr pathChars = Marshal::StringToHGlobalUni(path); IntPtr pathChars = Marshal::StringToHGlobalUni(path);
@@ -452,33 +452,20 @@ namespace CUETools { namespace Codecs { namespace WavPack {
} }
} }
virtual property int CompressionLevel
{
int get() {
return _compressionMode;
}
void set(int value) {
if ((value < 0) || (value > 3)) {
throw gcnew Exception("Invalid compression mode.");
}
_compressionMode = value;
}
}
virtual property __int64 Padding virtual property __int64 Padding
{ {
void set(__int64 value) { void set(__int64 value) {
} }
} }
virtual property Object^ Settings virtual property AudioEncoderSettings^ Settings
{ {
Object^ get() AudioEncoderSettings^ get()
{ {
return _settings; return _settings;
} }
void set(Object^ value) void set(AudioEncoderSettings^ value)
{ {
if (value == nullptr || value->GetType() != WavPackWriterSettings::typeid) if (value == nullptr || value->GetType() != WavPackWriterSettings::typeid)
throw gcnew Exception(String::Format("Unsupported options: {0}", value)); throw gcnew Exception(String::Format("Unsupported options: {0}", value));
@@ -500,7 +487,7 @@ namespace CUETools { namespace Codecs { namespace WavPack {
bool _initialized; bool _initialized;
WavpackContext *_wpc; WavpackContext *_wpc;
Int32 _finalSampleCount, _samplesWritten; Int32 _finalSampleCount, _samplesWritten;
Int32 _compressionMode, _blockSize; Int32 _blockSize;
String^ _path; String^ _path;
MD5^ _md5hasher; MD5^ _md5hasher;
array<int,2>^ _shiftedSampleBuffer; array<int,2>^ _shiftedSampleBuffer;
@@ -521,6 +508,7 @@ namespace CUETools { namespace Codecs { namespace WavPack {
config.num_channels = _pcm->ChannelCount; config.num_channels = _pcm->ChannelCount;
config.channel_mask = 5 - _pcm->ChannelCount; config.channel_mask = 5 - _pcm->ChannelCount;
config.sample_rate = _pcm->SampleRate; config.sample_rate = _pcm->SampleRate;
Int32 _compressionMode = _settings->EncoderModeIndex;
if (_compressionMode == 0) config.flags |= CONFIG_FAST_FLAG; if (_compressionMode == 0) config.flags |= CONFIG_FAST_FLAG;
if (_compressionMode == 2) config.flags |= CONFIG_HIGH_FLAG; if (_compressionMode == 2) config.flags |= CONFIG_HIGH_FLAG;
if (_compressionMode == 3) config.flags |= CONFIG_HIGH_FLAG | CONFIG_VERY_HIGH_FLAG; if (_compressionMode == 3) config.flags |= CONFIG_HIGH_FLAG | CONFIG_VERY_HIGH_FLAG;

View File

@@ -21,7 +21,7 @@ namespace CUETools.Codecs
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public sealed class AudioEncoderClass : Attribute public sealed class AudioEncoderClass : Attribute
{ {
private string _encoderName, _extension, _supportedModes, _defaultMode; private string _encoderName, _extension;
private bool _lossless; private bool _lossless;
private int _priority; private int _priority;
private Type _settings; private Type _settings;
@@ -36,16 +36,6 @@ namespace CUETools.Codecs
get { return _extension; } get { return _extension; }
} }
public string SupportedModes
{
get { return _supportedModes; }
}
public string DefaultMode
{
get { return _defaultMode; }
}
public bool Lossless public bool Lossless
{ {
get { return _lossless; } get { return _lossless; }
@@ -61,12 +51,10 @@ namespace CUETools.Codecs
get { return _settings; } get { return _settings; }
} }
public AudioEncoderClass(string encoderName, string extension, bool lossless, string supportedModes, string defaultMode, int priority, Type settings) public AudioEncoderClass(string encoderName, string extension, bool lossless, int priority, Type settings)
{ {
_encoderName = encoderName; _encoderName = encoderName;
_extension = extension; _extension = extension;
_supportedModes = supportedModes;
_defaultMode = defaultMode;
_lossless = lossless; _lossless = lossless;
_priority = priority; _priority = priority;
_settings = settings; _settings = settings;

View File

@@ -0,0 +1,79 @@
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
namespace CUETools.Codecs
{
public class AudioEncoderSettings
{
public AudioEncoderSettings()
{
// Iterate through each property and call ResetValue()
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
property.ResetValue(this);
this.supported_modes = "";
this.EncoderMode = "";
}
public AudioEncoderSettings(string _supported_modes, string _default_mode)
{
// Iterate through each property and call ResetValue()
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
property.ResetValue(this);
this.supported_modes = _supported_modes;
this.EncoderMode = _default_mode;
}
private string supported_modes;
public virtual string GetSupportedModes()
{
return this.supported_modes;
}
[Browsable(false)]
public string EncoderMode
{
get;
set;
}
[XmlIgnore]
[Browsable(false)]
public string[] SupportedModes
{
get
{
return this.GetSupportedModes().Split(' ');
}
}
[XmlIgnore]
[Browsable(false)]
public int EncoderModeIndex
{
get
{
string[] modes = this.SupportedModes;
if (modes == null || modes.Length < 1)
return -1;
for (int i = 0; i < modes.Length; i++)
if (modes[i] == this.EncoderMode)
return i;
return -1;
}
set
{
string[] modes = this.SupportedModes;
if (modes.Length == 0 && value < 0)
return;
if (value < 0 || value >= modes.Length)
throw new InvalidOperationException();
this.EncoderMode = modes[value];
}
}
}
}

View File

@@ -64,6 +64,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="AudioBuffer.cs" /> <Compile Include="AudioBuffer.cs" />
<Compile Include="AudioDecoderClass.cs" /> <Compile Include="AudioDecoderClass.cs" />
<Compile Include="AudioEncoderSettings.cs" />
<Compile Include="AudioPCMConfig.cs" /> <Compile Include="AudioPCMConfig.cs" />
<Compile Include="AudioPipe.cs" /> <Compile Include="AudioPipe.cs" />
<Compile Include="AudioSamples.cs" /> <Compile Include="AudioSamples.cs" />

View File

@@ -24,21 +24,15 @@ namespace CUETools.Codecs
set { } set { }
} }
public int CompressionLevel public AudioEncoderSettings Settings
{
get { return 0; }
set { }
}
public object Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {
if (value != null && value.GetType() != typeof(object)) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -5,8 +5,7 @@
AudioPCMConfig PCM { get; } AudioPCMConfig PCM { get; }
string Path { get; } string Path { get; }
int CompressionLevel { get; set; } AudioEncoderSettings Settings { get; set; }
object Settings { get; set; }
long FinalSampleCount { set; } long FinalSampleCount { set; }
long BlockSize { set; } long BlockSize { set; }
long Padding { set; } long Padding { set; }

View File

@@ -33,21 +33,16 @@ namespace CUETools.Codecs
set { } set { }
} }
public int CompressionLevel // !!!! Must not start the process in constructor, so that we can set CompressionLevel via Settings!
{ public AudioEncoderSettings Settings
get { return 0; }
set { } // !!!! Must not start the process in constructor, so that we can set CompressionLevel!
}
public object Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {
if (value != null && value.GetType() != typeof(object)) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -4,7 +4,7 @@ using System.IO;
namespace CUETools.Codecs namespace CUETools.Codecs
{ {
[AudioEncoderClass("cuetools", "wav", true, "", "", 10, typeof(object))] [AudioEncoderClass("cuetools", "wav", true, 10, typeof(AudioEncoderSettings))]
public class WAVWriter : IAudioDest public class WAVWriter : IAudioDest
{ {
private Stream _IO; private Stream _IO;
@@ -36,21 +36,15 @@ namespace CUETools.Codecs
set { } set { }
} }
public int CompressionLevel public AudioEncoderSettings Settings
{
get { return 0; }
set { }
}
public object Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {
if (value != null && value.GetType() != typeof(object)) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -27,21 +27,15 @@ namespace CUETools.DSP.Mixer
set { throw new NotSupportedException(); } set { throw new NotSupportedException(); }
} }
public int CompressionLevel public AudioEncoderSettings Settings
{
get { return 0; }
set { throw new NotSupportedException(); }
}
public object Settings
{ {
get get
{ {
return null; return new AudioEncoderSettings();
} }
set set
{ {
if (value != null && value.GetType() != typeof(object)) if (value != null && value.GetType() != typeof(AudioEncoderSettings))
throw new Exception("Unsupported options " + value); throw new Exception("Unsupported options " + value);
} }
} }

View File

@@ -187,12 +187,15 @@ namespace CUETools.FLACCL.cmd
blocksize = intarg; blocksize = intarg;
else if ((args[arg] == "-p" || args[arg] == "--padding") && ++arg < args.Length && int.TryParse(args[arg], out intarg)) else if ((args[arg] == "-p" || args[arg] == "--padding") && ++arg < args.Length && int.TryParse(args[arg], out intarg))
padding = intarg; padding = intarg;
else if (args[arg] != "-" && args[arg][0] == '-' && int.TryParse(args[arg].Substring(1), out level)) else if (args[arg] != "-" && args[arg][0] == '-' && int.TryParse(args[arg].Substring(1), out level))
ok = level >= 0 && level <= 11; {
else if ((args[arg][0] != '-' || args[arg] == "-") && input_file == null) ok = level >= 0 && level <= 11;
input_file = args[arg]; settings.EncoderModeIndex = level;
else }
ok = false; else if ((args[arg][0] != '-' || args[arg] == "-") && input_file == null)
input_file = args[arg];
else
ok = false;
if (!ok) if (!ok)
break; break;
} }
@@ -258,8 +261,6 @@ namespace CUETools.FLACCL.cmd
if (device_type != null) if (device_type != null)
settings.DeviceType = (OpenCLDeviceType)(Enum.Parse(typeof(OpenCLDeviceType), device_type, true)); settings.DeviceType = (OpenCLDeviceType)(Enum.Parse(typeof(OpenCLDeviceType), device_type, true));
encoder.Settings = settings; encoder.Settings = settings;
if (level >= 0)
encoder.CompressionLevel = level;
if (stereo_method != null) if (stereo_method != null)
encoder.StereoMethod = Flake.LookupStereoMethod(stereo_method); encoder.StereoMethod = Flake.LookupStereoMethod(stereo_method);
if (window_function != null) if (window_function != null)

View File

@@ -326,11 +326,16 @@ namespace CUETools.FlakeExe
flake.FinalSampleCount = audioSource.Length - skip_a - skip_b; flake.FinalSampleCount = audioSource.Length - skip_a - skip_b;
IAudioDest audioDest = flake; IAudioDest audioDest = flake;
AudioBuffer buff = new AudioBuffer(audioSource, 0x10000); AudioBuffer buff = new AudioBuffer(audioSource, 0x10000);
var settings = new FlakeWriterSettings();
try try
{ {
if (level >= 0) if (level >= 0)
flake.CompressionLevel = level; settings.EncoderModeIndex = level;
settings.DoVerify = do_verify;
settings.DoMD5 = do_md5;
flake.Settings = settings;
if (prediction_type != null) if (prediction_type != null)
flake.PredictionType = Flake.LookupPredictionType(prediction_type); flake.PredictionType = Flake.LookupPredictionType(prediction_type);
if (stereo_method != null) if (stereo_method != null)
@@ -368,8 +373,6 @@ namespace CUETools.FlakeExe
if (magic >= 0) if (magic >= 0)
flake.DevelopmentMode = magic; flake.DevelopmentMode = magic;
flake.DoSeekTable = do_seektable; flake.DoSeekTable = do_seektable;
(flake.Settings as FlakeWriterSettings).DoVerify = do_verify;
(flake.Settings as FlakeWriterSettings).DoMD5 = do_md5;
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@@ -87,7 +87,7 @@ namespace CUETools.Processor
if (encoder == null) if (encoder == null)
throw new Exception("Unsupported audio type: " + path); throw new Exception("Unsupported audio type: " + path);
if (encoder.path != null) if (encoder.path != null)
dest = new UserDefinedWriter(path, null, pcm, encoder.path, encoder.parameters, encoder.default_mode, padding); dest = new UserDefinedWriter(path, null, pcm, encoder.path, encoder.parameters, encoder.EncoderMode, padding);
else if (encoder.type != null) else if (encoder.type != null)
{ {
object o = Activator.CreateInstance(encoder.type, path, pcm); object o = Activator.CreateInstance(encoder.type, path, pcm);
@@ -97,10 +97,9 @@ namespace CUETools.Processor
} }
else else
throw new Exception("Unsupported audio type: " + path); throw new Exception("Unsupported audio type: " + path);
dest.CompressionLevel = encoder.DefaultModeIndex; dest.Settings = encoder.settings;
dest.FinalSampleCount = finalSampleCount; dest.FinalSampleCount = finalSampleCount;
dest.Padding = padding; dest.Padding = padding;
dest.Settings = encoder.settings;
return dest; return dest;
} }

View File

@@ -325,13 +325,13 @@ return processor.Go();
foreach (CUEToolsUDC encoder in encoders) foreach (CUEToolsUDC encoder in encoders)
{ {
sw.Save(string.Format("ExternalEncoder{0}Name", nEncoders), encoder.name); sw.Save(string.Format("ExternalEncoder{0}Name", nEncoders), encoder.name);
sw.Save(string.Format("ExternalEncoder{0}Modes", nEncoders), encoder.supported_modes); sw.Save(string.Format("ExternalEncoder{0}Extension", nEncoders), encoder.extension);
sw.Save(string.Format("ExternalEncoder{0}Mode", nEncoders), encoder.default_mode); sw.Save(string.Format("ExternalEncoder{0}Lossless", nEncoders), encoder.lossless);
if (encoder.path != null) if (encoder.path != null)
{ {
sw.Save(string.Format("ExternalEncoder{0}Extension", nEncoders), encoder.extension); sw.Save(string.Format("ExternalEncoder{0}Modes", nEncoders), encoder.SupportedModesStr);
sw.Save(string.Format("ExternalEncoder{0}Mode", nEncoders), encoder.EncoderMode);
sw.Save(string.Format("ExternalEncoder{0}Path", nEncoders), encoder.path); sw.Save(string.Format("ExternalEncoder{0}Path", nEncoders), encoder.path);
sw.Save(string.Format("ExternalEncoder{0}Lossless", nEncoders), encoder.lossless);
sw.Save(string.Format("ExternalEncoder{0}Parameters", nEncoders), encoder.parameters); sw.Save(string.Format("ExternalEncoder{0}Parameters", nEncoders), encoder.parameters);
} }
else else
@@ -493,6 +493,8 @@ return processor.Go();
encoder.path = path; encoder.path = path;
encoder.lossless = lossless; encoder.lossless = lossless;
encoder.parameters = parameters; encoder.parameters = parameters;
encoder.SupportedModesStr = supported_modes;
encoder.EncoderMode = default_mode;
} }
else else
{ {
@@ -500,14 +502,12 @@ return processor.Go();
try try
{ {
using (TextReader reader = new StringReader(parameters)) using (TextReader reader = new StringReader(parameters))
encoder.settings = encoder.settingsSerializer.Deserialize(reader); encoder.settings = encoder.settingsSerializer.Deserialize(reader) as AudioEncoderSettings;
} }
catch catch
{ {
} }
} }
encoder.supported_modes = supported_modes;
encoder.default_mode = default_mode;
} }
} }

View File

@@ -12,13 +12,14 @@ namespace CUETools.Processor
public string path = ""; public string path = "";
public string parameters = ""; public string parameters = "";
public Type type = null; public Type type = null;
public object settings = null; public AudioEncoderSettings settings = null;
public XmlSerializer settingsSerializer = null; public XmlSerializer settingsSerializer = null;
public string supported_modes = "";
public string default_mode = "";
public bool lossless = false; public bool lossless = false;
public int priority = 0; public int priority = 0;
private string supported_modes = "";
private string default_mode = "";
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
public CUEToolsUDC( public CUEToolsUDC(
@@ -47,18 +48,16 @@ namespace CUETools.Processor
name = enc.EncoderName; name = enc.EncoderName;
extension = enc.Extension; extension = enc.Extension;
lossless = enc.Lossless; lossless = enc.Lossless;
supported_modes = enc.SupportedModes;
default_mode = enc.DefaultMode;
priority = enc.Priority; priority = enc.Priority;
path = null; path = null;
parameters = ""; parameters = "";
type = enctype; type = enctype;
settingsSerializer = null; settingsSerializer = null;
settings = null; settings = null;
if (enc.Settings != null && enc.Settings != typeof(object)) if (enc.Settings != null && typeof(AudioEncoderSettings).IsAssignableFrom(enc.Settings))
{ {
settingsSerializer = new XmlSerializer(enc.Settings); settingsSerializer = new XmlSerializer(enc.Settings);
settings = Activator.CreateInstance(enc.Settings); settings = Activator.CreateInstance(enc.Settings) as AudioEncoderSettings;
} }
} }
@@ -67,8 +66,6 @@ namespace CUETools.Processor
name = dec.DecoderName; name = dec.DecoderName;
extension = dec.Extension; extension = dec.Extension;
lossless = true; lossless = true;
supported_modes = "";
default_mode = "";
priority = dec.Priority; priority = dec.Priority;
path = null; path = null;
parameters = null; parameters = null;
@@ -105,26 +102,50 @@ namespace CUETools.Processor
get { return lossless; } get { return lossless; }
set { lossless = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Lossless")); } set { lossless = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Lossless")); }
} }
public string Extension public string Extension
{ {
get { return extension; } get { return extension; }
set { extension = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Extension")); } set { extension = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Extension")); }
} }
public string DotExtension public string DotExtension
{ {
get { return "." + extension; } get { return "." + extension; }
} }
public string SupportedModesStr public string SupportedModesStr
{ {
get { return supported_modes; } get
set { supported_modes = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("SupportedModesStr")); } {
return this.settings == null ? this.supported_modes : this.settings.GetSupportedModes();
}
set
{
if (this.settings != null) throw new NotSupportedException();
supported_modes = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("SupportedModesStr"));
}
}
public string EncoderMode
{
get
{
if (this.settings != null) return this.settings.EncoderMode;
else return this.default_mode;
}
set
{
if (this.settings != null) this.settings.EncoderMode = value;
else this.default_mode = value;
}
} }
public string[] SupportedModes public string[] SupportedModes
{ {
get get
{ {
return supported_modes.Split(' '); return this.SupportedModesStr.Split(' ');
} }
} }
@@ -132,11 +153,11 @@ namespace CUETools.Processor
{ {
get get
{ {
string[] modes = supported_modes.Split(' '); string[] modes = this.SupportedModes;
if (modes == null || modes.Length < 2) if (modes == null || modes.Length < 2)
return -1; return -1;
for (int i = 0; i < modes.Length; i++) for (int i = 0; i < modes.Length; i++)
if (modes[i] == default_mode) if (modes[i] == this.EncoderMode)
return i; return i;
return -1; return -1;
} }

View File

@@ -2464,7 +2464,7 @@ namespace JDP
{ {
trackBarEncoderMode.Maximum = modes.Length - 1; trackBarEncoderMode.Maximum = modes.Length - 1;
trackBarEncoderMode.Value = encoder.DefaultModeIndex == -1 ? modes.Length - 1 : encoder.DefaultModeIndex; trackBarEncoderMode.Value = encoder.DefaultModeIndex == -1 ? modes.Length - 1 : encoder.DefaultModeIndex;
labelEncoderMode.Text = encoder.default_mode; labelEncoderMode.Text = encoder.EncoderMode;
labelEncoderMinMode.Text = modes[0]; labelEncoderMinMode.Text = modes[0];
labelEncoderMaxMode.Text = modes[modes.Length - 1]; labelEncoderMaxMode.Text = modes[modes.Length - 1];
trackBarEncoderMode.Visible = true; trackBarEncoderMode.Visible = true;
@@ -2478,8 +2478,8 @@ namespace JDP
{ {
CUEToolsUDC encoder = comboBoxEncoder.SelectedItem as CUEToolsUDC; CUEToolsUDC encoder = comboBoxEncoder.SelectedItem as CUEToolsUDC;
string[] modes = encoder.SupportedModes; string[] modes = encoder.SupportedModes;
encoder.default_mode = modes[trackBarEncoderMode.Value]; encoder.EncoderMode = modes[trackBarEncoderMode.Value];
labelEncoderMode.Text = encoder.default_mode; labelEncoderMode.Text = encoder.EncoderMode;
} }
//private void toolStripButton1_Click(object sender, EventArgs e) //private void toolStripButton1_Click(object sender, EventArgs e)