libgig  4.0.0
SF.h
Go to the documentation of this file.
1 /***************************************************************************
2  * *
3  * libsf2 - C++ cross-platform SF2 format file access library *
4  * *
5  * Copyright (C) 2009-2010 by Grigor Iliev <grigor@grigoriliev.com> *
6  * *
7  * This library is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  * *
12  * This library is distributed in the hope that it will be useful, *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15  * GNU General Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with this library; if not, write to the Free Software *
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
20  * MA 02111-1307 USA *
21  ***************************************************************************/
22 
23 #ifndef __SF2_SF_H__
24 #define __SF2_SF_H__
25 
26 #include "RIFF.h"
27 
28 #include <vector>
29 
30 
31 #define RIFF_ID(x) (*((uint32_t*) x))
32 
33 
34 #define RIFF_TYPE_SF2 RIFF_ID("sfbk")
35 
36 // Level 0
37 #define LIST_TYPE_SDTA RIFF_ID("sdta")
38 #define LIST_TYPE_PDTA RIFF_ID("pdta")
39 
40 // Level 1
41 //<INFO-list>
42 #define CHUNK_ID_IFIL RIFF_ID("ifil")
43 #define CHUNK_ID_ISNG RIFF_ID("isng")
44 #define CHUNK_ID_IROM RIFF_ID("irom")
45 #define CHUNK_ID_IVER RIFF_ID("iver")
46 
47 //<sdta-list>
48 #define CHUNK_ID_SM24 RIFF_ID("sm24")
49 
50 //<pdta-list>
51 #define CHUNK_ID_PHDR RIFF_ID("phdr")
52 #define CHUNK_ID_PBAG RIFF_ID("pbag")
53 #define CHUNK_ID_PMOD RIFF_ID("pmod")
54 #define CHUNK_ID_PGEN RIFF_ID("pgen")
55 #define CHUNK_ID_INST RIFF_ID("inst")
56 #define CHUNK_ID_IBAG RIFF_ID("ibag")
57 #define CHUNK_ID_IMOD RIFF_ID("imod")
58 #define CHUNK_ID_IGEN RIFF_ID("igen")
59 #define CHUNK_ID_SHDR RIFF_ID("shdr")
60 
62 namespace sf2 {
63 
64  static uint NONE = 0x1ffffff;
65 
66  double ToSeconds(int Timecents);
67  double ToRatio(int Centibels);
68  double ToHz(int cents);
69 
70  typedef struct _PresetBag {
71  uint16_t GenNdx;
72  uint16_t ModNdx;
73  } PresetBag;
74 
75  typedef uint16_t SFModulator;
76  typedef uint16_t SFGenerator;
77  typedef uint16_t SFTransform;
78 
79  typedef struct _ModList {
82  uint16_t ModAmount;
85  } ModList;
86 
87  typedef struct _RangesType {
88  #if WORDS_BIGENDIAN
89  uint8_t byHi;
90  uint8_t byLo;
91  #else
92  uint8_t byLo;
93  uint8_t byHi;
94  #endif
95  } RangesType;
96 
97  typedef union _GenAmountType {
99  short shAmount;
100  uint16_t wAmount;
101  } GenAmountType;
102 
103  typedef struct _GenList {
106  } GenList;
107 
108  typedef struct _InstBag {
109  uint16_t InstGenNdx;
110  uint16_t InstModNdx;
111  } InstBag;
112 
113  typedef enum {
134  UNUSED4, //20
175  } SFGeneratorType;
176 
177  class Modulator {
178  public:
179 
184  enum {
192  LINK = 127
193  };
194 
198  enum {
199  LINEAR = 0,
203  };
204 
205  int Type;
207  bool Direction;
208  bool Polarity;
209  int Index;
210 
211  Modulator(SFModulator mod);
212  };
213 
215  public:
218  uint16_t ModAmount;
221 
222  ModulatorItem(ModList& mod);
223  };
224 
225 
226  typedef std::string String;
227 
228  class Exception : public RIFF::Exception {
230  };
231 
232  class Version {
233  public:
234  int Major;
235  int Minor;
236 
237  Version(RIFF::Chunk* ck);
238  };
239 
240  class Info {
241  public:
253 
254  Info(RIFF::List* list);
255  ~Info();
256  private:
257  static void LoadString(uint32_t ChunkID, RIFF::List* lstINFO, String& s);
258  };
259 
260  class Region;
261 
262  class Sample {
263  public:
264 
265  typedef enum {
270  ROM_MONO_SAMPLE = 0x8001,
272  ROM_LEFT_SAMPLE = 0x8004,
274  } Link;
275 
278  public:
279  unsigned long position;
280  bool reverse;
281  unsigned long loop_cycles_left;
282  };
283 
285  struct buffer_t {
286  void* pStart;
287  unsigned long Size;
288  unsigned long NullExtensionSize;
290  pStart = NULL;
291  Size = 0;
292  NullExtensionSize = 0;
293  }
294  };
295 
297 
299 
300  String GetName() { return Name; }
301  int GetChannelCount();
302  long GetTotalFrameCount();
303  int GetFrameSize();
304  bool HasLoops();
305  bool IsUnpitched() { return OriginalPitch == 255; }
306 
308  buffer_t LoadSampleData(unsigned long SampleCount);
309  buffer_t LoadSampleDataWithNullSamplesExtension(uint NullSamplesCount);
310  buffer_t LoadSampleDataWithNullSamplesExtension(unsigned long SampleCount, uint NullSamplesCount);
311  buffer_t GetCache();
312  void ReleaseSampleData();
313  unsigned long SetPos(unsigned long SampleCount);
314  unsigned long GetPos();
315  unsigned long Read(void* pBuffer, unsigned long SampleCount);
316  unsigned long ReadNoClear(void* pBuffer, unsigned long SampleCount, buffer_t& tempBuffer);
317 
318  unsigned long ReadAndLoop (
319  void* pBuffer,
320  unsigned long FrameCount,
321  PlaybackState* pPlaybackState,
322  Region* pRegion
323  );
324 
325  //protected:
329 
330  //private:
331  int ChannelCount; // 2 for left and right samples
332 
333  uint32_t Start; // in sample data points (frames) from the begining of the sample data field
334  uint32_t End; // in sample data points (frames) from the begining of the sample data field
335  uint32_t StartLoop; // in sample data points (frames) from the begining of the sample data field
336  uint32_t EndLoop; // in sample data points (frames) from the begining of the sample data field
337  uint32_t SampleRate;
338  uint8_t OriginalPitch;
340  uint16_t SampleLink; /* If sfSampleType indicates a left or right sample, the
341  * sample header index of the associated right or left stereo
342  * sample respectively; zero otherwise. */
343  uint16_t SampleType;
344  };
345 
346  class File;
347  class Instrument;
348 
352  class Region {
353  public:
354  int loKey, hiKey;
356  int pan; // -64 - +63
357  int fineTune; // -99 - +99
358  int coarseTune; // TODO:
359  int overridingRootKey; // represents the MIDI key number at which the sample is to be played back at its original sample rate.
362 
364  int modLfoToVolume /* in centibels */, freqModLfo /* in absolute cents */;
365  int delayModLfo; // in absolute timecents
366  int vibLfoToPitch, freqVibLfo /* in absolute cents */;
367  int delayVibLfo; // in absolute timecents
368  int initialFilterFc /* in absolute cents */, initialFilterQ /* in centibels */;
369 
370  uint exclusiveClass; // exclusive group
371 
373  bool HasLoop;
374  uint LoopStart; // index (in frames) from the beginning of the sample
375  uint LoopEnd; // index (in frames) from the beginning of the sample
376  Instrument* pInstrument; // used when the region belongs to preset
377 
378  Region();
379  Sample* GetSample() { return pSample; }
380  Region* GetParent() { return this; }
381 
382  int GetUnityNote();
383 
388  Instrument* GetParentInstrument() { return pParentInstrument; }
389 
390  std::vector<ModulatorItem> modulators;
391 
392 
393  // Instrument can be referenced by more than one presets so we need to calculate values on the fly
394  int GetPan(Region* pPresetRegion = NULL); // -64 - +63
395  int GetFineTune(Region* pPresetRegion = NULL); // -99 - +99
396  int GetCoarseTune(Region* pPresetRegion = NULL); // -120 - +120
397  double GetEG1PreAttackDelay(Region* pPresetRegion = NULL); // in seconds
398  double GetEG1Attack(Region* pPresetRegion = NULL); // in seconds
399  double GetEG1Hold(Region* pPresetRegion = NULL); // in seconds
400  double GetEG1Decay(Region* pPresetRegion = NULL); // in seconds
401  int GetEG1Sustain(Region* pPresetRegion = NULL); // Sustain value of the sample amplitude EG (the decrease in level, expressed in centibels)
402  double GetEG1Release(Region* pPresetRegion = NULL); // in seconds
403 
404  double GetEG2PreAttackDelay(Region* pPresetRegion = NULL); // in seconds
405  double GetEG2Attack(Region* pPresetRegion = NULL); // in seconds
406  double GetEG2Hold(Region* pPresetRegion = NULL); // in seconds
407  double GetEG2Decay(Region* pPresetRegion = NULL); // in seconds
408  int GetEG2Sustain(Region* pPresetRegion = NULL); // Sustain value of the filter cutoff EG (in permilles)
409  double GetEG2Release(Region* pPresetRegion = NULL); // in seconds
410 
411  int GetModEnvToPitch(Region* pPresetRegion = NULL); // in cents
412  int GetModLfoToPitch(Region* pPresetRegion = NULL); // in cents
413  int GetModEnvToFilterFc(Region* pPresetRegion = NULL); // in cents
414  int GetModLfoToFilterFc(Region* pPresetRegion = NULL); // in cents
415  double GetModLfoToVolume(Region* pPresetRegion = NULL); // in centibels
416  double GetFreqModLfo(Region* pPresetRegion = NULL); // in Hz
417  double GetDelayModLfo(Region* pPresetRegion = NULL); // in seconds
418  int GetVibLfoToPitch(Region* pPresetRegion = NULL); // in cents
419  double GetFreqVibLfo(Region* pPresetRegion = NULL); // in Hz
420  double GetDelayVibLfo(Region* pPresetRegion = NULL); // in seconds
421  int GetInitialFilterFc(Region* pPresetRegion); // in absolute cents
422  int GetInitialFilterQ(Region* pPresetRegion); // in centibels
423 
424  friend class Instrument;
425  friend class Preset;
426 
427  private:
428  int EG1PreAttackDelay; // in timecents
429  int EG1Attack; // in timecents
430  int EG1Hold; // in timecents
431  int EG1Decay; // in timecents
432  int EG1Sustain; // Sustain value (the decrease in level, expressed in centibels)
433  int EG1Release; // in timecents
434 
435  int EG2PreAttackDelay; // in timecents
436  int EG2Attack; // in timecents
437  int EG2Hold; // in timecents
438  int EG2Decay; // in timecents
439  int EG2Sustain; // Sustain value of the filter cutoff EG (in permilles)
440  int EG2Release; // in timecents
441 
442  Instrument* pParentInstrument;
443 
444  void SetGenerator(sf2::File* pFile, GenList& Gen);
445  void SetModulator(sf2::File* pFile, ModList& Mod);
446  };
447 
449  public:
452 
454  virtual ~InstrumentBase();
455 
456  sf2::File* GetFile() { return pFile; }
457  String GetName() { return Name; }
458 
459  int GetRegionCount();
460  Region* GetRegion(int idx);
461 
462  protected:
463  std::vector<Region*> regions;
465  };
466 
467  class Query {
468  public:
469  int key;
470  uint8_t vel;
471 
472  Query(InstrumentBase& instrument);
473  Region* next();
474 
475  private:
476  InstrumentBase& instrument;
477  int i;
478  };
479 
480  class Instrument : public InstrumentBase {
481  public:
483  ~Instrument();
484 
485  void DeleteRegion(Region* pRegion);
486  //private:
487  uint16_t InstBagNdx;
488 
492  void LoadRegions(int idx1, int idx2);
493 
494  Region* CreateRegion();
495  };
496 
497  class Preset : public InstrumentBase {
498  public:
499  uint16_t PresetNum;
500  uint16_t Bank;
501  uint32_t Library;
502  uint32_t Genre;
503  uint32_t Morphology;
504 
506  ~Preset();
507 
508  //private:
510  uint16_t PresetBagNdx;
511 
515  void LoadRegions(int idx1, int idx2);
516 
517  Region* CreateRegion();
518  };
519 
520  class File {
521  public:
523 
525  ~File();
526 
527  int GetPresetCount();
528  Preset* GetPreset(int idx);
529  int GetInstrumentCount();
530  Instrument* GetInstrument(int idx);
531  void DeleteInstrument(Instrument* pInstrument);
532  int GetSampleCount();
533  Sample* GetSample(int idx);
534  void DeleteSample(Sample* pSample);
535  bool HasSamples();
536 
537  friend class Region;
538  friend class Instrument;
539  friend class Preset;
540 
541  protected:
543  std::vector<PresetBag> PresetBags;
544  std::vector<ModList> PresetModLists;
545  std::vector<GenList> PresetGenLists;
546  std::vector<InstBag> InstBags;
547  std::vector<ModList> InstModLists;
548  std::vector<GenList> InstGenLists;
549 
550  private:
551  std::vector<Preset*> Presets;
552  std::vector<Instrument*> Instruments;
553  std::vector<Sample*> Samples;
554  };
555 
558 
559 } // namespace sf2
560 #endif // __SF2_SF_H__
double GetEG1Release(Region *pPresetRegion=NULL)
Definition: SF.cpp:610
int delayVibLfo
Definition: SF.h:367
double ToHz(int cents)
Definition: SF.cpp:48
Region * CreateRegion()
Definition: SF.cpp:772
int GetPresetCount()
Definition: SF.cpp:1166
Definition: SF.h:520
int Major
Definition: SF.h:234
int GetVibLfoToPitch(Region *pPresetRegion=NULL)
Definition: SF.cpp:694
int modLfoToVolume
Definition: SF.h:364
~File()
Definition: SF.cpp:1153
SFGenerator GenOper
Definition: SF.h:104
int GetInitialFilterFc(Region *pPresetRegion)
Definition: SF.cpp:712
uint16_t InstGenNdx
Definition: SF.h:109
String Software
[<ISFT-ck>] ; The SoundFont tools used to create and alter the bank
Definition: SF.h:252
double GetEG1Attack(Region *pPresetRegion=NULL)
Definition: SF.cpp:586
Definition: SF.h:240
Info * pInfo
Definition: SF.h:522
SFTransform ModTransOper
Definition: SF.h:220
Region * pGlobalRegion
Definition: SF.h:451
String GetName()
Definition: SF.h:457
double GetFreqVibLfo(Region *pPresetRegion=NULL)
Definition: SF.cpp:700
String Name
Definition: SF.h:296
sf2::File * pFile
Definition: SF.h:464
void DeleteSample(Sample *pSample)
Definition: SF.cpp:1221
unsigned long SetPos(unsigned long SampleCount)
Sets the position within the sample (in sample points, not in bytes).
Definition: SF.cpp:1394
SFModulator ModSrcOper
Definition: SF.h:80
int key
Definition: SF.h:469
int GetRegionCount()
Definition: SF.cpp:736
Definition: SF.h:467
void DeleteRegion(Region *pRegion)
Definition: SF.cpp:831
uint32_t SampleRate
Definition: SF.h:337
struct sf2::_RangesType RangesType
int GetEG2Sustain(Region *pPresetRegion=NULL)
Definition: SF.cpp:640
String RomName
[<irom-ck>] ; Refers to the Sound ROM Name
Definition: SF.h:245
double GetEG2Decay(Region *pPresetRegion=NULL)
Definition: SF.cpp:634
uint8_t byHi
Definition: SF.h:93
Instrument zone.
Definition: SF.h:352
String libraryVersion()
Returns version of this C++ library.
Definition: SF.cpp:1561
uint16_t ModNdx
Definition: SF.h:72
struct sf2::_InstBag InstBag
double ToRatio(int Centibels)
Definition: SF.cpp:42
uint16_t GenNdx
Definition: SF.h:71
int startloopAddrsCoarseOffset
Definition: SF.h:361
Sample(RIFF::Chunk *ck, RIFF::Chunk *pCkSmpl, RIFF::Chunk *pCkSm24)
Definition: SF.cpp:150
uint16_t PresetNum
Definition: SF.h:499
int GetCoarseTune(Region *pPresetRegion=NULL)
Definition: SF.cpp:572
String libraryName()
Returns the name of this C++ library.
Definition: SF.cpp:1554
int startAddrsCoarseOffset
Definition: SF.h:360
uint16_t PresetBagNdx
Definition: SF.h:510
int GetModLfoToPitch(Region *pPresetRegion=NULL)
Definition: SF.cpp:658
unsigned long position
Current position within the sample.
Definition: SF.h:279
std::string String
Definition: SF.h:226
Modulator(SFModulator mod)
Definition: SF.cpp:84
int delayModLfo
Definition: SF.h:365
struct sf2::_ModList ModList
int GetFrameSize()
Definition: SF.cpp:199
RangesType ranges
Definition: SF.h:98
int Type
Definition: SF.h:205
uint32_t Library
Definition: SF.h:501
int Index
Definition: SF.h:209
String Copyright
[<ICOP-ck>] ; Contains any Copyright message
Definition: SF.h:250
Region * GetParent()
Definition: SF.h:380
bool HasSamples()
Definition: SF.cpp:1246
bool MidiPalete
Definition: SF.h:206
Query(InstrumentBase &instrument)
Definition: SF.cpp:748
String Comments
[<ICMT-ck>] ; Contains any Comments on the Bank
Definition: SF.h:251
uint LoopEnd
Definition: SF.h:375
SoundFont specific classes and definitions.
Definition: SF.h:62
Version(RIFF::Chunk *ck)
Definition: SF.cpp:100
int hiKey
Definition: SF.h:354
int GetInstrumentCount()
Definition: SF.cpp:1178
String Product
[<IPRD-ck>] ; Product for which the Bank was intended
Definition: SF.h:249
unsigned long NullExtensionSize
The buffer might be bigger than the actual data, if that&#39;s the case that unused space at the end of t...
Definition: SF.h:288
buffer_t GetCache()
Returns current cached sample points.
Definition: SF.cpp:1363
SFGenerator ModDestOper
Definition: SF.h:81
int modEnvToPitch
Definition: SF.h:363
uint32_t Start
Definition: SF.h:333
double GetDelayModLfo(Region *pPresetRegion=NULL)
Definition: SF.cpp:688
uint32_t End
Definition: SF.h:334
double GetEG2Release(Region *pPresetRegion=NULL)
Definition: SF.cpp:646
std::vector< Region * > regions
Definition: SF.h:463
uint16_t ModAmount
Definition: SF.h:82
Reflects the current playback state for a sample.
Definition: SF.h:277
Sample * pSample
Definition: SF.h:372
int coarseTune
Definition: SF.h:358
RIFF List Chunk.
Definition: RIFF.h:302
unsigned long loop_cycles_left
How many times the loop has still to be passed, this value will be decremented with each loop cycle...
Definition: SF.h:281
int initialFilterFc
Definition: SF.h:368
RIFF::Chunk * pCkSmpl
Definition: SF.h:327
int endloopAddrsOffset
Definition: SF.h:361
int freqModLfo
Definition: SF.h:364
Region * CreateRegion()
Definition: SF.cpp:897
GenAmountType GenAmount
Definition: SF.h:105
double GetEG2PreAttackDelay(Region *pPresetRegion=NULL)
Definition: SF.cpp:616
uint32_t EndLoop
Definition: SF.h:336
SFGenerator ModDestOper
Definition: SF.h:217
bool Direction
Definition: SF.h:207
~Info()
Definition: SF.cpp:135
double GetModLfoToVolume(Region *pPresetRegion=NULL)
Definition: SF.cpp:676
String GetName()
Definition: SF.h:300
int modLfoToFilterFc
Definition: SF.h:363
double GetDelayVibLfo(Region *pPresetRegion=NULL)
Definition: SF.cpp:706
Exception(String Message)
Definition: SF.h:229
int loKey
Definition: SF.h:354
Version * pRomVer
[<iver-ck>] ; Refers to the Sound ROM Version
Definition: SF.h:246
uint8_t PitchCorrection
Definition: SF.h:339
String Message
Definition: RIFF.h:408
sf2::File * GetFile()
Definition: SF.h:456
SFGeneratorType
Definition: SF.h:113
double GetEG1Hold(Region *pPresetRegion=NULL)
Definition: SF.cpp:592
uint exclusiveClass
Definition: SF.h:370
void DeleteInstrument(Instrument *pInstrument)
Definition: SF.cpp:1190
void LoadRegions(int idx1, int idx2)
Load all regions (zones, bags) in the range idx1 - idx2.
Definition: SF.cpp:843
uint32_t Genre
Definition: SF.h:502
int fineTune
Definition: SF.h:357
sf2::File * pFile
Definition: SF.h:509
void LoadRegions(int idx1, int idx2)
Load all regions (zones, bags) in the range idx1 - idx2.
Definition: SF.cpp:941
int startAddrsOffset
Definition: SF.h:360
union sf2::_GenAmountType GenAmountType
int initialFilterQ
Definition: SF.h:368
uint8_t byLo
Definition: SF.h:92
uint16_t InstModNdx
Definition: SF.h:110
std::vector< GenList > PresetGenLists
Definition: SF.h:545
std::vector< InstBag > InstBags
Definition: SF.h:546
std::vector< ModulatorItem > modulators
Definition: SF.h:390
buffer_t LoadSampleData()
Loads the whole sample wave into RAM.
Definition: SF.cpp:1263
Preset * GetPreset(int idx)
Definition: SF.cpp:1170
bool IsUnpitched()
Definition: SF.h:305
unsigned long Read(void *pBuffer, unsigned long SampleCount)
Reads SampleCount number of sample points from the current position into the buffer pointed by pBuffe...
Definition: SF.cpp:1509
Ordinary RIFF Chunk.
Definition: RIFF.h:205
std::vector< ModList > PresetModLists
Definition: SF.h:544
int endloopAddrsCoarseOffset
Definition: SF.h:361
int endAddrsCoarseOffset
Definition: SF.h:360
int minVel
Definition: SF.h:355
int freqVibLfo
Definition: SF.h:366
int vibLfoToPitch
Definition: SF.h:366
uint8_t OriginalPitch
Definition: SF.h:338
bool HasLoops()
Definition: SF.cpp:203
double GetEG2Hold(Region *pPresetRegion=NULL)
Definition: SF.cpp:628
Preset(sf2::File *pFile, RIFF::Chunk *ck)
Definition: SF.cpp:883
uint16_t ModAmount
Definition: SF.h:218
ModulatorItem(ModList &mod)
Definition: SF.cpp:93
unsigned long GetPos()
Returns the current position in the sample (in sample points).
Definition: SF.cpp:1403
uint16_t SFTransform
Definition: SF.h:77
uint LoopStart
Definition: SF.h:374
String Name
Definition: SF.h:450
void * pStart
Points to the beginning of the buffer.
Definition: SF.h:286
Instrument(sf2::File *pFile, RIFF::Chunk *ck)
Definition: SF.cpp:763
std::vector< ModList > InstModLists
Definition: SF.h:547
buffer_t LoadSampleDataWithNullSamplesExtension(uint NullSamplesCount)
Loads the whole sample wave into RAM.
Definition: SF.cpp:1308
int GetPan(Region *pPresetRegion=NULL)
Definition: SF.cpp:556
uint8_t vel
Definition: SF.h:470
int GetFineTune(Region *pPresetRegion=NULL)
Definition: SF.cpp:564
Instrument * GetInstrument(int idx)
Definition: SF.cpp:1182
Version * pVer
<ifil-ck> ; Refers to the version of the Sound Font RIFF file
Definition: SF.h:242
File(RIFF::File *pRIFF)
Constructor.
Definition: SF.cpp:977
uint16_t SFModulator
Definition: SF.h:75
double GetEG1PreAttackDelay(Region *pPresetRegion=NULL)
Definition: SF.cpp:580
uint16_t Bank
Definition: SF.h:500
struct sf2::_PresetBag PresetBag
buffer_t RAMCache
Buffers samples (already uncompressed) in RAM.
Definition: SF.h:326
int modLfoToPitch
Definition: SF.h:363
short shAmount
Definition: SF.h:99
int Minor
Definition: SF.h:235
gig::buffer_t buffer_t
Definition: Korg.h:79
uint32_t StartLoop
Definition: SF.h:335
Pointer address and size of a buffer.
Definition: SF.h:285
virtual ~InstrumentBase()
Definition: SF.cpp:729
uint16_t SampleType
Definition: SF.h:343
uint16_t SampleLink
Definition: SF.h:340
~Preset()
Definition: SF.cpp:894
String CreationDate
[<ICRD-ck>] ; Refers to the Date of Creation of the Bank
Definition: SF.h:247
uint16_t SFGenerator
Definition: SF.h:76
uint32_t Morphology
Definition: SF.h:503
RIFF File.
Definition: RIFF.h:351
struct sf2::_GenList GenList
int GetInitialFilterQ(Region *pPresetRegion)
Definition: SF.cpp:718
RIFF specific classes and definitions.
Definition: RIFF.h:135
int GetChannelCount()
Definition: SF.cpp:188
uint16_t wAmount
Definition: SF.h:100
Modulator ModSrcOper
Definition: SF.h:216
int pan
Definition: SF.h:356
int GetEG1Sustain(Region *pPresetRegion=NULL)
Definition: SF.cpp:604
Modulator ModAmtSrcOper
Definition: SF.h:219
long GetTotalFrameCount()
Definition: SF.cpp:192
double GetEG1Decay(Region *pPresetRegion=NULL)
Definition: SF.cpp:598
double ToSeconds(int Timecents)
Definition: SF.cpp:35
unsigned long ReadNoClear(void *pBuffer, unsigned long SampleCount, buffer_t &tempBuffer)
Reads SampleCount number of sample points from the current position into the buffer pointed by pBuffe...
Definition: SF.cpp:1543
int modEnvToFilterFc
Definition: SF.h:363
bool HasLoop
Definition: SF.h:373
int ChannelCount
Definition: SF.h:331
Instrument * GetParentInstrument()
Definition: SF.h:388
SFModulator ModAmtSrcOper
Definition: SF.h:83
int overridingRootKey
Definition: SF.h:359
InstrumentBase(sf2::File *pFile)
Definition: SF.cpp:724
Will be thrown whenever an error occurs while handling a RIFF file.
Definition: RIFF.h:406
String SoundEngine
<isng-ck> ; Refers to the target Sound Engine
Definition: SF.h:243
String Engineers
[<IENG-ck>] ; Sound Designers and Engineers for the Bank
Definition: SF.h:248
std::vector< PresetBag > PresetBags
Definition: SF.h:543
int startloopAddrsOffset
Definition: SF.h:361
double GetFreqModLfo(Region *pPresetRegion=NULL)
Definition: SF.cpp:682
Sample * GetSample()
Definition: SF.h:379
int GetSampleCount()
Definition: SF.cpp:1209
Instrument * pInstrument
Definition: SF.h:376
double GetEG2Attack(Region *pPresetRegion=NULL)
Definition: SF.cpp:622
Definition: SF.h:131
unsigned long Size
Size of the actual data in the buffer in bytes.
Definition: SF.h:287
Region * GetRegion(int idx)
Definition: SF.cpp:740
int GetModEnvToPitch(Region *pPresetRegion=NULL)
Definition: SF.cpp:652
Region()
Definition: SF.cpp:262
SFTransform ModTransOper
Definition: SF.h:84
int GetModLfoToFilterFc(Region *pPresetRegion=NULL)
Definition: SF.cpp:670
unsigned long ReadAndLoop(void *pBuffer, unsigned long FrameCount, PlaybackState *pPlaybackState, Region *pRegion)
Reads SampleCount number of sample points from the position stored in pPlaybackState into the buffer ...
Definition: SF.cpp:233
int endAddrsOffset
Definition: SF.h:360
Region * next()
Definition: SF.cpp:752
int GetUnityNote()
Definition: SF.cpp:294
RIFF::Chunk * pCkSm24
Definition: SF.h:328
bool Polarity
Definition: SF.h:208
std::vector< GenList > InstGenLists
Definition: SF.h:548
bool reverse
If playback direction is currently backwards (in case there is a pingpong or reverse loop defined)...
Definition: SF.h:280
String BankName
<INAM-ck> ; Refers to the Sound Font Bank Name
Definition: SF.h:244
Info(RIFF::List *list)
Constructor.
Definition: SF.cpp:115
uint16_t InstBagNdx
Definition: SF.h:487
void ReleaseSampleData()
Frees the cached sample from RAM if loaded with LoadSampleData() previously.
Definition: SF.cpp:1378
int GetModEnvToFilterFc(Region *pPresetRegion=NULL)
Definition: SF.cpp:664
int maxVel
Definition: SF.h:355
Sample * GetSample(int idx)
Definition: SF.cpp:1213
RIFF::File * pRIFF
Definition: SF.h:542