diff --git a/CUEPlayer/Properties/DataSources/CUETools.Codecs.Icecast.IcecastSettingsData.datasource b/CUEPlayer/Properties/DataSources/CUETools.Codecs.Icecast.IcecastSettingsData.datasource
new file mode 100644
index 0000000..299f405
--- /dev/null
+++ b/CUEPlayer/Properties/DataSources/CUETools.Codecs.Icecast.IcecastSettingsData.datasource
@@ -0,0 +1,10 @@
+
+
+
+ CUETools.Codecs.Icecast.IcecastSettingsData, CUETools.Codecs.Icecast, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/CUEPlayer/Properties/DataSources/Output.datasource b/CUEPlayer/Properties/DataSources/Output.datasource
new file mode 100644
index 0000000..830008e
--- /dev/null
+++ b/CUEPlayer/Properties/DataSources/Output.datasource
@@ -0,0 +1,10 @@
+
+
+
+ CUEPlayer.Output, CUEPlayer, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/CUETools.ALACEnc/Program.cs b/CUETools.ALACEnc/Program.cs
index d30913d..165a80e 100644
--- a/CUETools.ALACEnc/Program.cs
+++ b/CUETools.ALACEnc/Program.cs
@@ -24,7 +24,8 @@ namespace CUETools.ALACEnc
Console.WriteLine();
Console.WriteLine("Advanced Options:");
Console.WriteLine();
- Console.WriteLine(" -b # Block size.");
+ Console.WriteLine(" -b # Block size (samples).");
+ Console.WriteLine(" -p # Padding (bytes).");
Console.WriteLine(" -s Stereo decorrelation (independent,estimate,evaluate,search).");
Console.WriteLine(" --history-modifier # Rice history modifier {max} or {min},{max}, default 4,4.");
Console.WriteLine();
@@ -169,7 +170,7 @@ namespace CUETools.ALACEnc
output_file == "-" ? Console.OpenStandardOutput() :
output_file == "nul" ? new NullStream() : null,
audioSource.PCM);
- alac.FinalSampleCount = (long)audioSource.Length;
+ alac.FinalSampleCount = audioSource.Length;
IAudioDest audioDest = alac;
AudioBuffer buff = new AudioBuffer(audioSource, 0x10000);
diff --git a/CUETools.Codecs.ALAC/ALACDotNet.cs b/CUETools.Codecs.ALAC/ALACDotNet.cs
index a17190d..5a26569 100644
--- a/CUETools.Codecs.ALAC/ALACDotNet.cs
+++ b/CUETools.Codecs.ALAC/ALACDotNet.cs
@@ -604,8 +604,8 @@ namespace CUETools.Codecs.ALAC
buf_s[i * 2 + 1] = midright;
#if DEBUG
- if (buf_s[i * 2] >= (1 << _bitsPerSample) || buf_s[i * 2] < -(1 << _bitsPerSample) ||
- buf_s[i * 2 + 1] >= (1 << _bitsPerSample) || buf_s[i * 2 + 1] < -(1 << _bitsPerSample)
+ if (buf_s[i * 2] >= (1 << pcm.BitsPerSample) || buf_s[i * 2] < -(1 << pcm.BitsPerSample) ||
+ buf_s[i * 2 + 1] >= (1 << pcm.BitsPerSample) || buf_s[i * 2 + 1] < -(1 << pcm.BitsPerSample)
)
throw new Exception("overflow in ALAC decoder");
#endif
@@ -641,7 +641,7 @@ namespace CUETools.Codecs.ALAC
bool isnotcompressed = 0 != readbits(_framesBuffer, ref pos, 1); /* whether the frame is compressed */
int outputSamples = hassize ? (int)readbits(_framesBuffer, ref pos, 32) : setinfo_max_samples_per_frame;
- int readsamplesize = pcm.BitsPerSample - (wasted_bytes * 8) + pcm.ChannelCount;
+ int readsamplesize = pcm.BitsPerSample - (wasted_bytes * 8) + pcm.ChannelCount - 1;
if (!isnotcompressed)
{
/* compressed */
diff --git a/CUETools.Codecs.ALAC/ALACWriter.cs b/CUETools.Codecs.ALAC/ALACWriter.cs
index 1d57c21..5db38fd 100644
--- a/CUETools.Codecs.ALAC/ALACWriter.cs
+++ b/CUETools.Codecs.ALAC/ALACWriter.cs
@@ -36,9 +36,12 @@ namespace CUETools.Codecs.ALAC
public class ALACWriter : IAudioDest
{
Stream _IO = null;
+ bool _pathGiven = false;
string _path;
long _position;
+ const int max_header_len = 709 + 38; // minimum 38 bytes in padding
+
// total stream samples
// if < 0, stream length is unknown
int sample_count = -1;
@@ -55,15 +58,12 @@ namespace CUETools.Codecs.ALAC
int frame_count = 0;
- long first_frame_offset = 0;
+ int first_frame_offset = 0;
#if INTEROP
TimeSpan _userProcessorTime;
#endif
- // header bytes
- byte[] header;
-
uint[] _sample_byte_size;
int[] samplesBuffer;
int[] verifyBuffer;
@@ -81,8 +81,6 @@ namespace CUETools.Codecs.ALAC
ALACFrame frame;
ALACReader verify;
- int mdat_pos;
-
bool inited = false;
List chunk_pos;
@@ -100,13 +98,16 @@ namespace CUETools.Codecs.ALAC
_path = path;
_IO = IO;
+ _pathGiven = _IO == null;
+ if (_IO != null && !_IO.CanSeek)
+ throw new NotSupportedException("stream doesn't support seeking");
samplesBuffer = new int[Alac.MAX_BLOCKSIZE * (_pcm.ChannelCount == 2 ? 5 : _pcm.ChannelCount)];
residualBuffer = new int[Alac.MAX_BLOCKSIZE * (_pcm.ChannelCount == 2 ? 6 : _pcm.ChannelCount + 1)];
windowBuffer = new float[Alac.MAX_BLOCKSIZE * 2 * Alac.MAX_LPC_WINDOWS];
eparams.set_defaults(_compressionLevel);
- eparams.padding_size = 8192;
+ eparams.padding_size = 4096;
crc8 = new Crc8();
crc16 = new Crc16();
@@ -209,23 +210,57 @@ namespace CUETools.Codecs.ALAC
while (samplesInBuffer > 0)
output_frame(samplesInBuffer);
- if (_IO.CanSeek)
+ int mdat_len = (int)_IO.Position - first_frame_offset;
+ int header_len = first_frame_offset;
+
+ if (sample_count <= 0 && _position != 0)
{
- int mdat_len = (int)_IO.Position - mdat_pos;
- _IO.Position = mdat_pos;
- BitWriter bitwriter = new BitWriter(header, 0, 4);
- bitwriter.writebits(32, mdat_len);
- bitwriter.flush();
- _IO.Write(header, 0, 4);
-
- if (sample_count <= 0 && _position != 0)
- sample_count = (int)_position;
-
- _IO.Position = _IO.Length;
- int trailer_len = write_trailers();
- _IO.Write(header, 0, trailer_len);
+ sample_count = (int)_position;
+ header_len = max_header_len
+ + eparams.padding_size
+ + frame_count * 4 // stsz
+ + frame_count * 4 / eparams.chunk_size; // stco
+ //if (header_len % 0x400 != 0)
+ // header_len += 0x400 - (header_len % 0x400);
+ }
+
+ if (!_creationTime.HasValue)
+ _creationTime = DateTime.Now;
+
+ if (header_len > first_frame_offset)
+ {
+ // if frame_count is high, need to rewrite
+ // the whole file to increase first_frame_offset
+
+ //System.Diagnostics.Trace.WriteLine(String.Format("Rewriting whole file: {0}/{1} + {2}", header_len, first_frame_offset, mdat_len));
+
+ // assert(_pathGiven);
+ string tmpPath = _path + ".tmp"; // TODO: make sure tmpPath is unique?
+ FileStream IO2 = new FileStream(tmpPath, FileMode.Create, FileAccess.ReadWrite, FileShare.Read);
+ byte[] header = write_headers(header_len, mdat_len);
+ IO2.Write(header, 0, header_len);
+ _IO.Position = first_frame_offset;
+ int bufSize = Math.Min(mdat_len, 0x2000);
+ byte[] buffer = new byte[bufSize];
+ int n;
+ do
+ {
+ n = _IO.Read(buffer, 0, buffer.Length);
+ IO2.Write(buffer, 0, n);
+ } while (n != 0);
+ IO2.Close();
+ _IO.Close();
+ File.Delete(_path);
+ File.Move(tmpPath, _path);
+ }
+ else
+ {
+ //System.Diagnostics.Trace.WriteLine(String.Format("{0}/{1}", header_len, first_frame_offset));
+ byte[] header = write_headers(first_frame_offset, mdat_len);
+ _IO.Position = 0;
+ _IO.Write(header, 0, first_frame_offset);
+ _IO.Close();
}
- _IO.Close();
inited = false;
}
@@ -1143,12 +1178,13 @@ namespace CUETools.Codecs.ALAC
{
if (!inited)
{
+ if (!_pathGiven && sample_count <= 0)
+ throw new NotSupportedException("input and output are both pipes");
if (_IO == null)
- _IO = new FileStream(_path, FileMode.Create, FileAccess.Write, FileShare.Read);
- int header_size = encode_init();
- _IO.Write(header, 0, header_size);
- if (_IO.CanSeek)
- first_frame_offset = _IO.Position;
+ _IO = new FileStream(_path, FileMode.Create, FileAccess.ReadWrite, FileShare.Read);
+ if (_IO != null && !_IO.CanSeek)
+ throw new NotSupportedException("stream doesn't support seeking");
+ encode_init();
inited = true;
}
@@ -1205,15 +1241,15 @@ namespace CUETools.Codecs.ALAC
return blocksize >> 1;
}
- void write_chunk_mvhd(BitWriter bitwriter, TimeSpan UnixTime)
+ void write_chunk_mvhd(BitWriter bitwriter)
{
chunk_start(bitwriter);
{
bitwriter.write('m', 'v', 'h', 'd');
bitwriter.writebits(32, 0);
- bitwriter.writebits(32, (int)UnixTime.TotalSeconds);
- bitwriter.writebits(32, (int)UnixTime.TotalSeconds);
- bitwriter.writebits(32, 1000);
+ bitwriter.writebits(_creationTime.Value);
+ bitwriter.writebits(_creationTime.Value);
+ bitwriter.writebits(32, _pcm.SampleRate);
bitwriter.writebits(32, sample_count);
bitwriter.writebits(32, 0x00010000); // reserved (preferred rate) 1.0 = normal
bitwriter.writebits(16, 0x0100); // reserved (preferred volume) 1.0 = normal
@@ -1238,7 +1274,7 @@ namespace CUETools.Codecs.ALAC
chunk_end(bitwriter);
}
- void write_chunk_minf(BitWriter bitwriter)
+ void write_chunk_minf(BitWriter bitwriter, int header_len)
{
chunk_start(bitwriter);
{
@@ -1294,6 +1330,13 @@ namespace CUETools.Codecs.ALAC
bitwriter.writebits(16, 0); // reserved
chunk_start(bitwriter);
{
+ int max_fs = 0;
+ long sum_fs = 0;
+ for (int i = 0; i < frame_count; i++)
+ {
+ max_fs = Math.Max(max_fs, (int)_sample_byte_size[i]);
+ sum_fs += (int)_sample_byte_size[i];
+ }
bitwriter.write('a', 'l', 'a', 'c');
bitwriter.writebits(32, 0); // reserved
bitwriter.writebits(32, eparams.block_size); // max frame size
@@ -1303,9 +1346,9 @@ namespace CUETools.Codecs.ALAC
bitwriter.writebits(8, initial_history);
bitwriter.writebits(8, k_modifier);
bitwriter.writebits(8, _pcm.ChannelCount); // channels
- bitwriter.writebits(16, 0); // reserved
- bitwriter.writebits(32, max_frame_size);
- bitwriter.writebits(32, _pcm.SampleRate * _pcm.ChannelCount * _pcm.BitsPerSample); // average bitrate
+ bitwriter.writebits(16, 0); // reserved or 0x00 0xff????
+ bitwriter.writebits(32, max_fs);
+ bitwriter.writebits(32, (int)(8 * sum_fs * _pcm.SampleRate / sample_count)); // average bitrate
bitwriter.writebits(32, _pcm.SampleRate);
}
chunk_end(bitwriter);
@@ -1337,15 +1380,28 @@ namespace CUETools.Codecs.ALAC
{
bitwriter.write('s', 't', 's', 'c');
bitwriter.writebits(32, 0); // version & flags
- bitwriter.writebits(32, 1); // entry count
- bitwriter.writebits(32, 1); // first chunk
- bitwriter.writebits(32, 1); // samples in chunk
- bitwriter.writebits(32, 1); // sample description index
+ if (frame_count % eparams.chunk_size == 0)
+ {
+ bitwriter.writebits(32, 1); // entries
+ bitwriter.writebits(32, 1); // first chunk
+ bitwriter.writebits(32, eparams.chunk_size); // samples in chunk
+ bitwriter.writebits(32, 1); // sample description index
+ }
+ else
+ {
+ bitwriter.writebits(32, 2); // entries
+ bitwriter.writebits(32, 1); // first chunk
+ bitwriter.writebits(32, eparams.chunk_size); // samples in chunk
+ bitwriter.writebits(32, 1); // sample description index
+ bitwriter.writebits(32, 1 + frame_count / eparams.chunk_size); // first chunk
+ bitwriter.writebits(32, frame_count % eparams.chunk_size); // samples in chunk
+ bitwriter.writebits(32, 1); // sample description index
+ }
}
chunk_end(bitwriter);
chunk_start(bitwriter);
{
- bitwriter.write('s', 't', 's', 'z');
+ bitwriter.write('s', 't', 's', 'z'); // stsz
bitwriter.writebits(32, 0); // version & flags
bitwriter.writebits(32, 0); // sample size (0 == variable)
bitwriter.writebits(32, frame_count); // entry count
@@ -1355,14 +1411,14 @@ namespace CUETools.Codecs.ALAC
chunk_end(bitwriter);
chunk_start(bitwriter);
{
- bitwriter.write('s', 't', 'c', 'o');
+ bitwriter.write('s', 't', 'c', 'o'); // stco
bitwriter.writebits(32, 0); // version & flags
- bitwriter.writebits(32, frame_count); // entry count
- uint pos = (uint)mdat_pos + 8;
+ bitwriter.writebits(32, (frame_count + eparams.chunk_size - 1) / eparams.chunk_size); // entry count
+ int pos = header_len;
for (int i = 0; i < frame_count; i++)
{
- bitwriter.writebits(32, pos);
- pos += _sample_byte_size[i];
+ if (i % eparams.chunk_size == 0) bitwriter.writebits(32, pos);
+ pos += (int)_sample_byte_size[i];
}
}
chunk_end(bitwriter);
@@ -1372,7 +1428,7 @@ namespace CUETools.Codecs.ALAC
chunk_end(bitwriter);
}
- void write_chunk_mdia(BitWriter bitwriter, TimeSpan UnixTime)
+ void write_chunk_mdia(BitWriter bitwriter, int header_len)
{
chunk_start(bitwriter);
{
@@ -1381,8 +1437,8 @@ namespace CUETools.Codecs.ALAC
{
bitwriter.write('m', 'd', 'h', 'd');
bitwriter.writebits(32, 0); // version & flags
- bitwriter.writebits(32, (int)UnixTime.TotalSeconds);
- bitwriter.writebits(32, (int)UnixTime.TotalSeconds);
+ bitwriter.writebits(_creationTime.Value);
+ bitwriter.writebits(_creationTime.Value);
bitwriter.writebits(32, _pcm.SampleRate);
bitwriter.writebits(32, sample_count);
bitwriter.writebits(16, 0x55c4); // language
@@ -1398,16 +1454,16 @@ namespace CUETools.Codecs.ALAC
bitwriter.writebits(32, 0); // reserved
bitwriter.writebits(32, 0); // reserved
bitwriter.writebits(32, 0); // reserved
- bitwriter.writebits(8, "SoundHandler".Length);
- bitwriter.write("SoundHandler");
+ bitwriter.writebits(8, 0); //bitwriter.writebits(8, "SoundHandler".Length);
+ bitwriter.writebits(8, 0); //bitwriter.write("SoundHandler");
}
chunk_end(bitwriter);
- write_chunk_minf(bitwriter);
+ write_chunk_minf(bitwriter, header_len);
}
chunk_end(bitwriter);
}
- void write_chunk_trak(BitWriter bitwriter, TimeSpan UnixTime)
+ void write_chunk_trak(BitWriter bitwriter, int header_len)
{
chunk_start(bitwriter);
{
@@ -1415,12 +1471,12 @@ namespace CUETools.Codecs.ALAC
chunk_start(bitwriter);
{
bitwriter.write('t', 'k', 'h', 'd');
- bitwriter.writebits(32, 15); // version
- bitwriter.writebits(32, (int)UnixTime.TotalSeconds);
- bitwriter.writebits(32, (int)UnixTime.TotalSeconds);
+ bitwriter.writebits(32, 7); // version
+ bitwriter.writebits(_creationTime.Value);
+ bitwriter.writebits(_creationTime.Value);
bitwriter.writebits(32, 1); // track ID
bitwriter.writebits(32, 0); // reserved
- bitwriter.writebits(32, sample_count / _pcm.SampleRate);
+ bitwriter.writebits(32, sample_count);
bitwriter.writebits(32, 0); // reserved
bitwriter.writebits(32, 0); // reserved
bitwriter.writebits(32, 0); // reserved (layer & alternate group)
@@ -1439,7 +1495,7 @@ namespace CUETools.Codecs.ALAC
bitwriter.writebits(32, 0); // reserved (height)
}
chunk_end(bitwriter);
- write_chunk_mdia(bitwriter, UnixTime);
+ write_chunk_mdia(bitwriter, header_len);
}
chunk_end(bitwriter);
}
@@ -1483,72 +1539,64 @@ namespace CUETools.Codecs.ALAC
chunk_end(bitwriter);
}
chunk_end(bitwriter);
+
+ chunk_start(bitwriter); // padding
+ {
+ bitwriter.write('f', 'r', 'e', 'e');
+ bitwriter.writebytes(eparams.padding_size, 0);
+ }
+ chunk_end(bitwriter);
}
chunk_end(bitwriter);
}
chunk_end(bitwriter);
}
- int write_trailers()
+ byte[] write_headers(int header_len, int mdat_len)
{
- TimeSpan UnixTime = (_creationTime ?? DateTime.Now) - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
- header = new byte[0x1000 + frame_count * 8 + eparams.padding_size]; // FIXME!!! Possible buffer overrun
+ byte[] header = new byte[header_len];
BitWriter bitwriter = new BitWriter(header, 0, header.Length);
+
+ chunk_start(bitwriter);
+ {
+ bitwriter.write('f', 't', 'y', 'p');
+ bitwriter.write('M', '4', 'A', ' ');
+ bitwriter.writebits(32, 0x200); // minor version
+ bitwriter.write('M', '4', 'A', ' ');
+ bitwriter.write('m', 'p', '4', '2');
+ bitwriter.write('i', 's', 'o', 'm');
+ bitwriter.writebits(32, 0);
+ }
+ chunk_end(bitwriter);
+
chunk_start(bitwriter);
{
bitwriter.write('m', 'o', 'o', 'v');
- write_chunk_mvhd(bitwriter, UnixTime);
- write_chunk_trak(bitwriter, UnixTime);
+ write_chunk_mvhd(bitwriter);
+ write_chunk_trak(bitwriter, header_len);
write_chunk_udta(bitwriter);
}
chunk_end(bitwriter);
- chunk_start(bitwriter); // padding
- {
- bitwriter.write('f', 'r', 'e', 'e');
- bitwriter.writebytes(eparams.padding_size, 0);
- }
- chunk_end(bitwriter);
- return bitwriter.Length;
- }
-
- int write_headers()
- {
- BitWriter bitwriter = new BitWriter(header, 0, header.Length);
-
- chunk_start(bitwriter);
- bitwriter.write('f', 't', 'y', 'p');
- bitwriter.write('M', '4', 'A', ' ');
- bitwriter.writebits(32, 0x200); // minor version
- bitwriter.write('M', '4', 'A', ' ');
- bitwriter.write('m', 'p', '4', '2');
- bitwriter.write('i', 's', 'o', 'm');
- bitwriter.writebits(32, 0);
- chunk_end(bitwriter);
chunk_start(bitwriter); // padding
{
bitwriter.write('f', 'r', 'e', 'e');
- bitwriter.writebytes(eparams.padding_size, 0);
+ int padding_len = header_len - bitwriter.Length - 8;
+ if (padding_len < 0)
+ throw new Exception("padding length too small");
+ bitwriter.writebytes(padding_len, 0);
}
chunk_end(bitwriter);
- chunk_start(bitwriter); // padding in case we need extended mdat len
- bitwriter.write('f', 'r', 'e', 'e');
- chunk_end(bitwriter);
-
- mdat_pos = bitwriter.Length;
-
- chunk_start(bitwriter); // mdat len placeholder
+ bitwriter.writebits(32, mdat_len + 8);
bitwriter.write('m', 'd', 'a', 't');
- chunk_end(bitwriter);
+ bitwriter.flush();
- return bitwriter.Length;
+ return header;
}
- int encode_init()
+ void encode_init()
{
- int i, header_len;
-
//if(flake_validate_params(s) < 0)
// FIXME: For now, only 44100 samplerate is supported
@@ -1574,14 +1622,6 @@ namespace CUETools.Codecs.ALAC
else
max_frame_size = 16 + ((eparams.block_size * _pcm.ChannelCount * _pcm.BitsPerSample + 7) >> 3);
- //if (_IO.CanSeek && eparams.do_seektable)
- //{
- //}
-
- // output header bytes
- header = new byte[eparams.padding_size + 0x1000];
- header_len = write_headers();
-
frame_buffer = new byte[max_frame_size];
_sample_byte_size = new uint[Math.Max(0x100, sample_count / eparams.block_size + 1)];
@@ -1591,7 +1631,15 @@ namespace CUETools.Codecs.ALAC
verifyBuffer = new int[Alac.MAX_BLOCKSIZE * _pcm.ChannelCount];
}
- return header_len;
+ int frames = sample_count / eparams.block_size;
+ int header_len = max_header_len
+ + eparams.padding_size
+ + frames * 4 // stsz
+ + frames * 4 / eparams.chunk_size; // stco
+ //if (header_len % 0x400 != 0)
+ // header_len += 0x400 - (header_len % 0x400);
+ first_frame_offset = header_len;
+ _IO.Write(new byte[first_frame_offset], 0, first_frame_offset);
}
}
@@ -1636,6 +1684,8 @@ namespace CUETools.Codecs.ALAC
// can also be changed by user before encoding a frame
public int block_size;
+ public int chunk_size;
+
// block time in milliseconds
// set by the user prior to calling encode_init
// used to calculate block_size based on sample rate
@@ -1698,6 +1748,7 @@ namespace CUETools.Codecs.ALAC
adaptive_passes = 0;
do_verify = false;
do_seektable = false;
+ chunk_size = 5;
// differences from level 6
switch (lvl)
diff --git a/CUETools.Codecs.ALAC/CUETools.Codecs.ALAC.csproj b/CUETools.Codecs.ALAC/CUETools.Codecs.ALAC.csproj
index 4b7a8a5..9da9547 100644
--- a/CUETools.Codecs.ALAC/CUETools.Codecs.ALAC.csproj
+++ b/CUETools.Codecs.ALAC/CUETools.Codecs.ALAC.csproj
@@ -2,7 +2,7 @@
Debug
AnyCPU
- 8.0.50727
+ 9.0.30729
2.0
{F2EC7193-D5E5-4252-9803-5CEB407E910F}
Library
@@ -19,7 +19,7 @@
true
full
false
- bin\Debug\
+ ..\bin\Debug\plugins\
DEBUG;TRACE
prompt
4
diff --git a/CUETools.Codecs.HDCD/CUETools.Codecs.HDCD.csproj b/CUETools.Codecs.HDCD/CUETools.Codecs.HDCD.csproj
index 644e0a0..fee586e 100644
--- a/CUETools.Codecs.HDCD/CUETools.Codecs.HDCD.csproj
+++ b/CUETools.Codecs.HDCD/CUETools.Codecs.HDCD.csproj
@@ -2,7 +2,7 @@
Debug
AnyCPU
- 8.0.50727
+ 9.0.30729
2.0
{32338A04-5B6B-4C63-8EE7-C6400F73B5D7}
Library
@@ -23,6 +23,7 @@
DEBUG;TRACE
prompt
4
+ true
pdbonly
diff --git a/CUETools.Codecs.LAME/CUETools.Codecs.LAME.csproj b/CUETools.Codecs.LAME/CUETools.Codecs.LAME.csproj
index 644a684..0b50efa 100644
--- a/CUETools.Codecs.LAME/CUETools.Codecs.LAME.csproj
+++ b/CUETools.Codecs.LAME/CUETools.Codecs.LAME.csproj
@@ -44,6 +44,7 @@
{6458A13A-30EF-45A9-9D58-E5031B17BEE2}
CUETools.Codecs
+ False
diff --git a/CUETools.Codecs/BitWriter.cs b/CUETools.Codecs/BitWriter.cs
index 69da68d..82b21fb 100644
--- a/CUETools.Codecs/BitWriter.cs
+++ b/CUETools.Codecs/BitWriter.cs
@@ -83,6 +83,12 @@ namespace CUETools.Codecs
writebits(bits, (uint)val);
}
+ public void writebits(DateTime val)
+ {
+ TimeSpan span = val.ToUniversalTime() - new DateTime(1904, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+ writebits(32, (uint)span.TotalSeconds);
+ }
+
public void writebits64(int bits, ulong val)
{
if (bits > 32)
diff --git a/CUETools.DSP.Resampler/CUETools.DSP.Resampler.csproj b/CUETools.DSP.Resampler/CUETools.DSP.Resampler.csproj
index 5f56f0c..85db5cd 100644
--- a/CUETools.DSP.Resampler/CUETools.DSP.Resampler.csproj
+++ b/CUETools.DSP.Resampler/CUETools.DSP.Resampler.csproj
@@ -21,6 +21,7 @@
DEBUG;TRACE
prompt
4
+ true
pdbonly
diff --git a/CUETools/CUETools.csproj b/CUETools/CUETools.csproj
index 842d523..c8e10fc 100644
--- a/CUETools/CUETools.csproj
+++ b/CUETools/CUETools.csproj
@@ -12,7 +12,7 @@
cue2.ico
611F49E043614FEDCFF1B128868CC8DC0B6656C5
CUETools_TemporaryKey.pfx
- true
+ false
true
true
LocalIntranet
diff --git a/CUETools/CUETools.sln b/CUETools/CUETools.sln
index d594e28..0bb1fb1 100644
--- a/CUETools/CUETools.sln
+++ b/CUETools/CUETools.sln
@@ -273,6 +273,7 @@ Global
{32338A04-5B6B-4C63-8EE7-C6400F73B5D7}.Debug|x64.ActiveCfg = Debug|x64
{32338A04-5B6B-4C63-8EE7-C6400F73B5D7}.Debug|x64.Build.0 = Debug|x64
{32338A04-5B6B-4C63-8EE7-C6400F73B5D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {32338A04-5B6B-4C63-8EE7-C6400F73B5D7}.Release|Any CPU.Build.0 = Release|Any CPU
{32338A04-5B6B-4C63-8EE7-C6400F73B5D7}.Release|Win32.ActiveCfg = Release|Any CPU
{32338A04-5B6B-4C63-8EE7-C6400F73B5D7}.Release|x64.ActiveCfg = Release|Any CPU
{6458A13A-30EF-45A9-9D58-E5031B17BEE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU