Audacity  3.0.3
SilentBlockFile.cpp
Go to the documentation of this file.
1 /**********************************************************************
2 
3  Audacity: A Digital Audio Editor
4 
5  SilentBlockFile.cpp
6 
7  Joshua Haberman
8 
9 **********************************************************************/
10 
11 #include "../Audacity.h"
12 #include "SilentBlockFile.h"
13 
14 #include "../FileFormats.h"
15 #include "../DirManager.h"
16 #include "../xml/XMLTagHandler.h"
17 
19 BlockFile{ wxFileNameWrapper{}, sampleLen }
20 {
21  mMin = 0.;
22  mMax = 0.;
23  mRMS = 0.;
24 }
25 
27 {
28 }
29 
31 {
32  data.reinit( mSummaryInfo.totalSummaryBytes );
33  memset(data.get(), 0, mSummaryInfo.totalSummaryBytes);
34  return true;
35 }
36 
38  size_t WXUNUSED(start), size_t len, bool) const
39 {
40  ClearSamples(data, format, 0, len);
41 
42  return len;
43 }
44 
46 // may throw
47 {
48  xmlFile.StartTag(wxT("silentblockfile"));
49 
50  xmlFile.WriteAttr(wxT("len"), mLen);
51 
52  xmlFile.EndTag(wxT("silentblockfile"));
53 }
54 
55 // BuildFromXML methods should always return a BlockFile, not NULL,
56 // even if the result is flawed (e.g., refers to nonexistent file),
57 // as testing will be done in ProjectFSCK().
59 BlockFilePtr SilentBlockFile::BuildFromXML(DirManager & WXUNUSED(dm), const wxChar **attrs)
60 {
61  long nValue;
62  size_t len = 0;
63 
64  while(*attrs)
65  {
66  const wxChar *attr = *attrs++;
67  const wxChar *value = *attrs++;
68  if (!value)
69  break;
70 
71  const wxString strValue = value;
72  if (!wxStrcmp(attr, wxT("len")) &&
73  XMLValueChecker::IsGoodInt(strValue) &&
74  strValue.ToLong(&nValue) &&
75  nValue > 0)
76  len = nValue;
77  }
78 
79  return make_blockfile<SilentBlockFile>(len);
80 }
81 
84 {
85  auto newBlockFile = make_blockfile<SilentBlockFile>(mLen);
86 
87  return newBlockFile;
88 }
89 
90 auto SilentBlockFile::GetSpaceUsage() const -> DiskByteCount
91 {
92  return 0;
93 }
94 
95 static DirManager::RegisteredBlockFileDeserializer sRegistration {
96  "silentblockfile",
97  []( DirManager &dm, const wxChar **attrs ){
98  return SilentBlockFile::BuildFromXML( dm, attrs );
99  }
100 };
XMLWriter
Base class for XMLFileWriter and XMLStringWriter that provides the general functionality for creating...
Definition: XMLWriter.h:23
XMLWriter::EndTag
virtual void EndTag(const wxString &name)
Definition: XMLWriter.cpp:99
ClearSamples
void ClearSamples(samplePtr dst, sampleFormat format, size_t start, size_t len)
Definition: SampleFormat.cpp:77
SilentBlockFile::~SilentBlockFile
virtual ~SilentBlockFile()
Definition: SilentBlockFile.cpp:26
wxFileNameWrapper
Definition: wxFileNameWrapper.h:21
XMLValueChecker::IsGoodInt
static bool IsGoodInt(const wxString &strInt)
Check that the supplied string can be converted to a long (32bit) integer.
Definition: XMLTagHandler.cpp:157
SilentBlockFile::ReadData
size_t ReadData(samplePtr data, sampleFormat format, size_t start, size_t len, bool mayThrow) const override
Read the data section of the disk file.
Definition: SilentBlockFile.cpp:37
SilentBlockFile::SilentBlockFile
SilentBlockFile(size_t sampleLen)
Definition: SilentBlockFile.cpp:18
ArrayOf::reinit
void reinit(Integral count, bool initialize=false)
Definition: MemoryX.h:57
SilentBlockFile.h
SilentBlockFile::GetSpaceUsage
DiskByteCount GetSpaceUsage() const override
Definition: SilentBlockFile.cpp:90
format
int format
Definition: ExportPCM.cpp:56
SilentBlockFile::ReadSummary
bool ReadSummary(ArrayOf< char > &data) override
Read the summary section of the disk file.
Definition: SilentBlockFile.cpp:30
sampleFormat
sampleFormat
Definition: SampleFormat.h:29
samplePtr
char * samplePtr
Definition: SampleFormat.h:49
SilentBlockFile::Copy
BlockFilePtr Copy(wxFileNameWrapper &&newFileName) override
Create a NEW block file identical to this one.
Definition: SilentBlockFile.cpp:83
XMLWriter::WriteAttr
void WriteAttr(const wxString &name, const Identifier &value)
Definition: XMLWriter.h:34
SilentBlockFile::BuildFromXML
static BlockFilePtr BuildFromXML(DirManager &dm, const wxChar **attrs)
static
Definition: SilentBlockFile.cpp:59
SilentBlockFile::SaveXML
void SaveXML(XMLWriter &xmlFile) override
Write an XML representation of this file.
Definition: SilentBlockFile.cpp:45
ArrayOf< char >
XMLWriter::StartTag
virtual void StartTag(const wxString &name)
Definition: XMLWriter.cpp:76
sRegistration
static DirManager::RegisteredBlockFileDeserializer sRegistration
Definition: SilentBlockFile.cpp:95