+ shared_ptr<xmlpp::Document> doc (new xmlpp::Document);
+ xmlpp::Element* root = doc->create_root_node ("AudioAnalysis");
+
+ root->add_child("Version")->add_child_text (raw_convert<string> (_current_state_version));
+
+ BOOST_FOREACH (vector<AudioPoint>& i, _data) {
+ xmlpp::Element* channel = root->add_child ("Channel");
+ BOOST_FOREACH (AudioPoint& j, i) {
+ j.as_xml (channel->add_child ("Point"));
+ }
+ }
+
+ for (size_t i = 0; i < _sample_peak.size(); ++i) {
+ xmlpp::Element* n = root->add_child("SamplePeak");
+ n->add_child_text (raw_convert<string> (_sample_peak[i].peak));
+ n->set_attribute ("Time", raw_convert<string> (_sample_peak[i].time.get()));
+ }
+
+ BOOST_FOREACH (float i, _true_peak) {
+ root->add_child("TruePeak")->add_child_text (raw_convert<string> (i));
+ }
+
+ if (_integrated_loudness) {
+ root->add_child("IntegratedLoudness")->add_child_text (raw_convert<string> (_integrated_loudness.get ()));
+ }
+
+ if (_loudness_range) {
+ root->add_child("LoudnessRange")->add_child_text (raw_convert<string> (_loudness_range.get ()));
+ }
+
+ if (_analysis_gain) {
+ root->add_child("AnalysisGain")->add_child_text (raw_convert<string> (_analysis_gain.get ()));
+ }
+
+ root->add_child("SamplesPerPoint")->add_child_text (raw_convert<string> (_samples_per_point));
+ root->add_child("SampleRate")->add_child_text (raw_convert<string> (_sample_rate));