Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions TuneLab/Extensions/Formats/FormatsManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,13 @@ public static bool Serialize(ProjectInfo info, string format, [NotNullWhen(true)

try
{
if (!mImportFormats.ContainsKey(format))
if (!mExportFormats.ContainsKey(format))
{
throw new Exception(string.Format("Format {0} is not support!", format));
}

IExportFormat importFormat = (IExportFormat)mExportFormats[format].Invoke(null);
stream = importFormat.Serialize(info);
IExportFormat exportFormat = (IExportFormat)mExportFormats[format].Invoke(null);
stream = exportFormat.Serialize(info);
return true;
}
catch (Exception e)
Expand Down
213 changes: 107 additions & 106 deletions TuneLab/Extensions/Formats/UFData/UtaFormatixV1Data.cs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@ public static object Deserialize(Stream stream)
midiPartInfo.Pitch.Add(pitchBend);
pitchBend = [new Point((double)pitchTicks[i], (double)pitchValues[i])];
}
else {
else
{
pitchBend.Add(new Point((double)pitchTicks[i], (double)pitchValues[i]));
}

Expand Down Expand Up @@ -166,82 +167,82 @@ public static Stream Serialize(ProjectInfo projectInfo)
{ "formatVersion", 1 }
};

var tracks = new JArray();
var tempos = new JArray();
var timeSignatures = new JArray();
var tracks = new JArray();
var tempos = new JArray();
var timeSignatures = new JArray();

foreach (var trackInfo in projectInfo.Tracks)
foreach (var trackInfo in projectInfo.Tracks)
{
var trackObj = new JObject
{
var trackObj = new JObject
{
["name"] = trackInfo.Name
};
["name"] = trackInfo.Name
};

foreach (var partInfo in trackInfo.Parts)
var notes = new JArray();
var pitch = new JObject();
var ticks = new JArray();
var values = new JArray();
foreach (var partInfo in trackInfo.Parts)
{
if (partInfo is MidiPartInfo midiPartInfo)
{
if (partInfo is MidiPartInfo midiPartInfo)
foreach (var noteInfo in midiPartInfo.Notes)
{
var notes = new JArray();
foreach (var noteInfo in midiPartInfo.Notes)
{
var note = new JObject();
note.Add("tickOn", (int)noteInfo.Pos);
note.Add("tickOff", (int)(noteInfo.Dur + noteInfo.Pos));
note.Add("key", noteInfo.Pitch);
note.Add("lyric", noteInfo.Lyric);
note.Add("phoneme", ToJson(noteInfo.Properties)["Phoneme"] ?? "a");

notes.Add(note);
}
trackObj.Add("notes", notes);
var note = new JObject();
note.Add("tickOn", (int)(partInfo.Pos + noteInfo.Pos));
note.Add("tickOff", (int)(partInfo.Pos + noteInfo.Dur + noteInfo.Pos));
note.Add("key", noteInfo.Pitch);
note.Add("lyric", noteInfo.Lyric);
note.Add("phoneme", ToJson(noteInfo.Properties)["Phoneme"] ?? "a");

notes.Add(note);
}

var pitch = new JObject();
var ticks = new JArray();
var values = new JArray();
foreach (var pointList in midiPartInfo.Pitch)
foreach (var pointList in midiPartInfo.Pitch)
{
foreach (var point in pointList)
{
foreach (var point in pointList)
{
ticks.Add((int)point.X);
values.Add(point.Y);
}
ticks.Add((int)(partInfo.Pos + point.X));
values.Add(point.Y);
}

pitch.Add("ticks", ticks);
pitch.Add("values", values);
pitch.Add("isAbsolute", true);

trackObj.Add("pitch", pitch);
}

tracks.Add(trackObj);
}

}
pitch.Add("ticks", ticks);
pitch.Add("values", values);
pitch.Add("isAbsolute", true);

foreach (var tempoInfo in projectInfo.Tempos)
{
var tempo = new JObject()
trackObj.Add("notes", notes);
trackObj.Add("pitch", pitch);
tracks.Add(trackObj);
}


foreach (var tempoInfo in projectInfo.Tempos)
{
var tempo = new JObject()
{
{ "tickPosition", (int)tempoInfo.Pos },
{ "bpm", (int)tempoInfo.Bpm }
};

tempos.Add(tempo);
}
tempos.Add(tempo);
}

foreach (var timeSignatureInfo in projectInfo.TimeSignatures)
{
var timeSignature = new JObject()
foreach (var timeSignatureInfo in projectInfo.TimeSignatures)
{
var timeSignature = new JObject()
{
{ "measurePosition", timeSignatureInfo.BarIndex },
{ "numerator", timeSignatureInfo.Numerator },
{ "denominator", timeSignatureInfo.Denominator }
};

timeSignatures.Add(timeSignature);
}
timeSignatures.Add(timeSignature);
}

var ufProject = new JObject
var ufProject = new JObject
{
{ "name", "Project" },
{ "tracks", tracks },
Expand All @@ -250,66 +251,66 @@ public static Stream Serialize(ProjectInfo projectInfo)
{ "measurePrefix", 4 }
};

project.Add("project", ufProject);
project.Add("project", ufProject);

return new MemoryStream(Encoding.UTF8.GetBytes(project.ToString(Formatting.None)));
}
return new MemoryStream(Encoding.UTF8.GetBytes(project.ToString(Formatting.None)));
}
}

