FLACCL, Flake & Converter: support for --ignore-chunk-sizes

This commit is contained in:
Grigory Chudov
2013-07-07 21:10:57 -04:00
parent 7ecef3984d
commit 132bd9a6f7
4 changed files with 35 additions and 15 deletions

View File

@@ -74,6 +74,11 @@ namespace CUETools.Codecs
public string Path { get { return _path; } }
public WAVReader(string path, Stream IO)
: this(path, IO, false)
{
}
public WAVReader(string path, Stream IO, bool ignore_chunk_sizes)
{
_path = path;
_IO = IO != null ? IO : new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 0x10000, FileOptions.SequentialScan);
@@ -81,7 +86,7 @@ namespace CUETools.Codecs
ParseHeaders();
if (_dataLen < 0)
if (_dataLen < 0 || ignore_chunk_sizes)
_sampleLen = -1;
else
_sampleLen = _dataLen / pcm.BlockAlign;

View File

@@ -19,6 +19,7 @@ namespace CUETools.Converter
Console.Error.WriteLine(" --encoder-format <ext> Use encoder format different from file extension.");
Console.Error.WriteLine(" --lossy Use lossy encoder/mode.");
Console.Error.WriteLine(" --lossless Use lossless encoder/mode (default).");
Console.Error.WriteLine(" --ignore-chunk-sizes Ignore WAV length (for pipe input)");
Console.Error.WriteLine(" -p # Padding bytes.");
Console.Error.WriteLine(" -m <mode> Encoder mode (0..8 for flac, V0..V9 for mp3, etc)");
Console.Error.WriteLine();
@@ -32,10 +33,10 @@ namespace CUETools.Converter
(lossless ? fmt.encoderLossless : fmt.encoderLossy);
}
public static IAudioSource GetAudioSource(CUEToolsCodecsConfig config, string path, string chosenDecoder)
public static IAudioSource GetAudioSource(CUEToolsCodecsConfig config, string path, string chosenDecoder, bool ignore_chunk_sizes)
{
if (path == "-")
return new WAVReader("", Console.OpenStandardInput());
return new WAVReader("", Console.OpenStandardInput(), ignore_chunk_sizes);
string extension = Path.GetExtension(path).ToLower();
Stream IO = null;
if (extension == ".bin")
@@ -78,11 +79,15 @@ namespace CUETools.Converter
string decoderName = null;
string encoderName = null;
string encoderFormat = null;
bool ignore_chunk_sizes = false;
AudioEncoderType audioEncoderType = AudioEncoderType.NoAudio;
for (int arg = 0; arg < args.Length; arg++)
{
if (args[arg].Length == 0)
ok = false;
else if (args[arg] == "--ignore-chunk-sizes")
ignore_chunk_sizes = true;
else if (args[arg] == "--decoder" && ++arg < args.Length)
decoderName = args[arg];
else if (args[arg] == "--encoder" && ++arg < args.Length)
@@ -137,7 +142,7 @@ namespace CUETools.Converter
try
{
audioSource = Program.GetAudioSource(config, sourceFile, decoderName);
audioSource = Program.GetAudioSource(config, sourceFile, decoderName, ignore_chunk_sizes);
AudioBuffer buff = new AudioBuffer(audioSource, 0x10000);
Console.Error.WriteLine("Filename : {0}", sourceFile);
Console.Error.WriteLine("File Info : {0}kHz; {1} channel; {2} bit; {3}", audioSource.PCM.SampleRate, audioSource.PCM.ChannelCount, audioSource.PCM.BitsPerSample, TimeSpan.FromSeconds(audioSource.Length * 1.0 / audioSource.PCM.SampleRate));

View File

@@ -43,7 +43,8 @@ namespace CUETools.FLACCL.cmd
Console.WriteLine(" --verify Verify during encoding");
Console.WriteLine(" --no-md5 Don't compute MD5 hash");
Console.WriteLine(" --no-seektable Don't generate a seektable");
Console.WriteLine(" --cpu-threads Use additional CPU threads");
Console.WriteLine(" --ignore-chunk-sizes Ignore WAV length (for pipe input)");
Console.WriteLine(" --cpu-threads Use additional CPU threads");
Console.WriteLine();
Console.WriteLine("OpenCL Options:");
Console.WriteLine();
@@ -94,6 +95,7 @@ namespace CUETools.FLACCL.cmd
bool buffered = false;
bool ok = true;
bool allowNonSubset = false;
bool ignore_chunk_sizes = false;
int intarg;
for (int arg = 0; arg < args.Length; arg++)
@@ -106,9 +108,11 @@ namespace CUETools.FLACCL.cmd
quiet = true;
else if (args[arg] == "--verify")
settings.DoVerify = true;
else if (args[arg] == "--no-seektable")
else if (args[arg] == "--no-seektable")
do_seektable = false;
else if (args[arg] == "--slow-gpu")
else if (args[arg] == "--ignore-chunk-sizes")
ignore_chunk_sizes = true;
else if (args[arg] == "--slow-gpu")
settings.GPUOnly = false;
else if (args[arg] == "--fast-gpu")
settings.DoRice = true;
@@ -238,7 +242,7 @@ namespace CUETools.FLACCL.cmd
try
{
if (input_file == "-")
audioSource = new WAVReader("", Console.OpenStandardInput());
audioSource = new WAVReader("", Console.OpenStandardInput(), ignore_chunk_sizes);
else if (input_file == "nul")
audioSource = new SilenceGenerator(new AudioPCMConfig(input_bps, input_ch, input_rate), input_len, input_val);
else if (File.Exists(input_file) && Path.GetExtension(input_file) == ".wav")
@@ -337,11 +341,12 @@ namespace CUETools.FLACCL.cmd
{
if ((elapsed - lastPrint).TotalMilliseconds > 60)
{
Console.Error.Write("\rProgress : {0:00}%; {1:0.00}x; {2}/{3}",
100.0 * audioSource.Position / audioSource.Length,
long length = Math.Max(audioSource.Position, audioSource.Length);
Console.Error.Write("\rProgress : {0:00}%; {1:0.00}x; {2}/{3}",
100.0 * audioSource.Position / length,
audioSource.Position / elapsed.TotalSeconds / audioSource.PCM.SampleRate,
elapsed,
TimeSpan.FromMilliseconds(elapsed.TotalMilliseconds / audioSource.Position * audioSource.Length)
TimeSpan.FromMilliseconds(elapsed.TotalMilliseconds / audioSource.Position * length)
);
lastPrint = elapsed;
}

View File

@@ -100,6 +100,7 @@ namespace CUETools.FlakeExe
Console.WriteLine(" --verify Verify during encoding.");
Console.WriteLine(" --no-md5 Don't compute MD5 hash.");
Console.WriteLine(" --no-seektable Don't generate a seektable.");
Console.WriteLine(" --ignore-chunk-sizes Ignore WAV length (for pipe input)");
Console.WriteLine();
Console.WriteLine("Advanced Options:");
Console.WriteLine();
@@ -147,6 +148,7 @@ namespace CUETools.FlakeExe
string coeffs = null;
var settings = new FlakeWriterSettings() { AllowNonSubset = true };
bool allowNonSubset = false;
bool ignore_chunk_sizes = false;
#if FINETUNE
int finetune_depth = -1;
#endif
@@ -164,6 +166,8 @@ namespace CUETools.FlakeExe
settings.DoVerify = true;
else if (args[arg] == "--no-seektable")
do_seektable = false;
else if (args[arg] == "--ignore-chunk-sizes")
ignore_chunk_sizes = true;
else if (args[arg] == "--no-md5")
settings.DoMD5 = false;
else if (args[arg] == "--lax")
@@ -321,7 +325,7 @@ namespace CUETools.FlakeExe
IAudioSource audioSource;
if (input_file == "-")
audioSource = new WAVReader("", Console.OpenStandardInput());
audioSource = new WAVReader("", Console.OpenStandardInput(), ignore_chunk_sizes);
else if (File.Exists(input_file) && Path.GetExtension(input_file) == ".wav")
audioSource = new WAVReader(input_file, null);
else if (File.Exists(input_file) && Path.GetExtension(input_file) == ".flac")
@@ -346,7 +350,7 @@ namespace CUETools.FlakeExe
output_file == "-" ? Console.OpenStandardOutput() :
output_file == "nul" ? new NullStream() : null,
settings);
flake.FinalSampleCount = audioSource.Length - skip_a - skip_b;
flake.FinalSampleCount = audioSource.Length < 0 ? -1 : audioSource.Length - skip_a - skip_b;
if (prediction_type != null)
flake.PredictionType = Flake.LookupPredictionType(prediction_type);
@@ -412,11 +416,12 @@ namespace CUETools.FlakeExe
{
if ((elapsed - lastPrint).TotalMilliseconds > 60)
{
long length = Math.Max(audioSource.Position, audioSource.Length);
Console.Error.Write("\rProgress : {0:00}%; {1:0.00}x; {2}/{3}",
100.0 * audioSource.Position / audioSource.Length,
100.0 * audioSource.Position / length,
audioSource.Position / elapsed.TotalSeconds / audioSource.PCM.SampleRate,
elapsed,//.ToString(@"[-][d<>.<2E>]hh<68>:<3A>mm<6D>:<3A>ss[<5B>.<2E>ff]"),
TimeSpan.FromMilliseconds(elapsed.TotalMilliseconds / audioSource.Position * audioSource.Length)
TimeSpan.FromMilliseconds(elapsed.TotalMilliseconds / audioSource.Position * length)
);
lastPrint = elapsed;
}