Skip to content

Commit

Permalink
Cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Zeugma440 committed Nov 8, 2024
1 parent f1c056b commit 112e790
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 69 deletions.
24 changes: 5 additions & 19 deletions ATL/AudioData/IO/Helpers/BextTag.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using static ATL.AudioData.IO.MetaDataIO;
using System;
using System.Text;
using System.Globalization;

namespace ATL.AudioData.IO
{
Expand All @@ -31,19 +30,19 @@ public static void FromStream(Stream source, MetaDataIO meta, ReadTagParams read
byte[] data = new byte[256];

// Description
utf8FromStream(source, 256, data, meta, "bext.description", readTagParams.ReadAllMetaFrames);
WavHelper.Utf8FromStream(source, 256, meta, "bext.description", data, readTagParams.ReadAllMetaFrames);

// Originator
utf8FromStream(source, 32, data, meta, "bext.originator", readTagParams.ReadAllMetaFrames);
WavHelper.Utf8FromStream(source, 32, meta, "bext.originator", data, readTagParams.ReadAllMetaFrames);

// OriginatorReference
utf8FromStream(source, 32, data, meta, "bext.originatorReference", readTagParams.ReadAllMetaFrames);
WavHelper.Utf8FromStream(source, 32, meta, "bext.originatorReference", data, readTagParams.ReadAllMetaFrames);

// OriginationDate
utf8FromStream(source, 10, data, meta, "bext.originationDate", readTagParams.ReadAllMetaFrames);
WavHelper.Utf8FromStream(source, 10, meta, "bext.originationDate", data, readTagParams.ReadAllMetaFrames);

// OriginationTime
utf8FromStream(source, 8, data, meta, "bext.originationTime", readTagParams.ReadAllMetaFrames);
WavHelper.Utf8FromStream(source, 8, meta, "bext.originationTime", data, readTagParams.ReadAllMetaFrames);

// TimeReference
if (source.Read(data, 0, 8) < 8) return;
Expand Down Expand Up @@ -98,19 +97,6 @@ public static void FromStream(Stream source, MetaDataIO meta, ReadTagParams read
}
}

private static void utf8FromStream(
Stream source,
int size,
byte[] buffer,
MetaDataIO meta,
string field,
bool readAllFrames)
{
if (source.Read(buffer, 0, size) < size) return;
var str = Utils.StripEndingZeroChars(Encoding.UTF8.GetString(buffer, 0, size).Trim());
if (str.Length > 0) meta.SetMetaField(field, str, readAllFrames);
}

private static void percent16FromStream(
Stream source,
byte[] buffer,
Expand Down
71 changes: 21 additions & 50 deletions ATL/AudioData/IO/Helpers/CartTag.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,96 +34,69 @@ public static void FromStream(Stream source, MetaDataIO meta, ReadTagParams read
long initialPosition = source.Position;

// Version
source.Read(data, 0, 4);
if (source.Read(data, 0, 4) < 4) return;
var majorVersion = Utils.Latin1Encoding.GetString(data, 0, 2);
if (majorVersion.StartsWith('0')) majorVersion = majorVersion[1..];
var minorVersion = Utils.Latin1Encoding.GetString(data, 2, 2);
meta.SetMetaField("cart.version", majorVersion + "." + minorVersion, readTagParams.ReadAllMetaFrames);

// Title
source.Read(data, 0, 64);
var str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.title", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.title", data, readTagParams.ReadAllMetaFrames);

// Artist
source.Read(data, 0, 64);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.artist", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.artist", data, readTagParams.ReadAllMetaFrames);

// Cut number
source.Read(data, 0, 64);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.cutNumber", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.cutNumber", data, readTagParams.ReadAllMetaFrames);

// Client ID
source.Read(data, 0, 64);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.clientId", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.clientId", data, readTagParams.ReadAllMetaFrames);

// Category
source.Read(data, 0, 64);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.category", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.category", data, readTagParams.ReadAllMetaFrames);

// Classification
source.Read(data, 0, 64);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.classification", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.classification", data, readTagParams.ReadAllMetaFrames);

// Out cue text
source.Read(data, 0, 64);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.outCue", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.outCue", data, readTagParams.ReadAllMetaFrames);

// Start date (YYYY-MM-DD)
source.Read(data, 0, 10);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 10).Trim());
if (str.Length > 0) meta.SetMetaField("cart.startDate", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 10, meta, "cart.startDate", data, readTagParams.ReadAllMetaFrames);

// Start time (hh:mm:ss)
source.Read(data, 0, 8);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 8).Trim());
if (str.Length > 0) meta.SetMetaField("cart.startTime", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 8, meta, "cart.startTime", data, readTagParams.ReadAllMetaFrames);

