diff --git a/Cavern.QuickEQ.Format/ConfigurationFile/CavernFilterStudioConfigurationFile.cs b/Cavern.QuickEQ.Format/ConfigurationFile/CavernFilterStudioConfigurationFile.cs
index 3a80ab4..933c72f 100644
--- a/Cavern.QuickEQ.Format/ConfigurationFile/CavernFilterStudioConfigurationFile.cs
+++ b/Cavern.QuickEQ.Format/ConfigurationFile/CavernFilterStudioConfigurationFile.cs
@@ -7,6 +7,7 @@
using Cavern.Channels;
using Cavern.Filters;
using Cavern.Filters.Utilities;
+using Cavern.Format.ConfigurationFile.Helpers;
using Cavern.QuickEQ.Equalization;
namespace Cavern.Format.ConfigurationFile {
@@ -25,7 +26,7 @@ public CavernFilterStudioConfigurationFile(ConfigurationFile other) : base(other
///
/// Import a Cavern Filter Studio configuration file from a .
///
- public CavernFilterStudioConfigurationFile(string path) : base(ParseSplitPoints(path)) { }
+ public CavernFilterStudioConfigurationFile(string path) : base(ParseSplitPoints(path)) => FinishLazySetup(131072);
///
/// Create an empty file for a standard layout.
@@ -104,7 +105,7 @@ public CavernFilterStudioConfigurationFile(string name, params ReferenceChannel[
static Filter ParseFilter(XmlReader reader) {
switch (reader.Name) {
case nameof(GraphicEQ):
- GraphicEQ graphicEQ = new GraphicEQ(new Equalizer(), Listener.DefaultSampleRate);
+ LazyGraphicEQ graphicEQ = new LazyGraphicEQ(new Equalizer(), Listener.DefaultSampleRate);
graphicEQ.ReadXml(reader);
return graphicEQ;
case nameof(InputChannel):
@@ -117,7 +118,7 @@ static Filter ParseFilter(XmlReader reader) {
return outputChannel;
default:
return Filter.FromXml(reader);
- };
+ }
}
///
@@ -137,7 +138,7 @@ public override void Export(string path) {
(FilterGraphNode node, int channel)[] exportOrder = GetExportOrder();
ValidateForExport(exportOrder);
- XmlWriterSettings settings = new XmlWriterSettings() {
+ XmlWriterSettings settings = new XmlWriterSettings {
Indent = true
};
using XmlWriter writer = XmlWriter.Create(path, settings);
@@ -162,7 +163,7 @@ public override void Export(string path) {
return j;
}
}
- throw new IndexOutOfRangeException();
+ throw new DataMisalignedException();
})));
writer.WriteEndElement();
}
diff --git a/Cavern.QuickEQ.Format/ConfigurationFile/Helpers/LazyGraphicEQ.cs b/Cavern.QuickEQ.Format/ConfigurationFile/Helpers/LazyGraphicEQ.cs
index 7120e40..4df42d9 100644
--- a/Cavern.QuickEQ.Format/ConfigurationFile/Helpers/LazyGraphicEQ.cs
+++ b/Cavern.QuickEQ.Format/ConfigurationFile/Helpers/LazyGraphicEQ.cs
@@ -1,4 +1,8 @@
-using Cavern.Filters;
+using System.Xml;
+using System.Xml.Schema;
+using System.Xml.Serialization;
+
+using Cavern.Filters;
using Cavern.QuickEQ.Equalization;
using Cavern.Utilities;
@@ -6,16 +10,16 @@ namespace Cavern.Format.ConfigurationFile.Helpers {
///
/// Placeholder where a should be created.
///
- public sealed class LazyGraphicEQ : Filter, ILazyLoadableFilter {
+ public sealed class LazyGraphicEQ : Filter, ILazyLoadableFilter, IXmlSerializable {
///
/// Desired frequency response change.
///
- readonly Equalizer equalizer;
+ Equalizer equalizer;
///
/// Sample rate at which this EQ is converted to a minimum-phase FIR filter.
///
- readonly int sampleRate;
+ int sampleRate;
///
/// Placeholder where a should be created.
@@ -38,5 +42,30 @@ public Filter CreateFilter(FFTCachePool cachePool) {
///
public override object Clone() => new LazyGraphicEQ(equalizer, sampleRate);
+
+ ///
+ public XmlSchema GetSchema() => null;
+
+ ///
+ public void ReadXml(XmlReader reader) {
+ while (reader.MoveToNextAttribute()) {
+ switch (reader.Name) {
+ case nameof(GraphicEQ.SampleRate):
+ sampleRate = int.Parse(reader.Value);
+ break;
+ case nameof(GraphicEQ.Equalizer):
+ equalizer = EQGenerator.FromEqualizerAPO(reader.Value);
+ break;
+ }
+ }
+ }
+
+ ///
+ public void WriteXml(XmlWriter writer) {
+ writer.WriteStartElement(nameof(GraphicEQ));
+ writer.WriteAttributeString(nameof(GraphicEQ.SampleRate), sampleRate.ToString());
+ writer.WriteAttributeString(nameof(GraphicEQ.Equalizer), equalizer.ExportToEqualizerAPO());
+ writer.WriteEndElement();
+ }
}
}
\ No newline at end of file