mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-19 17:11:12 +02:00
Additional autosave speed improvement and 1 fix
This changes the autosave XML file to a binary representation during writing to speed up autosave processing. A lot of the time used during autosave is a result of having to convert and print all of the values to the XML file. Writing the same information, but in binary format, reduces all of that to just the bare essentials and the actual write I/O. During recovery, the binary file is read and converted to the real xML representation and processing happens as it did before. It is a noticeable difference with very long or many tracks. The included fix has to do with append recording. Say you have 3 tracks and you want to append recorded audio to the middle track. Sometime later Audacity crashes and upon recovery, the recorded audio is actually appended to the third track, not the second one. This fixes that by adding an "autosaveid" to each track as it is written to the autosave file. The same ID is written to the recording recovery appends to the autosave file. Then, during recovery, the IDs are matched up and the audio gets appended to the proper track. These autosaveid attributes are only present in the autosave file and not in saved project files.
This commit is contained in:
@@ -33,7 +33,6 @@ the general functionality for creating XML in UTF8 encoding.
|
||||
|
||||
#include "../Internat.h"
|
||||
#include "XMLWriter.h"
|
||||
#include "XMLTagHandler.h"
|
||||
|
||||
//table for xml encoding compatibility with expat decoding
|
||||
//see wxWidgets-2.8.12/src/expat/lib/xmltok_impl.h
|
||||
|
@@ -10,8 +10,9 @@
|
||||
#ifndef __AUDACITY_XML_XML_FILE_WRITER__
|
||||
#define __AUDACITY_XML_XML_FILE_WRITER__
|
||||
|
||||
#include <wx/ffile.h>
|
||||
#include <wx/arrstr.h>
|
||||
#include <wx/dynarray.h>
|
||||
#include <wx/ffile.h>
|
||||
|
||||
///
|
||||
/// XMLWriter
|
||||
@@ -23,23 +24,23 @@ class AUDACITY_DLL_API XMLWriter {
|
||||
XMLWriter();
|
||||
virtual ~XMLWriter();
|
||||
|
||||
void StartTag(const wxString &name);
|
||||
void EndTag(const wxString &name);
|
||||
virtual void StartTag(const wxString &name);
|
||||
virtual void EndTag(const wxString &name);
|
||||
|
||||
void WriteAttr(const wxString &name, const wxString &value);
|
||||
void WriteAttr(const wxString &name, const wxChar *value);
|
||||
virtual void WriteAttr(const wxString &name, const wxString &value);
|
||||
virtual void WriteAttr(const wxString &name, const wxChar *value);
|
||||
|
||||
void WriteAttr(const wxString &name, int value);
|
||||
void WriteAttr(const wxString &name, bool value);
|
||||
void WriteAttr(const wxString &name, long value);
|
||||
void WriteAttr(const wxString &name, long long value);
|
||||
void WriteAttr(const wxString &name, size_t value);
|
||||
void WriteAttr(const wxString &name, float value, int digits = -1);
|
||||
void WriteAttr(const wxString &name, double value, int digits = -1);
|
||||
virtual void WriteAttr(const wxString &name, int value);
|
||||
virtual void WriteAttr(const wxString &name, bool value);
|
||||
virtual void WriteAttr(const wxString &name, long value);
|
||||
virtual void WriteAttr(const wxString &name, long long value);
|
||||
virtual void WriteAttr(const wxString &name, size_t value);
|
||||
virtual void WriteAttr(const wxString &name, float value, int digits = -1);
|
||||
virtual void WriteAttr(const wxString &name, double value, int digits = -1);
|
||||
|
||||
void WriteData(const wxString &value);
|
||||
virtual void WriteData(const wxString &value);
|
||||
|
||||
void WriteSubTree(const wxString &value);
|
||||
virtual void WriteSubTree(const wxString &value);
|
||||
|
||||
virtual void Write(const wxString &data) = 0;
|
||||
|
||||
|
Reference in New Issue
Block a user