274 |
friend class Articulation; |
friend class Articulation; |
275 |
}; |
}; |
276 |
|
|
277 |
|
/** @brief Abstract base class for all classes using RIFF::Chunks for persistency. |
278 |
|
* |
279 |
|
* This abstract base class defines the general interface for all classes |
280 |
|
* which are using RIFF::Chunks to actually load and store their data |
281 |
|
* persistently from/to disk. |
282 |
|
*/ |
283 |
|
class Storage { |
284 |
|
public: |
285 |
|
/** @brief Apply object's changes to the respective RIF::Chunks. |
286 |
|
* |
287 |
|
* This abstract interface method is intended to be implemented by the |
288 |
|
* deriving classes by updating the respective RIFF chunks associated |
289 |
|
* with the object such that those RIFF chunks reflect the object's |
290 |
|
* current data (i.e. object's current member variables). So the purpose |
291 |
|
* of this method is to prepare for saving the object's current state |
292 |
|
* persistently to the actual RIFF file. |
293 |
|
* |
294 |
|
* After returning from this method the changes are just scheduled to be |
295 |
|
* saved to the RIFF file, it is required to call File::Save() |
296 |
|
* subsequently to make the changes actually persistent on file level. |
297 |
|
* |
298 |
|
* Usually there is no need to call this method directly from an |
299 |
|
* application. This method is called automatically by libgig if one of |
300 |
|
* the respective API methods is called to save the file persistently |
301 |
|
* to disk (i.e. DLS::File::Save() or gig::File::Save()). |
302 |
|
* |
303 |
|
* @param pProgress - callback function for progress notification |
304 |
|
*/ |
305 |
|
virtual void UpdateChunks(progress_t* pProgress) = 0; |
306 |
|
|
307 |
|
/** @brief Remove all RIFF chunks associated with this object. |
308 |
|
* |
309 |
|
* This abstract interface method is intended to be implemented by the |
310 |
|
* deriving classes by removing every RIFF::Chunk the deriving overall |
311 |
|
* object is using to store the object in the final RIFF::File. In other |
312 |
|
* words: the intention is to remove the deriving class(es)'s object |
313 |
|
* persistently from the currently open file. |
314 |
|
* |
315 |
|
* Note that the RIFF::Chunks deletions is just scheduled after |
316 |
|
* returning from this method. You have to call File::Save() to make |
317 |
|
* these changes persistent on file level. |
318 |
|
* |
319 |
|
* Usually there is no need to call this method directly from an |
320 |
|
* application. This method is called automatically by libgig if one of |
321 |
|
* the respective API methods is called to remove the respective object |
322 |
|
* persistently (i.e. File::DeleteInstrument() or File::DeleteSample()). |
323 |
|
*/ |
324 |
|
virtual void DeleteChunks() = 0; |
325 |
|
}; |
326 |
|
|
327 |
/** Provides access to the defined connections used for the synthesis model. */ |
/** Provides access to the defined connections used for the synthesis model. */ |
328 |
class Articulation { |
class Articulation : public Storage { |
329 |
public: |
public: |
330 |
Connection* pConnections; ///< Points to the beginning of a <i>Connection</i> array. |
Connection* pConnections; ///< Points to the beginning of a <i>Connection</i> array. |
331 |
uint32_t Connections; ///< Reflects the number of Connections. |
uint32_t Connections; ///< Reflects the number of Connections. |
332 |
|
|
333 |
Articulation(RIFF::Chunk* artl); |
Articulation(RIFF::Chunk* artl); |
334 |
virtual ~Articulation(); |
virtual ~Articulation(); |
335 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress) OVERRIDE; |
336 |
|
virtual void DeleteChunks() OVERRIDE; |
337 |
protected: |
protected: |
338 |
RIFF::Chunk* pArticulationCk; |
RIFF::Chunk* pArticulationCk; |
339 |
uint32_t HeaderSize; |
uint32_t HeaderSize; |
340 |
}; |
}; |
341 |
|
|
342 |
/** Abstract base class for classes that provide articulation information (thus for <i>Instrument</i> and <i>Region</i> class). */ |
/** Abstract base class for classes that provide articulation information (thus for <i>Instrument</i> and <i>Region</i> class). */ |
343 |
class Articulator { |
class Articulator : public Storage { |
344 |
public: |
public: |
345 |
Articulator(RIFF::List* ParentList); |
Articulator(RIFF::List* ParentList); |
346 |
Articulation* GetFirstArticulation(); |
Articulation* GetFirstArticulation(); |
347 |
Articulation* GetNextArticulation(); |
Articulation* GetNextArticulation(); |
348 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress) OVERRIDE; |
349 |
|
virtual void DeleteChunks() OVERRIDE; |
350 |
virtual void CopyAssign(const Articulator* orig); |
virtual void CopyAssign(const Articulator* orig); |
351 |
protected: |
protected: |
352 |
typedef std::list<Articulation*> ArticulationList; |
typedef std::list<Articulation*> ArticulationList; |
359 |
}; |
}; |
360 |
|
|
361 |
/** Optional information for DLS files, instruments, samples, etc. */ |
/** Optional information for DLS files, instruments, samples, etc. */ |
362 |
class Info { |
class Info : public Storage { |
363 |
public: |
public: |
364 |
String Name; ///< <INAM-ck>. Stores the title of the subject of the file, such as, Seattle From Above. |
String Name; ///< <INAM-ck>. Stores the title of the subject of the file, such as, Seattle From Above. |
365 |
String ArchivalLocation; ///< <IARL-ck>. Indicates where the subject of the file is stored. |
String ArchivalLocation; ///< <IARL-ck>. Indicates where the subject of the file is stored. |
388 |
Info(RIFF::List* list); |
Info(RIFF::List* list); |
389 |
void SetFixedStringLengths(const string_length_t* lengths); |
void SetFixedStringLengths(const string_length_t* lengths); |
390 |
virtual ~Info(); |
virtual ~Info(); |
391 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress) OVERRIDE; |
392 |
|
virtual void DeleteChunks() OVERRIDE; |
393 |
virtual void CopyAssign(const Info* orig); |
virtual void CopyAssign(const Info* orig); |
394 |
private: |
private: |
395 |
RIFF::List* pResourceListChunk; |
RIFF::List* pResourceListChunk; |
400 |
}; |
}; |
401 |
|
|
402 |
/** Abstract base class which encapsulates data structures which all DLS resources are able to provide. */ |
/** Abstract base class which encapsulates data structures which all DLS resources are able to provide. */ |
403 |
class Resource { |
class Resource : public Storage { |
404 |
public: |
public: |
405 |
Info* pInfo; ///< Points (in any case) to an <i>Info</i> object, providing additional, optional infos and comments. |
Info* pInfo; ///< Points (in any case) to an <i>Info</i> object, providing additional, optional infos and comments. |
406 |
dlsid_t* pDLSID; ///< Points to a <i>dlsid_t</i> structure if the file provided a DLS ID else is <i>NULL</i>. |
dlsid_t* pDLSID; ///< Points to a <i>dlsid_t</i> structure if the file provided a DLS ID else is <i>NULL</i>. |
407 |
|
|
408 |
Resource* GetParent() { return pParent; } |
Resource* GetParent() { return pParent; } |
409 |
const Resource* GetParent() const { return pParent; } |
const Resource* GetParent() const { return pParent; } |
410 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress) OVERRIDE; |
411 |
|
virtual void DeleteChunks() OVERRIDE; |
412 |
void GenerateDLSID(); |
void GenerateDLSID(); |
413 |
static void GenerateDLSID(dlsid_t* pDLSID); |
static void GenerateDLSID(dlsid_t* pDLSID); |
414 |
virtual void CopyAssign(const Resource* orig); |
virtual void CopyAssign(const Resource* orig); |
421 |
}; |
}; |
422 |
|
|
423 |
/** Abstract base class which provides mandatory informations about sample players in general. */ |
/** Abstract base class which provides mandatory informations about sample players in general. */ |
424 |
class Sampler { |
class Sampler : public Storage { |
425 |
public: |
public: |
426 |
uint8_t UnityNote; |
uint8_t UnityNote; |
427 |
int16_t FineTune; |
int16_t FineTune; |
434 |
void AddSampleLoop(sample_loop_t* pLoopDef); |
void AddSampleLoop(sample_loop_t* pLoopDef); |
435 |
void DeleteSampleLoop(sample_loop_t* pLoopDef); |
void DeleteSampleLoop(sample_loop_t* pLoopDef); |
436 |
virtual void SetGain(int32_t gain); |
virtual void SetGain(int32_t gain); |
437 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress) OVERRIDE; |
438 |
|
virtual void DeleteChunks() OVERRIDE; |
439 |
virtual void CopyAssign(const Sampler* orig); |
virtual void CopyAssign(const Sampler* orig); |
440 |
protected: |
protected: |
441 |
RIFF::List* pParentList; |
RIFF::List* pParentList; |
471 |
file_offset_t SetPos(file_offset_t SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start); |
file_offset_t SetPos(file_offset_t SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start); |
472 |
file_offset_t Read(void* pBuffer, file_offset_t SampleCount); |
file_offset_t Read(void* pBuffer, file_offset_t SampleCount); |
473 |
file_offset_t Write(void* pBuffer, file_offset_t SampleCount); |
file_offset_t Write(void* pBuffer, file_offset_t SampleCount); |
474 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress) OVERRIDE; |
475 |
|
virtual void DeleteChunks() OVERRIDE; |
476 |
virtual void CopyAssign(const Sample* orig); |
virtual void CopyAssign(const Sample* orig); |
477 |
|
|
478 |
protected: |
protected: |
504 |
Sample* GetSample(); |
Sample* GetSample(); |
505 |
void SetSample(Sample* pSample); |
void SetSample(Sample* pSample); |
506 |
virtual void SetKeyRange(uint16_t Low, uint16_t High); |
virtual void SetKeyRange(uint16_t Low, uint16_t High); |
507 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress) OVERRIDE; |
508 |
|
virtual void DeleteChunks() OVERRIDE; |
509 |
virtual void CopyAssign(const Region* orig); |
virtual void CopyAssign(const Region* orig); |
510 |
protected: |
protected: |
511 |
RIFF::List* pCkRegion; |
RIFF::List* pCkRegion; |
533 |
Region* GetNextRegion(); |
Region* GetNextRegion(); |
534 |
Region* AddRegion(); |
Region* AddRegion(); |
535 |
void DeleteRegion(Region* pRegion); |
void DeleteRegion(Region* pRegion); |
536 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress) OVERRIDE; |
537 |
|
virtual void DeleteChunks() OVERRIDE; |
538 |
virtual void CopyAssign(const Instrument* orig); |
virtual void CopyAssign(const Instrument* orig); |
539 |
protected: |
protected: |
540 |
typedef std::list<Region*> RegionList; |
typedef std::list<Region*> RegionList; |
576 |
Instrument* AddInstrument(); |
Instrument* AddInstrument(); |
577 |
void DeleteInstrument(Instrument* pInstrument); |
void DeleteInstrument(Instrument* pInstrument); |
578 |
RIFF::File* GetExtensionFile(int index); |
RIFF::File* GetExtensionFile(int index); |
579 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress) OVERRIDE; |
580 |
virtual void Save(const String& Path, progress_t* pProgress = NULL); |
virtual void Save(const String& Path, progress_t* pProgress = NULL); |
581 |
virtual void Save(progress_t* pProgress = NULL); |
virtual void Save(progress_t* pProgress = NULL); |
582 |
virtual ~File(); |
virtual ~File(); |