// End date (YYYY-MM-DD)
source.Read(data, 0, 10);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 10).Trim());
if (str.Length > 0) meta.SetMetaField("cart.endDate", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 10, meta, "cart.endDate", data, readTagParams.ReadAllMetaFrames);

// End time (hh:mm:ss)
source.Read(data, 0, 8);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 8).Trim());
if (str.Length > 0) meta.SetMetaField("cart.endTime", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 8, meta, "cart.endTime", data, readTagParams.ReadAllMetaFrames);

// Producer app ID
source.Read(data, 0, 64);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.producerAppId", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.producerAppId", data, readTagParams.ReadAllMetaFrames);

// Producer app version
source.Read(data, 0, 64);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.producerAppVersion", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.producerAppVersion", data, readTagParams.ReadAllMetaFrames);

// User-defined
source.Read(data, 0, 64);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
if (str.Length > 0) meta.SetMetaField("cart.userDef", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 64, meta, "cart.userDef", data, readTagParams.ReadAllMetaFrames);

// Sample value for 0 dB reference
source.Read(data, 0, 4);
if (source.Read(data, 0, 4) < 4) return;
var value = StreamUtils.DecodeInt32(data);
meta.SetMetaField("cart.dwLevelReference", value.ToString(), readTagParams.ReadAllMetaFrames);

// Timer usage ID
string str;
for (int i = 0; i < 8; i++)
{
source.Read(data, 0, 4);
if (source.Read(data, 0, 4) < 4) return;
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 4).Trim());
meta.SetMetaField("cart.postTimerUsageId[" + (i + 1) + "]", str, readTagParams.ReadAllMetaFrames);

// Timer value in samples from head
source.Read(data, 0, 4);
if (source.Read(data, 0, 4) < 4) return;
var uValue = StreamUtils.DecodeUInt32(data);
meta.SetMetaField("cart.postTimerValue[" + (i + 1) + "]", uValue.ToString(), readTagParams.ReadAllMetaFrames);
}
Expand All @@ -132,16 +105,14 @@ public static void FromStream(Stream source, MetaDataIO meta, ReadTagParams read
source.Seek(276, SeekOrigin.Current);

// URL
source.Read(data, 0, 1024);
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data, 0, 1024).Trim());
meta.SetMetaField("cart.url", str, readTagParams.ReadAllMetaFrames);
WavHelper.Latin1FromStream(source, 1024, meta, "cart.url", data, readTagParams.ReadAllMetaFrames);

// Free form text for scripts or tags
int leftBytes = (int)Math.Min(int.MaxValue, chunkSize - (source.Position - initialPosition));
if (leftBytes <= 0) return;
if (leftBytes > 1024) data = new byte[leftBytes];

source.Read(data, 0, leftBytes);
if (source.Read(data, 0, leftBytes) < leftBytes) return;
str = Utils.StripEndingZeroChars(Utils.Latin1Encoding.GetString(data).Trim());
// Strip ending CR LF
foreach (var c in Utils.CR_LF.Reverse()) if (str.EndsWith((char)c)) str = str[..^2];
Expand Down
37 changes: 37 additions & 0 deletions ATL/AudioData/IO/Helpers/WavHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,43 @@ public static void ReadInt16(Stream source, MetaDataIO meta, string fieldName, b
meta.SetMetaField(fieldName, value.ToString(), readAllMetaFrames);
}

public static void Latin1FromStream(
Stream source,
int size,
MetaDataIO meta,
string field,
byte[] buffer,
bool readAllFrames)
{
StringFromStream(source, size, Utils.Latin1Encoding, meta, field, buffer, readAllFrames);
}

public static void Utf8FromStream(
Stream source,
int size,
MetaDataIO meta,
string field,
byte[] buffer,
bool readAllFrames)
{
StringFromStream(source, size, Encoding.UTF8, meta, field, buffer, readAllFrames);
}

public static void StringFromStream(
Stream source,
int size,
Encoding encoding,
MetaDataIO meta,
string field,
byte[] buffer,
bool readAllFrames)
{
if (source.Read(buffer, 0, size) < size) return;
var str = Utils.StripEndingZeroChars(encoding.GetString(buffer, 0, size).Trim());
if (str.Length > 0) meta.SetMetaField(field, str, readAllFrames);
}


/// <summary>
/// Write a fixed-length text value from the given Map to the given writer
/// NB : Used encoding is Latin-1
Expand Down

0 comments on commit 112e790

Please sign in to comment.