static PropertyObject FromJson(JToken jToken)
{
var map = new Map<string, PropertyValue>();
static PropertyObject FromJson(JToken jToken)
{
var map = new Map<string, PropertyValue>();

foreach (JProperty property in jToken.Children())
{
var key = property.Name;
var value = property.Value;
switch (value.Type)
{
case JTokenType.Boolean:
map.Add(key, (bool)value);
break;
case JTokenType.Integer:
map.Add(key, (int)value);
break;
case JTokenType.Float:
map.Add(key, (double)value);
break;
case JTokenType.String:
map.Add(key, (string)value);
break;
case JTokenType.Object:
map.Add(key, FromJson(value));
break;
}
}
return new(map);
foreach (JProperty property in jToken.Children())
{
var key = property.Name;
var value = property.Value;
switch (value.Type)
{
case JTokenType.Boolean:
map.Add(key, (bool)value);
break;
case JTokenType.Integer:
map.Add(key, (int)value);
break;
case JTokenType.Float:
map.Add(key, (double)value);
break;
case JTokenType.String:
map.Add(key, (string)value);
break;
case JTokenType.Object:
map.Add(key, FromJson(value));
break;
}
}
return new(map);
}

static JObject ToJson(PropertyObject properties)
static JObject ToJson(PropertyObject properties)
{
var json = new JObject();
foreach (var property in properties.Map)
{
var key = property.Key;
var value = property.Value;
if (value.ToObject(out var propertyObject))
{
var json = new JObject();
foreach (var property in properties.Map)
{
var key = property.Key;
var value = property.Value;
if (value.ToObject(out var propertyObject))
{
json.Add(key, ToJson(propertyObject));
}
else if (value.ToBool(out var boolValue))
{
json.Add(key, boolValue);
}
else if (value.ToDouble(out var doubleValue))
{
json.Add(key, doubleValue);
}
else if (value.ToString(out var strinValue))
{
json.Add(key, strinValue);
}
}
return json;
json.Add(key, ToJson(propertyObject));
}
else if (value.ToBool(out var boolValue))
{
json.Add(key, boolValue);
}
else if (value.ToDouble(out var doubleValue))
{
json.Add(key, doubleValue);
}
else if (value.ToString(out var strinValue))
{
json.Add(key, strinValue);
}
}
return json;
}
}
Loading